增量Amzaon AMI备份

时间:2017-02-15 22:38:35

标签: amazon-web-services amazon-ec2 backup backup-strategies

我一直在寻找亚马逊脚本作为AMI图像进行增量备份。 比方说,我希望每天晚上11:59备份我的AMI,我只需要过去5天的备份。 不应删除同一实例的其他旧AMI。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

Amazon Machine Images (AMIs)是Amazon EC2实例的启动卷的副本,也可以是其他卷。可以通过创建图像命令从现有实例创建它们。

AMI存储为Elastic Block Store (EBS) Snapshots,还有一些额外的AMI元数据。 EBS快照是增量备份,这意味着只保存设备上最近快照后更改的块。因此,AMI本质上也是渐进式的。

通过AWS Command-Line Interface (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,按日期排序并删除旧版本。例如:Script to create daily AMI of AWS server and delete AMI older than n no of days(但它会像Python一样简单的脚本)。

或者,你可以只拍摄快照。区别在于快照是卷的备份,而AMI可用于直接启动新实例。

这是一个捕获区域中所有卷的快照的脚本(您可以将其修改为仅给定实例的快照卷)并保留最后的n个快照:< / p>

#!/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快照(但不会删除旧的快照)。请参阅:Tutorial: Schedule EBS Snapshots Using CloudWatch Events

相关问题