この記事は
今年の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. 停止したジョブの方のみ通知がきていることを確認
おまけ
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 : *****