【发布时间】:2020-01-30 06:29:02
【问题描述】:
我正在尝试使用boto3 API 调用Python 来返回有关AWS 帐户中所有EC2 实例的信息,但我无法显示availability_zone 资源。
例如,当我可以使用此代码成功迭代所有 EC2 实例时:
ec2 = boto3.resource('ec2')
output = defaultdict()
for instance in ec2.instances.all()
for iface in instance.network_interfaces:
output[instance.id] = {
'Instance ID': instance.id,
'Subnet ID': iface.subnet_id
}
我省略了其余的代码,但是上面的代码可以工作并输出这些资源的值,然后我使用Pandas .to_csv 将这些资源放入csv 文件中。
当我尝试在Python dictionary 中添加以下值时:
'Availability Zone': instance.availability_zone
我收到以下错误:
AttributeError: 'ec2.Instance' object has no attribute 'availability_zone'
这是预期的行为。然后我尝试以下方法:
'Availability Zone': iface.availability_zone
运行时出错,但输出为空。 csv 文件中没有任何内容。
我查看了boto3documentation,availability_zone 是NetworkInterface 资源下的可用资源属性,就像我正在使用并且正在使用的subnet_id。
我在这里缺少什么?谁能指出我正确的方向或让我知道我做错了什么?
【问题讨论】:
-
@aws_apprentice,感谢您的回复。我想我正在使用 iface.availability_zone 调用 NetworkInterface。调用时成功返回了 subnet_id 属性。当我调用 iface.availability_zone 时,我没有收到任何错误,它只是返回 null。
-
尝试使用 AWS CLI(或我最喜欢的工具,
aws-shell)进行交互式探索。如果您使用的是 shell,请运行命令ec2 describe-network-interfaces。您在该输出中看到AvailabilityZone吗?当我运行该命令时,我看到了与每个接口关联的区域,正如预期的那样。如果它在这里工作,它应该也可以在你的代码中工作。 -
当我提取 AZ 信息时,我从接口所在的子网中提取它。我看到的抽象是:EC2 实例具有驻留在子网中的网络接口,该子网位于一个AZ。
标签: python python-3.x amazon-web-services amazon-ec2 boto3