TerraformでAWS Backupを作成して、 EC2の自動バックアップを行う
要件
TerraformでAWS Backを作成して、 EC2の自動バックアップを行う
タスク
TerraformでAWS Backを作成して、 EC2の自動バックアップを行う
バックアップする用のEC2をterraformで作成する
参考記事
▼ AWS Backupに関して、わかりやすく解説してある!!
学べること
EC2のバックアップのやり方がわかる
ヒント
main.tf
# ------------------------------
# variable
# ------------------------------
variable "ec2_name" {
default = "sandbox-ec2"
}
##########################################
# aws-backup
##########################################
# ------------------------------
# AWS Backup config
# ------------------------------
resource "aws_backup_vault" "this" {
name = var.ec2_name
}
# ------------------------------
# バックアッププランの作成
# ------------------------------
resource "aws_backup_plan" "this" {
name = format("%s-backup-plan", var.ec2_name)
rule {
rule_name = format("%s-backup-rule", var.ec2_name)
target_vault_name = aws_backup_vault.this.name
schedule = "cron(0 12 * * ? *)"
lifecycle {
delete_after = 7
}
}
}
# ------------------------------
# バックアップするリソースの名前
# ------------------------------
resource "aws_backup_selection" "this" {
iam_role_arn = "arn:aws:iam::xxxxxxxxxxxx:role/aws_backup_role"
name = format("%s-backup-selection", var.ec2_name)
plan_id = aws_backup_plan.this.id
resources = [
var.ec2_instance_arn
]
}
# ------------------------------
# aws-backupのroleを作成
# ------------------------------
resource "aws_iam_role" "aws_backup_role" {
name = "aws_backup_role"
assume_role_policy = data.aws_iam_policy_document.aws_backup_role_document.json
}
# ------------------------------
# aws-backupの信頼ポリシーの作成
# ------------------------------
data "aws_iam_policy_document" "aws_backup_role_document" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["backup.amazonaws.com"]
}
}
}
# ------------------------------
# バックアップのポリシーを追加
# ------------------------------
data "aws_iam_policy" "aws_backup_service_role_policy_for_backup" {
arn = "arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup"
}
resource "aws_iam_role_policy_attachment" "aws_backup" {
role = aws_iam_role.aws_backup_role.name
policy_arn = data.aws_iam_policy.aws_backup_service_role_policy_for_backup.arn
}
# ------------------------------
# バックアップのリストアポリシーを追加
# ------------------------------
data "aws_iam_policy" "aws_backup_service_role_policy_for_restores" {
arn = "arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores"
}
resource "aws_iam_role_policy_attachment" "aws_backup_restore" {
role = aws_iam_role.aws_backup_role.name
policy_arn = data.aws_iam_policy.aws_backup_service_role_policy_for_restores.arn
}
ハマりポイント
今回はEC2のバックアップを行ったが、まぁteraform x ansibleとかで、すぐに何度も同じ状態のEC2を立ち上げられるなら、EC2のバックアップは不要でもあるかな。本来はRDSとかで使うことが多い
関連タグ
この記事が気に入ったらサポートをしてみませんか?