所使用到的服务
- Lambda
- CloudWatch
- IAM
方法架构
实现功能
- 根据 EC2 实例设置的标签,结合 CloudWatch 定时进行备份/清理 AMI & Snapshot;
- 支持设置备份 AMI 保留时间;
- 支持将备份后的 AMI 传输到 DR Region 进行备份,支持传输后开启 EBS 加密;
- 支持对 DR Region 中的 AMI 设置保留时间偏移量,实现延迟删除;
使用说明
1、为需要定时备份的 EC2 增加如下标签:
- Name:如果存在则忽略
- Backup:值为True则开启定时备份,值为False关闭定时备份
- Duration:设置该实例镜像保存周期,单位:天
2、需要设置 Lambda 系统变量:
- current_region:指定当前 Lambda 所在区域;
- dr_region:指定 DR 所在区域;
- dr_ebs_kms_id:在 AMI 复制过程中启用加密,需要填写 KMS 中 EBS Key 的 ID;
- dr_duration_offset:指定同步到 DR 区域的镜像与当前区域镜像删除时间的偏移量,取值范围 0 ~ +∞;
3、通过 CloudWatch 服务的 Events → Rules 设置自动执行 Lambda 脚本后,将在指定时间进行备份和清理操作;
目前存在的问题
- 目前无法针对指定的 EC2 设置独立的备份开始时间,后期考虑增加环境类型标签实现;
- 创建/清理失败没有消息通知;
- 无事件记录;
- 无法批量为实例添加标签;
Lambda 执行备份和清理所需要的 IAM 权限(建议使用 AWS Role)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:DeregisterImage",
"ec2:CreateSnapshots",
"ec2:CreateSnapshot",
"ec2:CreateImage"
],
"Resource": [
"arn:aws-cn:ec2:*::snapshot/*",
"arn:aws-cn:ec2:*:account-id:instance/*",
"arn:aws-cn:ec2:*:account-id:volume/*",
"arn:aws-cn:ec2:*::image/*"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"ec2:DeleteSnapshot",
"ec2:CreateTags"
],
"Resource": [
"arn:aws-cn:ec2:*::snapshot/*",
"arn:aws-cn:ec2:*:account-id:instance/*",