【发布时间】:2022-12-16 15:42:43
【问题描述】:
我正在使用 boto3 来尝试获取与其 AMI 关联的快照的快照 ID。
到目前为止我有这个:
#!/usr/bin/env python
import boto3
ec2_client = boto3.client('ec2', region_name='REGION')
owner_id = 'ACCOUNT_ID'
all_images = {}
all_used_images = []
# Pull all AMIs owned by the account
amis_response = ec2_client.describe_images(
Filters=[
{
'Name': 'root-device-type',
'Values': [ 'ebs']
},
],
Owners=[ owner_id ]
)
# Get list of snapshots associated with AMIs
for image_info in amis_response['Images']:
image_id = image_info['ImageId']
print (image_id)
snapshot_ids = []
for device_map in image_info['BlockDeviceMappings']:
snapshot_ids.append(device_map['Ebs']['SnapshotId'])
all_images[image_id] = snapshot_ids
amis_response 提取帐户中的所有 ami 信息,但是当我尝试获取快照列表时,我不断得到:
snapshot_ids.append(device_map['Ebs']['SnapshotId'])
KeyError: 'Ebs'
我错过了什么?
当我打印 amis_response 的输出时,我看到:
u'BlockDeviceMappings': [{u'DeviceName': '/dev/sda1', u'Ebs': {u'SnapshotId': 'snap-0f5b70d9ddaa7b2e1'
【问题讨论】:
-
您至少有一个元素看起来不像您的示例。尝试在循环的每次迭代中打印
device_map。 -
进展如何?仍然不清楚你能做什么?
-
对不起。下面的答案似乎有效。每个输出中都不存在 Ebs,因此它会引发关键错误。一旦你清除了那些,脚本的其余部分就可以正常运行。
标签: amazon-web-services boto3 snapshot