これはなに

AWS Backupの通知機能を実施する機会にAmazon SNSを利用したが、ふとしたタイミングで通知が上手くいかない状況になったので、同じ状況にならないようにするための備忘録。

構成

AWS Backup、Amazon SNS

起こったこと

Backup機能の実装時に発報テストを行なっていたが、何度目かのテスト以降メールが届かなくなってしまった。
原因は通知メールに記載されている購読解除用のURLを気付かないうちに踏んでしまっていた。
このまま実装するとお客様が誤ってリンクを踏んだ際にまた通知が急に発生しなくなり、本来通知したいタイミングでできない可能性があったため対策を実施する。

前提の実装

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

2.バックアッププラン、ルール、リソース割り当ての設定

3.SNSトピック作成

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

  • endpoint-url → バックアップボールトを作成したリージョンのエンドポイント(今回はap-northeast-1)
  • sns-topic-arn → 作成したSNSトピックarn
  • backup-vault-name → 作成したバックアップボールト名
test nagano$ aws backup put-backup-vault-notifications --endpoint-url https://backup.ap-northeast-1.amazonaws.com --backup-vault-name nagano-test-vault --sns-topic-arn arn:aws:sns:ap-northeast-1:xxxxxxx:nagano-test-backup --backup-vault-events BACKUP_JOB_COMPLETED

4-2.get-backup-vault-notifications コマンドを実行
正常に設定されているかどうか確認する

test nagano$ aws backup get-backup-vault-notifications --backup-vault-name nagano-test-vault
{
    "BackupVaultName": "nagano-test-vault",
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:xxxxxxx:backup-vault:nagano-test-vault",
    "SNSTopicArn": "arn:aws:sns:ap-northeast-1:xxxxxxx:nagano-test-backup",
    "BackupVaultEvents": [
        "BACKUP_JOB_COMPLETED"
    ]
}

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

  • トピック ARN → 作成したSNSトピックarn
  • プロトコル → Eメール
  • エンドポイント → 任意のメールアドレス
  • サブスクリプションフィルターポリシー → 有効化
  • JSON エディタ↓
{
  "State": [
    {
      "anything-but": "COMPLETED"
    }
  ]
}

無効化手順

1.unsubscribeリンクを無効化

1-1.設定したメールアドレスにConfirmationメールがくる。Confirm subscriptionを右クリックし、リンクのアドレスをコピーを押下

1-2.コピーしたURLをもとに以下コマンドをCLIで実行する

  • topic-arn → 作成したSNSトピックarn
  • token → コピーしたURLからコピペ
test nagano$ aws sns confirm-subscription \
> --topic-arn arn:aws:sns:ap-northeast-1:xxxxxxx:nagano-test-backup \
> --token xxxxxxx \
> --authenticate-on-unsubscribe true \
> --region ap-northeast-1
{
    "SubscriptionArn": "arn:aws:sns:ap-northeast-1:xxxxxxx:nagano-test-backup:0c66acd3-cb2d-4d47-xxxxxxx"
}

1-3.Confirmationメールを承認する

2.テストメール送信

2-1.AWS Backup > 保護されたリソース > オンデマンドバックアップを作成

2-2.バックアップジョブを停止して擬似的にバックアップが失敗した状況を作る

2-3.バックアップが失敗したことを通知するメールが届いていることを確認する

2-4.unsubscribeリンクが無効化されていることを確認する

以上で終了です。

最後に

検証の段階で気づくことができてよかったです。
一手間加えることでより安心することができるので未実装の方は是非ご検討ください。