我很难弄清楚如何制作下面的代码,将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'字典。
我在这里错过了什么吗?
提前致谢!
答案 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']}
])