无法获取ec2_client.describe_instances()来打印作为参数传递的实例

时间:2017-11-03 03:28:46

标签: python amazon-ec2 aws-sdk boto3

我很难弄清楚如何制作下面的代码,将InstanceID作为参数并仅显示有关此实例的信息:

import boto3

ec2_client = boto3.client('ec2')

instance_data = []
instanceid = 'i-123456'
def get_instace_data(instanceid):
    reservations = ec2_client.describe_instances()
    for reservation in reservations['Reservations']:
        for instance in reservation['Instances']:
            instance_data.append(
                        {
                            'instanceId': instance['InstanceId'],
                            'instanceType': instance['InstanceType'],
                            'launchDate': instance['LaunchTime'].strftime('%Y-%m-%dT%H:%M:%S.%f')
                        }
                    )
    print(instance_data)



get_instace_data(instanceid)

我的理解是get_instance_data()应该获取实例ID并仅显示该实例的信息,即使它迭代到返回的整个'Reservations'字典。

我在这里错过了什么吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您的代码会将所有实例附加到instance_data。 为了只接收所需的实例,您需要更改

reservations = ec2_client.describe_instances()

以下内容:

reservations = ec2_client.describe_instances(
    Filters=
    InstanceIds=['i-123456'])

答案 1 :(得分:0)

describe_instance()允许您指定过滤器,但是,语法可能非常混乱。因为您可以在Filters参数内或InsanceIds参数内指定实例ID。

e.g。

# method 1 
response = client.describe_instances(
    InstanceIds=[
        'i-123456',
    ],
)

# method 2 
response = client.describe_instances(
    Filters=[
        {
            'Name': 'instance-id',
            'Values': ['i-123456']
        },
    ],
)

显示过滤器(列表)的文档非常混乱,因为将正确的过滤名称传递到列表中的唯一方法是,您必须拥抱"名称"和"价值"显然在一个字典里面。

# This will not works
response = client.describe_instances(
    Filters=[
          'instance-id:i-123456'
        ])
# Neither will this! 
response = client.describe_instances(
    Filters=[
          {'instance-id': ['i-123456']}
        ])