繁体   English   中英

为什么我无法通过我的 python boto3 代码列出所有 EC2 属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM