如何设置 AWS EBS 卷快照删除策略?

How to set AWS EBS Volume Snapshot deletion Policy?

我的关键 EBS 卷很少被定期备份为快照。有什么办法可以设置删除策略,只保留最近的两个快照?

例如: 在其中一个环境中,我有来自 10 个 EBS 卷的近 300 个快照。一旦我有了这个政策,它应该减少到 20 个快照并保持在那个水平。

这里有一些代码可以对所有 EBS 卷进行快照,然后只保留最新的 2 个快照。您还可以将其修改为仅快照具有特定标签的卷。根据需要替换您自己的区域。

#!/usr/bin/env python

import boto.ec2, os

MAX_SNAPSHOTS = 2   # Number of snapshots to keep

# Connect to EC2 in this region
connection = boto.ec2.connect_to_region('ap-southeast-2')

# Get a list of all volumes
volumes = connection.get_all_volumes()

# Create a snapshot of each volume
for v in volumes:
  connection.create_snapshot(v.id)

  # Too many snapshots?
  snapshots = v.snapshots()
  if len(snapshots) > MAX_SNAPSHOTS:

    # Delete oldest snapshots, but keep MAX_SNAPSHOTS available
    snap_sorted = sorted([(s.id, s.start_time) for s in snapshots], key=lambda k: k[1])
    for s in snap_sorted[:-MAX_SNAPSHOTS]:
      print "Deleting snapshot", s[0]
      connection.delete_snapshot(s[0])

只是 运行 它作为日常 cron 工作。

从 2018 年年中开始,现在可以使用 Amazon Data Lifecycle Manager 实现自动化。您设置规则,例如拍摄快照的频率和保留多少(或多长时间),其余的由它完成。 (在停止拍摄快照后,保留多少与保留多长时间之间的差异开始起作用。)

我知道通常 Stack Overflow 不赞成只是链接的答案,但虽然它在概念上很简单,但要解释的部分太多了,我无法在此处完整记录。请参考AWS官方文档。