2016-05-04 3 views
-1

Поскольку Amazon переключился с ec2-ami-tools на awscli (отметьте this), solution от Robert Sindall больше не является приемлемым.Удалить неиспользованные снимки Amazon EC2

Поэтому я решил переписать его сценарий для новых стандартов python/json.

Не стесняйтесь задавать любые вопросы или предлагать свое решение.

ответ

0

Пожалуйста, правильно установите и настройте awscli. Для MacOS я бы рекомендовал версию brew.

После установки не забудьте запустить aws configure

Работает безупречно для меня, но в любом случае ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК.

import json, subprocess 

def remove_unused_snaps(region): 
    line = 'aws ec2 describe-images --region {} --owners self'.format(region) 
    p = subprocess.Popen(line.split(), 
         stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    out, err = p.communicate() 
    obj = json.loads(out.decode("utf-8")) 

    snaps_used = set(i['BlockDeviceMappings'][0]['Ebs']['SnapshotId'] for i in obj['Images']) 

    line = 'aws ec2 describe-snapshots --region {} --owner-ids self'.format(region) 
    p = subprocess.Popen(line.split(), 
         stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    out, err = p.communicate() 
    obj = json.loads(out.decode("utf-8")) 

    snaps_old = set(i['SnapshotId'] for i in obj['Snapshots']) 

    line = 'aws ec2 delete-snapshot --region {} --snapshot-id'.format(region) 
    for snap in list(snaps_old - snaps_used): 
     p = subprocess.Popen(line.split() + [snap], 
          stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
     out, err = p.communicate() 
     print(snap, out, err) 

Тогда просто запустить его: remove_unused_snaps('us-west-2')

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