2015-04-07 2 views
2

Я получаю следующую ошибку при удалении моментальных снимков. Я хотел, чтобы удалить снимок которые в настоящее время не используются Моим AWS AMI и другими экземпляры .. а иЕ пытались, но получили эту ошибку ..Как проверить, используется ли снимок с идентификатором AWS AMI в Boto?

Traceback (most recent call last): 
<path to error file> 
EC2ResponseError: EC2ResponseError: 400 Bad Request 
<?xml version="1.0" encoding="UTF-8"?><Response><Errors><Error><Code>InvalidSnapshot.InUse</Code><Message>The snapshot snap-xxxxxxxx is currently in use by ami-xxxxxxxx</Message></Error></Errors><RequestID>bbe55333-4acf-4ca7-9aa3-49307b189ca3</RequestID></Response> 
+0

Можете ли вы разместить здесь код? – sailesh

ответ

2

К сожалению, есть не API, чтобы получить AMI ID напрямую от моментального снимка EBS.

Вместо этого вы можете пойти в другую сторону.

  1. Используйте ec2:DescribeImages, чтобы получить список изображений AMI.
  2. Для каждого возвращенного изображения AMI просмотрите список снимков EBS, связанных с изображением AMI.
  3. Посмотрите, включен ли моментальный снимок EBS.

Edit: Еще одна возможность:

Вы можете быть в состоянии использовать ec2:DescribeImages с фильтром на EBS снимок ID.

https://ec2.amazonaws.com/?Action=DescribeImages 
&Filter.1.Name=block-device-mapping.snapshot-id 
&Filter.1.Value=snap-xxxx 

Ссылка: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html

2

Удалить все моментальные снимки, которые не используются:

for s in $(comm -23 <(echo $(ec2-describe-snapshots --region ap-southeast-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') <(echo $(ec2-describe-images --region ap-southeast-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' ') 
do 
    echo Deleting snapshot $s 
    ec2-delete-snapshot --region ap-southeast-1 $s 
done 
0

1) Получить все моментальные снимки, используйте регулярное выражение для поиска AMI-ID в описании снимка.

reAmi = re.compile('ami-[^ ]+') 
    snapshotImageId = reAmi.findall(snapshot.description) 

2) Извлеките все AMI. Проверьте, сохраняется ли AMI-идентификатор на первом этапе, если нет, то моментальный снимок, связанный с этим конкретным AMI, больше не требуется.

полный код размещен here

Надеется, что это помогает !!

Смежные вопросы