[英]Why am I not able to list all EC2 attributes through my python boto3 code?
import boto3
import csv
import pprint
ec2_cli=boto3.client(service_name='ec2') #creating a ec2_cli object with client session
aws_regions = ec2_cli.describe_regions()['Regions']
all_aws_regions = []
for each_region in aws_regions:
#print(each_region['RegionName'])
all_aws_regions.append(each_region['RegionName'])
#print (all_aws_regions)
file_open = open('ec2_inventory.csv', 'w', newline='')
data_obj=csv.writer(file_open)
data_obj.writerow(["S.no", "InstanceID", "ImageID", "Instance Lifecycle", "Instance Type", "Private DNS Name", "Private IP Address", "Root Device Name", "Root Device Type", "VPC ID"])
count = 1
for each_region in all_aws_regions:
ec2_resource = boto3.resource(service_name='ec2', region_name = each_region)
for each_inst_in_reg in ec2_resource.instances.all():
#print (count,each_inst_in_reg.instance_id, each_inst_in_reg.`block_device_mapping.device_name`, each_inst_in_reg.block_device_mapping.status, each_inst_in_reg.block_device_mapping.volume_id, each_inst_in_reg.dns_name, each_inst_in_reg.image_id, each_inst_in_reg.instance_lifecycle, each_inst_in_reg.instance_state_name, each_inst_in_reg.instance_type, each_inst_in_reg.ip_address, each_inst_in_reg.owner_id, each_inst_in_reg.private_dns_name, each_inst_in_reg.private_ip_address, each_inst_in_reg.root_device_name, each_inst_in_reg.root_device_type, each_inst_in_reg.vpc_id, each_inst_in_reg.tag_key)
data_obj.writerow([count,each_inst_in_reg.instance_id, each_inst_in_reg.image_id, each_inst_in_reg.instance_lifecycle, each_inst_in_reg.instance_type, each_inst_in_reg.private_dns_name, each_inst_in_reg.private_ip_address, each_inst_in_reg.root_device_name, each_inst_in_reg.root_device_type, each_inst_in_reg.vpc_id])
count+=1
file_open.close()
我无法在 excel 文件中返回 block_device_mapping.device_name、block_device_mapping.device_status 的值。 有人可以建议我缺少什么吗? 我可以在 instances.all() 中看到以下可以调用的属性: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html
ec2_resource.instances.all()
命令返回ec2.Instance
的列表。
在查看 EC2 的 boto3 文档时:
ec2.Instance
object 包含一个名为block_device_mappings
的属性(注意它是复数)DeviceName
条目和Ebs
字典Ebs
字典包含一个名为Status
的条目因此,可能有多个块设备附加到一个 Amazon EC2 实例。 map 这对于一个 CSV 文件来说不太好,该文件期望每行的列数相同——例如,考虑如果有多个 Amazon EBS 卷附加到 EC2 实例,它应该包含什么信息。
要访问 Name 和 Status 字段,您可以遍历block_device_mappings
中的每个条目,或者您可以假设您只需要有关所连接的第一个卷的信息。
要获取有关第一卷的信息,您可以简单地使用:
each_inst_in_reg.block_device_mappings[0].DeviceName
each_inst_in_reg.block_device_mappings[0].Ebs['Status']
要遍历每个卷,您可以使用:
for volume in each_inst_in_reg.block_device_mappings:
name = volume.DeviceName
status = volume.Ebs['Status']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.