【问题标题】:Python Boto3 is not printing all region ec2 detailPython Boto3 未打印所有区域 ec2 详细信息
【发布时间】:2021-12-27 20:10:12
【问题描述】:

我需要从所有区域获取 ec2 详细信息并需要生成 csv。所以将区域存储在一个数组中并尝试过,但只显示最后一个区域的详细信息。

import boto3
import csv

ec2=boto3.client(service_name='ec2')

region=[]
for each_region in ec2.describe_region()['Regions']:
    region.append(each_region['RegionName'])

for each_region in region:
    client = boto3.client('ec2',region_name=each_region)

    result = []
    response = ec2.describe_instances(
        InstanceIds=[
            'i-xxxxxxxxxxxxxxxxx'
        ]).get('Reservations')

    for item in response:
        for each in item['Instances']:
            result.append({
                'ImageId': each['ImageId'],
                'InstanceType': each['InstanceType'],
                'PublicIp': each['PublicIpAddress'],
                'PrivateIp': each['PrivateIpAddress']
            })


    header = ['ImageId', 'InstanceType', 'PublicIp', 'PrivateIp']
    with open('ec2-details.csv', 'w') as file:
        writer = csv.DictWriter(file, fieldnames=header)
        writer.writeheader()
        writer.writerows(result)

【问题讨论】:

  • 您正在向 describe_instances 提供占位符 'i-xxxxxxxxxxxxxxxxx'。您如何知道每个给定区域的实例 ID 列表?您的代码没有显示您是如何做到的。

标签: python-3.x amazon-web-services amazon-ec2 boto3


【解决方案1】:

您应该将代码重构为:

  • 在区域循环之前初始化结果
  • 在区域循环后写入结果

注意:我从对 describe_instances 的调用中删除了 InstanceIds 的占位符列表,因为我在您的代码中没有看到您填充此列表的任何地方。如果需要,将其添加回来。

这是一个例子:

result = []

for each_region in region:
    client = boto3.client('ec2',region_name=each_region)
    
    response = ec2.describe_instances().get('Reservations')

    for item in response:
        for each in item['Instances']:
            result.append({
                'ImageId': each['ImageId'],
                'InstanceType': each['InstanceType'],
                'PublicIp': each['PublicIpAddress'],
                'PrivateIp': each['PrivateIpAddress']
            })

header = ['ImageId', 'InstanceType', 'PublicIp', 'PrivateIp']
with open('ec2-details.csv', 'w') as file:
    writer = csv.DictWriter(file, fieldnames=header)
    writer.writeheader()
    writer.writerows(result)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2020-10-30
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多