csv 使用boto3获取多个aws帐户ec2库存

yc0p9oo0  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(145)

我已经编写了python boto3代码来获取AWS中的ec2库存,在同一代码中,我正在修改以将多个AWS帐户的ec2库存列表转换为csv,但在该代码中,我只获取最后一个值的ec2输出详细信息。有人帮助我使用以下脚本将多个AWS ec2库存生成为csv。

import boto3
import csv
profiles = ['dev','stag']
for name in profiles:
    aws_mag_con=boto3.session.Session(profile_name=name)
ec2_con_re=aws_mag_con.resource(service_name="ec2",region_name="ap-southeast-1")
cnt=1
csv_ob=open("inventory_info.csv","w",newline='')
csv_w=csv.writer(csv_ob)
csv_w.writerow(["S_NO","Instance_Id",'Instance_Type','Architecture','LaunchTime','Privat_Ip'])

for each in ec2_con_re.instances.all():
    print(cnt,each,each.instance_id,each.instance_type,each.architecture,each.launch_time.strftime("%Y-%m-%d"),each.private_ip_address) 
    csv_w.writerow([cnt,each.instance_id,each.instance_type,each.architecture,each.launch_time.strftime("%Y-%m-%d"),each.private_ip_address])

    cnt+=1
csv_ob.close()

上面的脚本我得到的stagaws帐户的输出只。

dxxyhpgq

dxxyhpgq1#

这是因为您的缩进不正确。循环只考虑第一行,其他所有内容将针对profiles的最后一个元素执行(当for循环完成时)。它应该是:

import boto3
import csv
profiles = ['dev','stag']
for name in profiles:
    aws_mag_con=boto3.session.Session(profile_name=name)
    ec2_con_re=aws_mag_con.resource(service_name="ec2",region_name="ap-southeast-1")
    cnt=1
    csv_ob=open("inventory_info.csv","w",newline='')
    csv_w=csv.writer(csv_ob)
    csv_w.writerow(["S_NO","Instance_Id",'Instance_Type','Architecture','LaunchTime','Privat_Ip'])

    for each in ec2_con_re.instances.all():
        print(cnt,each,each.instance_id,each.instance_type,each.architecture,each.launch_time.strftime("%Y-%m-%d"),each.private_ip_address) 
        csv_w.writerow([cnt,each.instance_id,each.instance_type,each.architecture,each.launch_time.strftime("%Y-%m-%d"),each.private_ip_address])

        cnt+=1
    csv_ob.close()

相关问题