7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

YUMEMI Advent CalendarAdvent Calendar 2021

Day 22

AWS Backupを用いてAuroraクロスリージョンコピーしてみる(Terraform)

Last updated at Posted at 2021-12-21

何をやるか

AWS Backupを利用して、RDSやEC2などのバックアップを自動的に取得させます。

リソースによってクロスリージョン対応しており、東京→大阪で保存してみます。

やること

Auroraのバックアップをクロスリージョンで取得します。

今回はTerraformで用意します。

AWSBackup.png

やってみて知れたこと

・AWSアカウントで各リージョンの設定を有効化しないと、Backup設定しても使用できなかった

→設定、及びバックアップ状況の確認は、コピー元のリージョンで行う
→バックアップリソース自体はコピー先の「保護されたリソース」に存在する

Terraform側ベースの構成要素

バックアッププラン
- バックアップルール設定
  - ルール名
  - バックアップボールト設定
  - 頻度
  - バックアップウィンドウ
    - default
    - custom
      - 開始時間(UTC)
      - 開始時間
      - 完了時間
  - コールドストレージへの移行
  - 保持期間
  - コピー先リージョン
  - 送信先バックアップボールド
    - コールドストレージへの移行
    - 保持期間
  - 復旧ポイントタグ(リカバリポイントに追加)
- リソースの割り当て
  - リソース割り当て名
  - IAM ロール
  - タグ

各Terraform要素

Resource: aws_backup_global_settings
→クロスアカウントの機能有効化

Resource: aws_backup_region_settings
→各リージョンでの機能有効化

Resource: aws_backup_selection
→IAM Role, プラン, 対象リソース選択(ここがメインな感じ)

Resource: aws_backup_plan
→バックアッププラン。ボールト、スケジュール等を選択

Resource: aws_backup_vault
→ボールト設定、KMS指定

Resource: aws_backup_vault_policy
→ボールト設定に使用するポリシー

Resource: aws_backup_vault_notifications
→バックアップボールトイベント通知を、SNSトピックに設定

サンプルコード

要件:Auroraを毎日AM2時(JST)でバックアップ取得し、1週間保存
今回は東京リージョンにサービス(Aurora)がある場合とします。

# バックアップ元リージョンでAWS Backupを有効にする大事
resource "aws_backup_region_settings" "backup-enable" {
  resource_type_opt_in_preference = {
    "Aurora"          = true
  }
}

# バックアップボールト
# Default KMS Setting
resource "aws_backup_vault" "standard-vault" {
  name        = "standard_backup_vault"
}

# ボールトポリシーバックアップ実行する側の権限
resource "aws_backup_vault_policy" "standard-vault-policy" {
  backup_vault_name = aws_backup_vault.standard-vault.name
  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "default",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
		"backup:DescribeBackupVault",
		"backup:DeleteBackupVault",
		"backup:PutBackupVaultAccessPolicy",
		"backup:DeleteBackupVaultAccessPolicy",
		"backup:GetBackupVaultAccessPolicy",
		"backup:StartBackupJob",
		"backup:GetBackupVaultNotifications",
		"backup:PutBackupVaultNotifications"
      ],
      "Resource": "${aws_backup_vault.standard-vault.arn}"
    }
  ]
}
POLICY
}

# バックアッププラン
resource "aws_backup_plan" "aurora-backup" {
  name = "aurora_backup_plan"

  rule {
    rule_name         = "aurora_backup_plan_rule"
    target_vault_name = aws_backup_vault.standard-vault.name
    schedule          = "cron(0 18 * * ? *)"
    lifecycle {
      delete_after = 7
    }
  }
}

# バックアップで使用するポリシー定義(assumerole
# assumerole policy(roleの権限を誰/どのAWSサービスに渡せるようにするか)
data "aws_iam_policy_document" "backup-assumerole" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type = "Service"
      identifiers = ["backup.amazonaws.com"]
    }
  }
}

# assumeroleを適用するrole実体
resource "aws_iam_role" "aurora-backup" {
  name = "aurora-backup"
  assume_role_policy = data.aws_iam_policy_document.backup-assumerole.json
}

# 必要な権限を定義(AWSで用意してある権限テンプレート:ServiceRoleを今回は使用)
resource "aws_iam_role_policy_attachment" "aurora-backup" {
  role = aws_iam_role.aurora-backup.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup"
}

# Resource: aws_backup_selection(ここメイン)
# 以上を用いて、バックアップを設定
resource "aws_backup_selection" "aurora-daily-cross-backupplan" {
  iam_role_arn = aws_iam_role.aurora-backup.arn
  name = "aurora-daily-cross-backup-selection"
  plan_id = aws_backup_plan.aurora-backup.id
  resources = [
    aws_rds_cluster.aurora-cluster-name.arn
  ]
}

以下、クロスリージョンバックアップの設定
(今回は大阪に一週間保存)

# クロスリージョンの場合は、backup planに以下を追加
# この部分は、resource "aws_backup_plan"内に入れ込む。
copy_action {
      destination_vault_arn = "arn:aws:backup:ap-northeast-3:${var.acountid}:backup-vault:Default"
      lifecycle {
          delete_after       = 7
        }
    }

以上となります。
リージョンを跨いだバックアップができるのはとても助かります。。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?