如何使用boto3列出所有AWS子网的名称

时间:2017-04-29 10:59:07

标签: amazon-web-services boto3 amazon-vpc

我可以使用以下代码轻松列出所有安全组名称:

import boto3
ec2_client = boto3.client('ec2')

print('All Security Groups:')
print('----------------')
sg_all = ec2_client.describe_security_groups()
for sg in sg_all['SecurityGroups'] :
    print(sg['GroupName'])

我试图以相同的方式列出所有子网名称:

print('Subnets:')
print('-------')
sn_all = ec2_client.describe_subnets()
for sn in sn_all['Subnets'] :
    print(sn['SubnetName'])

此处,变量sn获取包含所有属性和标签的所有子网,但找不到像GroupName这样的子网的正确属性名称。

我可以使用boto3.resource('ec2')或以下代码,但为了简单起见,我正在寻找上面用来列出所有安全组的类似方法:

print('Subnets:')
print('-------')
sn_all = ec2_client.describe_subnets()
for sn in sn_all['Subnets'] :
    for tag in sn['Tags']:
        if tag['Key'] == 'Name':
            print(tag['Value'])

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

亚马逊VPC子网没有"名称"字段(而安全组执行有一个GroupName字段)。

在管理控制台中,您可以看到安全组有两列:组名称和名称。 Name字段实际上是名为Name的标记的值。

另一方面,

子网只有名称标签。

提示:查看可用信息的简便方法是查看AWS Command-Line Interface (CLI)describe-subnets文档。

答案 1 :(得分:0)

import boto3
ec2_client = boto3.client('ec2')
print('Subnets:')
print('-------')
sn_all = ec2_client.describe_subnets()
for sn in sn_all['Subnets'] :
    print(sn['SubnetId'])