【问题标题】:Ignoring case sensitivity when filtering with boto3使用 boto3 过滤时忽略大小写敏感
【发布时间】: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


【解决方案1】:

来自docs

如果您为过滤器指定 多个值,则这些值会以 OR 连接,并且请求会返回与任何指定值匹配的所有结果。 p>

应该是这样的:

{'Name': 'tag:Service', 'Values': ['gw','GW']}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2016-05-30
    • 2011-02-06
    相关资源
    最近更新 更多