#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. Вот и все! Спасибо 🙂 Хотя я немного разочарован, отрицания не работают в фильтрах.