AWS лямбда python функция - остановка виртуальных машин с указанным тегом c - PullRequest
0 голосов
/ 11 февраля 2020

Я создал функцию lampda для остановки экземпляров ec2 с указанным тегом c, код python представлен ниже. Основная задача этого решения - остановить все экземпляры с тегом «имя: цель, значение: температура» . Когда я выполняю этот скрипт, все экземпляры ec2 останавливаются. Я предполагаю, что что-то не так с этим следующим фильтром instances = ec2.instances.filter(Filters=[{'Name': 'tag:purpose', 'Values': ['temp']}]). Код функции ниже:

import boto3
def lambda_handler(event, context):
    client = boto3.client('ec2')
    ec2_regions = [region['RegionName'] for region in client.describe_regions()['Regions']]
    for region in ec2_regions:
        ec2 = boto3.resource('ec2',region_name=region)
        instances = ec2.instances.filter(Filters=[{'Name': 'tag:purpose', 'Values': ['temp']}])
        RunningInstances = [instance.id for instance in instances]
        for i in RunningInstances:
            stoppingInstances = ec2.instances.stop(i)

1 Ответ

1 голос
/ 12 февраля 2020

Ваш фильтр для тегов неправильный, вам нужно его изменить:

    filters = [{
        'Name': 'tag:Name',
        'Values': ['Shut']
    },
        {
            'Name': 'instance-state-name',
            'Values': ['running']
    }
    ]

Вот полный рабочий пример:

import boto3

#define the connection
ec2 = boto3.resource('ec2')


def lambda_handler(event, context):
    # Use the filter() method of the instances collection to retrieve
    # all running EC2 instances.
    filters = [{
        'Name': 'tag:Name',
        'Values': ['Shut']
    },
        {
            'Name': 'instance-state-name',
            'Values': ['running']
    }
    ]

    #filter the instances
    instances = ec2.instances.filter(Filters=filters)

    #locate all running instances
    RunningInstances = [instance.id for instance in instances]

    #print the instances for logging purposes
    #print RunningInstances

    #make sure there are actually instances to shut down.
    if len(RunningInstances) > 0:
        #perform the shutdown
        shuttingDown = ec2.instances.filter(
            InstanceIds=RunningInstances).stop()
        print(shuttingDown)
    else:
        print("No Instances to shut down")
...