运行Ubuntu的EBS支持的EC2实例的自动快照

Modified on: Sat, 09 Nov 2019 21:20:02 +0800

我正在运行EBS支持的实例充当软件开发团队的构建服务器(运行Jenkins和其他服务的主机)。服务器正在运行Linux(来自官方AMI的最新Ubuntu))。

我想拍摄实例关联的EBS卷的常规自动快照。我只需要保留一个最新的备份(即旧的快照应该被修剪),并且一个好的频率将是每天一次。

亚马逊似乎没有提供开箱即用的备份服务,因此您必须使用第三方脚本或推出自己的解决方案。

我的问题是,实现这一目标的最简单方法是什么?我想要最少量的麻烦,配置和外部依赖。据我所知,将此设置为Linux机箱上的某种定时脚本是一个有效的选项。

作者:Jonik

最佳答案

好的,这是值得的,这就是我的所作所为。我希望我的虚弱脚本鼓励人们发布更好的解决方案!

我写了两个简单的bash脚本,并使用cron自动化它们。 (现在我在本地服务器上运行它们,因为我认为(?)不建议将AWS的证书放在实例/ AMI / EBS中。)

创建新快照

# ESB volume associated with the instance we want to back up:
EBS_VOL_ID=vol-xxxxyyyy

ec2-create-snapshot --region eu-west-1 -K pk.pem -C cert.pem -d "Automated backup" $EBS_VOL_ID 

修剪除最新快照以外的所有快照

EBS_VOL_ID=vol-xxxxyyyy ec2-describe-snapshots --region eu-west-1 -K pk.pem -C cert.pem | grep "Automated backup" | grep "$EBS_VOL_ID" | awk '{ print $5 "\t" $2 }' | sort > .snapshots latest_id=$(tail -n1 .snapshots | awk '{ print $2 }') cat .snapshots | awk '{ print $2 }' > .snapshot_ids for i in $(cat .snapshot_ids) do if [ "$i" != "$latest_id" ] then echo "Deleting snapshot $i" ec2-delete-snapshot --region eu-west-1 -K pk.pem -C cert.pem $i fi done

(这解析来自ec2-describe-snapshots输出的适当快照信息,并使用[timestamp tab snapshot-id]条目创建临时文件(例如
2011-06-01T10:24:36+0000 snap-60507609)最新快照位于最后一行。)

备注

  • 将X509证书和私钥放在脚本可以找到的地方。
  • 必须使用所有命令显式指定--region。否则例如ec2-create-snapshot将因卷ID未知而失败。 (如果您使用默认区域“us-east-1”,则为YMMV。)
  • 我使用快照描述(“自动备份”)作为标记,以避免修剪脚本删除相关卷的其他快照(例如,与AMI相关的快照)。

免责声明:对我来说,这部分是Bash / Unix编程的练习,特别是剪辑脚本。我很乐意承认你最有可能获得更清晰的结果,例如Python,当你需要逻辑时,“除了列表中的最后一项之外,为所有人做点什么”。即使使用Bash,你也可以更优雅地做到这一点(例如,你真的不需要临时文件)。所以,请随意发布其他解决方案

作者:,Jonik

相关问答

添加新评论