0

我一直在寻找 Amazon 脚本以将增量备份作为 AMI 图像。例如,我想在每天晚上 11:59 备份我的 AMI,并且我想要只备份最近 5 天的备份。不应删除相同实例的其他旧 AMI。

任何帮助,将不胜感激。

4

1 回答 1

0

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) 运行。

保留最近的nAMI 或过去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 快照

于 2017-02-16T01:41:36.380 回答