見出し画像

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とかで使うことが多い

関連タグ

# terraform #aws -backup #自動バックアップ

この記事が気に入ったらサポートをしてみませんか?