在AWS中,boto3如何列出所有预留,无论标记和其他值如何

时间:2018-01-08 22:21:01

标签: python amazon-web-services boto3

我想列出所有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库列出所有资源,如果资源有标签也显示标签,如果没有,那么只显示资源?

1 个答案:

答案 0 :(得分:0)

据我所知,boto3不提供describe_all方法。为了达到理想的结果,如果我理解正确,你必须单独描述所有对象类型,即describe_vpcsdescribe_instances等,然后在结果数据结构中查找标记。 / p>

例如, 可以从所有结果方法调用(describe_instancesdescribe_vpcsdescribe_subnets等)构建单个数据结构,如下所示:

{
  Vpcs: [{... Tags: [{...}]}]
  Instances: [{... Tags: [{...}]}]
  Subnets: [{... Tags: [{...}]}]
  ...
}

我相信这是你在问题中所指对象的最接近的匹配。