删除未使用的amazonec2快照

2024-04-20 11:29:17 发布

您现在位置:Python中文网/ 问答频道 /正文

自从Amazon从ec2ami工具切换到awscli(checkthis),robertsindall的solution不再被接受。在

所以我决定为新的python/json标准重写他的脚本。在

请随时提出任何问题或提供您的解决方案。在


Tags: 工具脚本jsonamazon标准解决方案solutionawscli
1条回答
网友
1楼 · 发布于 2024-04-20 11:29:17

请正确安装和配置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')

相关问题 更多 >