【发布时间】:2022-02-09 16:57:38
【问题描述】:
我正在尝试过滤我在脚本中获得的 EC2 实例列表。我希望我的搜索基于标签,因为我们根据它们的目的(服务机器、个人网关等)标记实例。
我用这个:
client = boto3.client('ec2', region_name='eu-west-1')
results = (
client.get_paginator('describe_instances')
.paginate(
Filters=[
{'Name': 'tag:Service', 'Values': ['gw']}
]
)
.build_full_result()
)
counter=0
for result in results['Reservations']:
counter+=1
print(counter, result['Instances'][0]['InstanceId'])
上面的工作正常,但根据我的计数器,我没有得到正确数量的实例。
我去仔细检查了一下:在我的 EC2 控制台中,我得到了 361 个基于相同标签的实例:
当我运行上面的代码时,我得到了 335 个实例(根据我放置的计数器)。
然后,当我将过滤器更改为使用 GW 而不是 gw 时,我只得到 26 个实例,加起来是 361 (335 + 26)。
我尝试通过简单地添加另一个过滤器来修复它,如下所示:
results = (
client.get_paginator('describe_instances')
.paginate(
Filters=[
{'Name': 'tag:Service', 'Values': ['gw']},
{'Name': 'tag:Service', 'Values': ['GW']}
]
)
.build_full_result()
)
这个变体不返回任何东西,所以我想我不能使用具有“不同”值的相同键?
我尝试了{'Name': 'tag:Service', 'Values': ['gw'|'GW'] 之类的东西,但不支持|。
我想避免在循环中搜索这些标签。我认为在我的分页器中使用内置的filter 会更简洁。
我不确定我还有什么其他选择。为什么 EC2 控制台不区分大小写,而过滤器不区分大小写?
编辑:
原来我没有对文档给予足够的关注,我只需要:{'Name': 'tag:Service', 'Values': ['gw', 'GW']}
【问题讨论】:
-
你试过
'Values': ['gw', 'GW']吗? -
@theoctober19th 我为错过那个而感到愚蠢,谢谢
标签: python amazon-web-services amazon-ec2 boto3