EP29 - 秽土转生~到了 AWS 也要能够备份~

EP13 - 灾难演练,重建你的 VPC
我们在重建 VPC 之前,
有带着大家怎麽进行单次备份,
但是实务上,
我们鲜少有机会做单次备份,
取而代之的会是定期备份,
透过定期的备份,
来确保系统对於重大灾变具有一定的应变能力,
而定期备份的好处除了固定时间备份不怕忘记以外,
也可以设定备份保留天数,
不用担心备份存放太久,
导致占用太多不必要的资源,
那...我们就开始吧 XD

为系统建立周期性备份使用 Lifecycle Manager

什麽是 Lifecycle Manager

您可以使用 Amazon Data Lifecycle Manager 来自动建立、保留和删除 EBS 快照和 EBS 後端 AMI。

当您将快照与 AMI 管理自动化时,它可以帮助您:

  • 强制执行定期备份排程来保护重要资料。
  • 建立可定期重新整理的标准化 AMI。
  • 依稽核人员或内部合规的要求来保留备份。
  • 删除过时的备份以降低储存成本。
  • 建立灾难复原备份政策,这些政策会将资料备份至隔离的帐户。

当 Amazon Data Lifecycle Manager 结合了 Amazon CloudWatch Events 和 AWS CloudTrail 的监控功能时
可为 Amazon EC2 执行个体和个别 EBS 磁碟区提供一套完整的备份解决方案
无需额外成本
只需要负担 Snapshot 占用空间的费用
以及 Snapshot 传送到其他地方的传输费用

新增 IAM Role

在执行备份的时候
也需要有一个 Role 来执行
这时候我们需要建立一个 Role 去跑例行性的备份
并且给予相对应得权限

stage/main.tf

resource "aws_iam_role" "dlm_lifecycle_role" {
    name = "dlm-lifecycle-role"
    
    assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "dlm.amazonaws.com"
      },
      "Effect": "Allow"
    }
  ]
}
EOF
}

resource "aws_iam_role_policy" "dlm_lifecycle" {
    name = "dlm-lifecycle-policy"
    role = aws_iam_role.dlm_lifecycle_role.id

    policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateSnapshot",
        "ec2:CreateSnapshots",
        "ec2:DeleteSnapshot",
        "ec2:DescribeInstances",
        "ec2:DescribeVolumes",
        "ec2:DescribeSnapshots"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:*::snapshot/*"
    }
  ]
}
EOF
}

建立备份周期

我们暂时没有将所有的机械都做备份
只将自动部署的 Octopus Deploy 做备份
因为 Octopus Deploy 有使用 RDS 存放资料
因此 EC2 的备份不需要太过频繁

我们就设定一天备份四次
备份基准点从八点开始算
不是因为我铁人赛刚好这时候写的关系
目的是希望能够达到下班後以及上班前都能够备份到
并且上班期间也可以卡一个时间备份一次

而备份最多保留 20 笔
换言之只会保留五天的备份
五天後旧的备份就会自动删除

比较有趣的还是备份的参考条件
是使用 tags 来做标记
之前有使用到 tag 的部分是根据 AWS CodeDeploy
而这是则是 lifecyle management

stage/main.tf

resource "aws_dlm_lifecycle_policy" "octopus_deploy" {
    description        = "Octopus Deploy DLM lifecycle policy"
    execution_role_arn = aws_iam_role.dlm_lifecycle_role.arn
    state              = "ENABLED"
    
    policy_details {
        resource_types = ["VOLUME"]
        
        schedule {
            name = "reserve 5 day of weeks and backup 4 times a day"
            
            create_rule {
                interval      = 6
                interval_unit = "HOURS"
                times         = ["20:00"]
            }
            
            retain_rule {
                count = 20
            }
            
            tags_to_add = {
                SnapshotCreator = "DLM"
            }
            
            copy_tags = false
        }
        
        target_tags = {
            name = "octopus deploy"
        }
    }
}

Console 查看状态

在登入 aws cloud console 以後
EC2 的页面中可看到 Lifecycle Manager 已经出现我们刚刚建立的备份政策
也很清楚的描述到我们的备份会从八点开始
并且备份最多保留五天

https://ithelp.ithome.com.tw/upload/images/20211011/20141518iZ7H5xfQKi.png


其实备份的部分早该提到
但是前面在写文章时
我仍着重於架构整个 CI/CD 的过程为主
因为担心会写不完
因此才将这部分娜到後面来写
实际上这个操作相对独立
其实放在任何时候做都是是适合的

参考资料:

  1. 自动化快照生命周期
  2. Resource: aws_dlm_lifecycle_policy

<<:  第26天~用电灯的照片代表连到感应器

>>:  [C 语言笔记--Day30] 最後一天的心得

Day12. 台风天神出鬼没的Blue Prism-BP合并表格结果(改良版)

试想:当员工遇不可归责之临时状况需要离开工作现场, 若员工原本的进度还能持续进行, 那该多好,以下就...

Day 3 - 新人报到前的准备与莫名的焦虑感

确定了offer也确定了报到时间後,距离到职日大概还有两周多的时间,因为自己是北漂青年因此开始寻找後...

JavaScript Array | 与其他程序语言很不同的阵列(上)

JavaScript Array (阵列) 阵列 (array) 是一个有序的序列,阵列中可以储存不...

Day 15 : 案例分享(5.1) CRM与ERP整合 - 线索与商机

案例说明及适用场景 Odoo CRM 简单区分的话 商机 自动建立 商机 阶段管理 商机 转为订单 ...

[C# WinForm] 建立第一个应用程序 Hello World

Visual Studio 是微软开发的整合开发环境(IDE),简称 VS。 VS 能开发的程序语言...