【问题标题】:Remove unused Amazon EC2 Snapshots删除未使用的 Amazon EC2 快照
【发布时间】:2016-08-30 08:36:42
【问题描述】:

由于 Amazon 从 ec2-ami-tools 切换到 awscli(检查 this)Robert Sindall 的 solution 不再被接受。

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

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

【问题讨论】:

    标签: python amazon-ec2 aws-cli


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      相关资源
      最近更新 更多