我一直在寻找 Amazon 脚本以将增量备份作为 AMI 图像。例如,我想在每天晚上 11:59 备份我的 AMI,并且我想要只备份最近 5 天的备份。不应删除相同实例的其他旧 AMI。
任何帮助,将不胜感激。
我一直在寻找 Amazon 脚本以将增量备份作为 AMI 图像。例如,我想在每天晚上 11:59 备份我的 AMI,并且我想要只备份最近 5 天的备份。不应删除相同实例的其他旧 AMI。
任何帮助,将不胜感激。
Amazon 系统映像 (AMI)是 Amazon EC2 实例的启动卷的副本,以及可选的附加卷。它们可以通过Create Image命令从现有实例中创建。
AMI 存储为Elastic Block Store (EBS) 快照,以及一些额外的 AMI 元数据。EBS 快照是增量备份,这意味着仅保存设备上在您最近的快照后发生更改的块。因此,AMI 在本质上也是增量的。
通过AWS 命令行界面 (CLI)创建 AMI非常简单:
aws ec2 create-image --instance-id i-1234567890abcdef0 --name "My server" --description "An AMI for my server"
这可以作为计划任务 (Windows) 或 cron 作业 (Linux) 运行。
保留最近的n
AMI 或过去n
几天内创建的 AMI,只需编写脚本以检索具有相同描述的 AMI、按日期排序并删除旧的 AMI。例如:创建 AWS 服务器的每日 AMI 并删除早于 n 天的 AMI 的脚本(但它会像 Python 之类的更简单的脚本)。
或者,您可以只拍摄快照。不同之处在于快照是 Volume 的备份,而 AMI 可用于直接启动新实例。
这是一个为一个区域中的所有卷拍摄快照的脚本(您可以将其修改为仅对给定实例的卷进行快照)并保留最后的n
快照:
#!/usr/bin/env python
import boto.ec2
MAX_SNAPSHOTS = 2 # Number of snapshots to keep
# Connect to EC2 in this region
connection = boto.ec2.connect_to_region('YOUR-REGION')
# 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]:
connection.delete_snapshot(s[0])
最后,值得一提的是,Amazon CloudWatch Events可以安排为自动创建 EBS 快照(但不会删除旧快照)。请参阅:教程:使用 CloudWatch Events 安排 EBS 快照