Мне нужно извлечь весь «SnapshotId» (отфильтрованный ранее), чтобы удалить его. Но мой цикл не работает с AMIS с 2 или более подключенными томами ...
Я пытаюсь сделать это с помощью одной инструкции (а не пары циклов).
import boto3
ec2_client = boto3.client('ec2')
#filters:
images = ec2_client.describe_images(Owners=['self'])
AMIDescription ="AMI backup generated by Lambda"
#loops:
data = [i['BlockDeviceMappings'][0]['Ebs']['SnapshotId'] for i in images['Images'] if i['Description'] == AMIDescription ]
#print:
print (data)
Результат:
['snap-0f0dd0b4949bbd867', 'snap-0bec32fc28f885d9a', 'snap-022f5e19566c99256'] * 1006 *
Пример json со всей информацией:
{
'Images': [
{
'Architecture': 'x86_64',
'CreationDate': '2019-07-09T14:49:47.000Z',
'ImageId': 'ami-08d431591b88d4335',
'ImageLocation': '068359028657/TEST 2 Snapshots',
'ImageType': 'machine',
'Public': False,
'OwnerId': '068359028657',
'ProductCodes': [
{
'ProductCodeId': '3f8t6t8fp5m9fdsxx18yzwriozxi',
'ProductCodeType': 'marketplace'
}
],
'State': 'available',
'BlockDeviceMappings': [
{
'DeviceName': '/dev/xvda',
'Ebs': {
'Encrypted': False,
'DeleteOnTermination': True,
'SnapshotId': 'snap-0bec32fc28fdf885d9a',
'VolumeSize': 100,
'VolumeType': 'gp2'
}
},
{
'DeviceName': '/dev/sdf',
'Ebs': {
'Encrypted': False,
'DeleteOnTermination': True,
'SnapshotId': 'snap-0782adffd4e3c7e2d2a',
'VolumeSize': 300,
'VolumeType': 'gp2'
}
}
],
'Description': 'AMI backup generated by Lambda',
'Hypervisor': 'xen',
'Name': 'TEST 2 Snapshots',
'RootDeviceName': '/dev/xvda',
'RootDeviceType': 'ebs',
'SriovNetSupport': 'simple',
'VirtualizationType': 'hvm'
},
{
'Architecture': 'x86_64',
'CreationDate': '2019-07-10T09:20:18.000Z',
'ImageId': 'ami-0ae6a5d15f87fsdada4',
'ImageLocation': '068359028657/TEST 2 Snapshots 2',
'ImageType': 'machine',
'Public': False,
'OwnerId': '06835902fds8657',
'ProductCodes': [
{
'ProductCodeId': '3f8t6ddt8fp5m9xx18yzwriozxi',
'ProductCodeType': 'marketplace'
}
],
'State': 'available',
'BlockDeviceMappings': [
{
'DeviceName': '/dev/xvda',
'Ebs': {
'Encrypted': False,
'DeleteOnTermination': False,
'SnapshotId': 'snap-0d74e92744efs49f504',
'VolumeSize': 100,
'VolumeType': 'gp2'
}
},
{
'DeviceName': '/dev/sdf',
'Ebs': {
'Encrypted': False,
'DeleteOnTermination': False,
'SnapshotId': 'snap-04fa670e447fs8b296e',
'VolumeSize': 300,
'VolumeType': 'gp2'
}
}
],
'Description': 'TEST 2 Snapshots 2',
'Hypervisor': 'xen',
'Name': 'TEST 2 Snapshots 2',
'RootDeviceName': '/dev/xvda',
'RootDeviceType': 'ebs',
'SriovNetSupport': 'simple',
'VirtualizationType': 'hvm'
}
],
'ResponseMetadata': {
'RequestId': 'b32d0a96-ssce50-4c97-9722-f7c0f72fsfce88',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'content-type': 'text/xml;charset=UTF-8',
'content-length': '4277',
'vary': 'accept-encoding',
'date': 'Wed, 10 Jul 2019 10:18:15 GMT',
'server': 'AmazonEC2'
},
'RetryAttempts': 0
}
}
Как включить цикл в Ebs для извлечения всех значений, а не только первого?