我想列出所有ec2资源的标签(客户网关| dhcp-options |图像|实例| internet-gateway | network-acl | network-interface | reserved-instances | route-table | security-group | snapshot | spot-instances-request | subnet | volume | vpc | vpn-connection和vpn-gateway)。
以下代码列出了我的ec2客户端的所有资源 拥有 标记:
session = boto3.Session(profile_name='default')
ec2Client = session.client('ec2', region_name='eu-west-2')
allTags = ec2Client.describe_tags()['Tags']
for tag in allTags:
print tag
问题
这里的问题是只有像'实例'那样的资源,没有包含标签的实例。如果ec2中有5个实例,3个带有标签,2个没有标签,上面的代码将只列出那些带有标签的3个实例。
渴望输出
我希望列出所有资源(实例,VPC,子网,安全组等),无论是否定义了标记。如果有标签显示标签,如果没有,我仍然希望它包含在没有标签的结果中。
一种方法是使用describe_xxx方法为每个资源获取预留并查找标记,但我必须为每个资源调用它(如describe_instances(),describe_snapshots,describe_security_groups()等),其中,我的意见不是那么清洁和通用的方式解决方案。
问题
有没有办法使用boto3库列出所有资源,如果资源有标签也显示标签,如果没有,那么只显示资源?
答案 0 :(得分:0)
据我所知,boto3不提供describe_all
方法。为了达到理想的结果,如果我理解正确,你必须单独描述所有对象类型,即describe_vpcs
,describe_instances
等,然后在结果数据结构中查找标记。 / p>
例如,
可以从所有结果方法调用(describe_instances
,describe_vpcs
,describe_subnets
等)构建单个数据结构,如下所示:
{
Vpcs: [{... Tags: [{...}]}]
Instances: [{... Tags: [{...}]}]
Subnets: [{... Tags: [{...}]}]
...
}
我相信这是你在问题中所指对象的最接近的匹配。