You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在boto3中配置多个filter筛选条件查询带指定标签的EC2实例

多标签EC2实例筛选解决方案

核心问题原因

你当前代码的核心问题是将多个过滤规则写在了同一个字典内,Python字典存在重复键时,后定义的键值会覆盖之前的内容,导致你配置的多组筛选条件实际仅有最后一组生效。

boto3的ec2.instances.filter方法中,Filters参数接收的列表内,每个字典对应一条独立的筛选规则,多条规则默认是逻辑与的关系,刚好符合你要同时满足多个标签匹配的需求。

修改后可直接运行的代码

from collections import defaultdict
import boto3

# 连接EC2服务
ec2 = boto3.resource('ec2')

# 筛选同时满足条件的运行中实例:标签prod=monitor、标签test=monitor
running_instances = ec2.instances.filter(Filters=[
    {'Name': 'instance-state-name', 'Values': ['running']},
    {'Name': 'tag:prod', 'Values': ['monitor']},
    {'Name': 'tag:test', 'Values': ['monitor']}
])

ec2info = defaultdict()
for instance in running_instances:
    # 初始化实例名称默认值,避免无Name标签时触发变量未定义错误
    name = '未命名'
    for tag in instance.tags:
        if 'Name' == tag['Key']:
            name = tag['Value']
    # 将实例信息存入字典
    ec2info[instance.id] = {
        'Name': name,
        'Type': instance.instance_type,
        'State': instance.state['Name'],
        'Private IP': instance.private_ip_address,
        'Public IP': instance.public_ip_address,
        'Launch Time': instance.launch_time
    }

attributes = ['Name', 'Type', 'State', 'Private IP', 'Public IP', 'Launch Time']
for instance_id, instance in ec2info.items():
    for key in attributes:
        print("{0}: {1}".format(key, instance[key]))
    print("------")

补充说明

  • 多个筛选规则会同时生效,仅返回同时匹配所有规则的实例
  • 新增了实例名称的默认值处理,兼容没有配置Name标签的实例

内容的提问来源于stack exchange,提问作者Joe John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:45:06