Лямбда python - условие для маркировки экземпляра EC2 - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь создать теги EC2 в случае определенного условия.

Функция Lambda должна маркировать экземпляр, только если у него нет тега (Key = 'DoNotTerminate', Value = 'True').

В данный момент функция Lambda помечает каждый экземпляр, несмотря на условие.

Я бы хотел поблагодарить вас за помощь!

def lambda_handler(event, context): 
    instance_ids = []
    for reservation in boto_response['Reservations']:
        for instance in reservation['Instances']:
            if instance['State']['Name'] == 'running':
                tags = {}
                for tag in instance['Tags']:
                    tags[tag['Key']] = tag['Value'] 
                    instance_ids.append(instance['InstanceId'])
                    if (tag['Key'] == 'DoNotTerminate' and tag['Value'] == 'True'):
                        pass
                    else: 
                        ec2.create_tags(Resources=instance_ids,Tags=[{'Key':'scheduler:ec2-startstop','Value':'True'}])

1 Ответ

1 голос
/ 23 января 2020

Экземпляр Amazon EC2 может иметь несколько тегов.

Однако ваш код создает теги всякий раз, когда обнаруживает тег, который не равен DoNotTerminate, а не добавляет теги только один раз для экземпляра.

Вы должны переместить свой код, как:

def lambda_handler(event, context): 
    instance_to_tag = []
    for reservation in boto_response['Reservations']:  # Not sure where boto_response comes from!
        for instance in reservation['Instances']:
            if instance['State']['Name'] == 'running':

                # If there is no `DoNotTerminate` tag
                if not [tag for tag in instance['Tags'] if tag['Key'] == 'DoNotTerminate' and tag['Value'] == 'True']:
                    instance_to_tag.append(instance['InstanceId'])

    # Apply a tag to all instances found
    ec2.create_tags(Resources=instance_to_tag, Tags=[{'Key':'scheduler:ec2-startstop','Value':'True'}])
...