Как найти экземпляры, у которых нет тега, используя Boto3

#python #amazon-ec2 #boto3

#python #amazon-ec2 #boto3

Вопрос:

Я пытаюсь найти экземпляры, у которых НЕТ определенного тега.

Например, я хочу, чтобы все экземпляры, у которых нет тега Foo. Мне также нужны экземпляры, у которых нет значения Foo, равного Bar .

Это то, что я делаю сейчас:

 import boto3


def aws_get_instances_by_name(name):
    """Get EC2 instances by name"""
    ec2 = boto3.resource('ec2')

    instance_iterator = ec2.instances.filter(
        Filters=[
            {
                'Name': 'tag:Name',
                'Values': [
                    name,
                ]
            },
            {
                'Name': 'tag:Foo',
                'Values': [

                ]
            },
        ]
    )

    return instance_iterator
 

Это ничего не возвращает.

Каков правильный способ?

Комментарии:

1. Нет фильтра для отрицательного сравнения. Вы должны перебрать все экземпляры и проверить теги.

Ответ №1:

Вот некоторый код, который будет отображать instance_id экземпляры for без определенного тега:

 import boto3

instances = [i for i in boto3.resource('ec2', region_name='ap-southeast-2').instances.all()]

# Print instance_id of instances that do not have a Tag of Key='Foo'
for i in instances:
  if i.tags is not None and 'Foo' not in [t['Key'] for t in i.tags]:
    print i.instance_id
 

Комментарии:

1. Вот и все! Спасибо 🙂 Хотя я немного разочарован, отрицания не работают в фильтрах.