【发布时间】:2020-07-09 10:09:52
【问题描述】:
我的关键 EBS 卷很少被定期备份为快照。有什么方法可以设置删除策略,仅维护最近的两个快照?
例如: 在其中一种环境中,我有来自 10 个 EBS 卷的近 300 个快照。一旦我有了这个策略,它应该减少到 20 个快照并保持在那个水平。
【问题讨论】:
-
EBS 目前还没有内置机制来自动触发删除快照。
标签: amazon-web-services backup
我的关键 EBS 卷很少被定期备份为快照。有什么方法可以设置删除策略,仅维护最近的两个快照?
例如: 在其中一种环境中,我有来自 10 个 EBS 卷的近 300 个快照。一旦我有了这个策略,它应该减少到 20 个快照并保持在那个水平。
【问题讨论】:
标签: amazon-web-services backup
这是一些对所有 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 官方文档。
【讨论】: