在 EP13 - 災難演練,重建你的 VPC,
我們在重建 VPC 之前,
有帶著大家怎麼進行單次備份,
但是實務上,
我們鮮少有機會做單次備份,
取而代之的會是定期備份,
透過定期的備份,
來確保系統對於重大災變具有一定的應變能力,
而定期備份的好處除了固定時間備份不怕忘記以外,
也可以設定備份保留天數,
不用擔心備份存放太久,
導致佔用太多不必要的資源,
那...我們就開始吧 XD
您可以使用 Amazon Data Lifecycle Manager 來自動建立、保留和刪除 EBS 快照和 EBS 後端 AMI。
當您將快照與 AMI 管理自動化時,它可以幫助您:
當 Amazon Data Lifecycle Manager 結合了 Amazon CloudWatch Events 和 AWS CloudTrail 的監控功能時
可為 Amazon EC2 執行個體和個別 EBS 磁碟區提供一套完整的備份解決方案
無需額外成本
只需要負擔 Snapshot 佔用空間的費用
以及 Snapshot 傳送到其他地方的傳輸費用
在執行備份的時候
也需要有一個 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"
}
}
}
在登入 aws cloud console 以後
EC2 的頁面中可看到 Lifecycle Manager 已經出現我們剛剛建立的備份政策
也很清楚的描述到我們的備份會從八點開始
並且備份最多保留五天
其實備份的部分早該提到
但是前面在寫文章時
我仍著重於架構整個 CI/CD 的過程為主
因為擔心會寫不完
因此才將這部分娜到後面來寫
實際上這個操作相對獨立
其實放在任何時候做都是是適合的
參考資料: