この記事は

今年の1月にAWS Backupの機能がアップデートされ、AMIも自動で取得できるようになりました。

この記事ではタイトルにも記載されている通り、AWS Backupの設定およびBackupジョブ失敗時の通知設定方法を紹介します。

また、手順にも記載されておりますがBackupジョブの通知先としてSNSを設定する際、現状CLIを使った操作が必ず必要になるので注意してください。

①. Backupジョブ失敗時の通知先となるSNSトピックを作成

①-1. SNSトピックを作成

①-2. JSONエディタを編集

SNSのARN(2箇所あるので注意)AWSアカウントIDの箇所は適宜置き換えること。
SNSのARNは arn:aws:sns:リージョン名:AWSアカウントID:SNSトピック名

{
    "Version": "2008-10-17",
    "Id": "__default_policy_ID",
    "Statement": [
        {
            "Sid": "__default_statement_ID",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "SNS:Publish",
                "SNS:RemovePermission",
                "SNS:SetTopicAttributes",
                "SNS:DeleteTopic",
                "SNS:ListSubscriptionsByTopic",
                "SNS:GetTopicAttributes",
                "SNS:Receive",
                "SNS:AddPermission",
                "SNS:Subscribe"
            ],
            "Resource": "SNSのARN",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceOwner": "AWSアカウントID"
                }
            }
        },
        {
            "Sid": "__console_pub_0",
            "Effect": "Allow",
            "Principal": {
                "Service": "backup.amazonaws.com"
            },
            "Action": "SNS:Publish",
            "Resource": "SNSのARN"
        }
    ]
}

②. バックアップボールトの作成

②-1. AWS Backupのコンソールへ移動

②-2. バックアップボールトを作成

②-3. AWS CLI を使用して、-backup-vault-events を BACKUP_JOB_COMPLETED に設定して put-backup-vault-notifications コマンドを実行

現状、コンソール画面から設定する手段が無いため、CLIを使って操作する必要があります。

  • endpoint-url: バックアップボールトがある AWS リージョンのエンドポイントを入力 ※東京リージョンなら https://backup.ap-northeast-1.amazonaws.com
  • backup-vault-name: バックアップボールトの名前を入力
  • sns-topic-arn: 作成した SNS トピックの ARN を入力
aws backup put-backup-vault-notifications --endpoint-url https://backup.eu-west-1.amazonaws.com --backup-vault-name examplevault --sns-topic-arn arn:aws:sns:eu-west-1:111111111111:exampletopic --backup-vault-events BACKUP_JOB_COMPLETED

※公式ドキュメントから引用

②-4. get-backup-vault-notifications コマンドを実行し、SNSの設定が反映されていることを確認

  • backup-vault-name: バックアップボールトの名前を入力
aws backup get-backup-vault-notifications --backup-vault-name examplevault

以下のように出力されればOKです。

{
    "BackupVaultName": "examplevault",
    "BackupVaultArn": "arn:aws:backup:eu-west-1:111111111111:backup-vault:examplevault",
    "SNSTopicArn": "arn:aws:sns:eu-west-1:111111111111:exampletopic",
    "BackupVaultEvents": [
        "BACKUP_JOB_COMPLETED"
    ]
}

※公式ドキュメントから引用

③. サブスクリプションの作成

③-1. SNSのコンソールへ移動後、①で作成したSNSトピックをクリック

③-2. サブスクリプションの作成を押す

③-3. 詳細箇所を入力する

  • トピック ARN:①で作成したSNSトピックを選択

プロトコル、エンドポイントは通知先に応じて適宜変更してください。
エンドポントにDatadogのWebhook URLを指定すると、Backupジョブの失敗通知をDatadogで受け取ることができます。

■参考記事:Datadog で AWS SNS を受け取る (RDS/ElastiCacheイベント)

今回はメールで失敗通知の受信を行います。

③-4. サブスクリプションフィルターポリシーに下記を貼り付ける

{
  "State": [
    {
      "anything-but": "COMPLETED"
    }
  ]
}

④. AWS Backupの構築

④-1. AWS Backupのコンソールへ移動

④-2. 「バックアッププランを作成」を押す

④-3. 「新しいプランを立てる」を押し、バックアッププラン名を入力

④-4. スケジュールを設定

下記設定で毎日、06:00 AM 〜 07:00 AM (JST) の間にAMI取得が開始される。

④-5. ライフサイクル設定

以下の設定でBackup世帯数が2になる。バックアップボールトには②で作成したものを選択すること。

④-6. 「リソースを割り当てる」を押す

④-7. リソースを割り当てる

今回はタグで管理してます。インスタンスIDを直接指定することも可能です。

④-8.Backupを取得したい対象リソースに対してタグを付ける

これで設定は完了です。

⑤. Backupジョブ失敗の通知テスト

※公式ドキュメントから引用

⑤-1. 保護されたリソースからオンデマンドバックアップの作成を押す

⑤-2. 設定を行いオンデマンドバックアップを作成を押す

ここの設定画面で大事な箇所は以下の2点

  • 今すぐバックアップを作成
  • バックアップボールトを②で作成したものにする

⑤-3. バックアップジョブが実行されるのを確認

⑤-4. もう一度オンデマンドバックアップを作成を押す(設定もさっきと同じでOK)

⑤-5. 今度はバックアップジョブ IDをクリック

⑤-6. 停止を押す

⑤-7. ステータスが「中止しました」になることを確認

⑤-8. 停止したジョブの方のみ通知がきていることを確認

ジョブを停止してから約8分後に通知が届きました。

おまけ

AWS Backupで作成したAMIを削除するには

バックアップボールトから②で作成したものを選択

作成したAMIを選択し削除を押す

実際にAMI Backupの取得に失敗した際に通知される内容

AMI Backupの取得が実際に失敗すると下記のように、 An AWS Backup job failed. というメッセージが通知されるようです。

An AWS Backup job failed. Resource ARN : arn:aws:ec2:*****:*****:instance/*****. BackupJob ID : *****

元記事はこちら

AWS Backupの設定およびBackupジョブ失敗時の通知設定方法