S3 レプリケーション失敗時に S3 イベント通知されるか確認するため、意図的に S3 レプリケーションを失敗させてみた

2024.04.04

はじめに

テクニカルサポートの 片方 です。
S3 レプリケーション 失敗時、S3 イベント通知 されるのか確認するため、意図的に S3 レプリケーションを失敗させる機会があったのでやってみました。

現在、S3 イベント通知でサポートされているレプリケーションイベントタイプは 4 つ存在しており、その中で"s3:Replication:OperationFailedReplication" イベントにつきましては確認可能でした。

  • s3:Replication:OperationFailedReplication
  • s3:Replication:OperationMissedThreshold
  • s3:Replication:OperationReplicatedAfterThreshold
  • s3:Replication:OperationNotTracked

やってみた

1. レプリケーション元 (source-batch-replication-test) S3 バケットとレプリケーション先 (copy-destination-batch-replication-test) S3 バケットを作成します。
適当にファイルを作成して、レプリケーション元 S3 バケットにアップロードします。

2. 共にバージョニングを有効にします。
3. S3 イベント通知の連絡先として、SNS を用いて E-mail での通知を行うので、SNS のマネジメントコンソールよりトピック (Test-Event) を作成します。
4. SNS トピック作成時、アクセスポリシー - オプション をドキュメント参考に記載します。

※ ポリシー例
{
    "Version": "2012-10-17",
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "Example SNS topic policy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SNS:Publish"
            ],
            "Resource": "SNS-topic-ARN",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:*:*:bucket-name"
                },
                "StringEquals": {
                    "aws:SourceAccount": "bucket-owner-account-id"
                }
            }
        }
    ]
}

5. サブスクリプションとしてプロトコルを E-mail、エンドポイントは配信したいメールアドレスを記載します。

6. レプリケーション元の S3 バケットでイベント通知を作成をクリックします。

7. イベント名 (Test-Failure-Event) を記載して、イベントタイプのセクションで、"すべてのレプリケーションイベント"または、"オブジェクトのレプリケートに失敗しました" を選択します。

8. 連絡先のセクションで、SNS を選択し、先ほど作成した SNS トピックを選択し、問題なければ作成します。

9. レプリケーション元の S3 バケットで意図的に失敗するようなレプリケーションルールを作成します。

10. レプリケーションルール名 (Failure-Replication) を記入します。ソースバケットのセクションではバケット内のすべてのオブジェクトに適用を選択します。

11. 送信先のセクションではこのアカウントのバケットを選択して、送信先の S3 バケットを選択します。

12. 以下のように、意図的な失敗をするため、IAM ロールのセクションで、S3 レプリケーションに必要な権限を持っていない IAM ロール を選択します。

13. 各種設定を行い、下部へスクロールして保存します。

14. 既存のオブジェクトをレプリケートしますか?と問われるので、今回は「いいえ、既存のオブジェクトをレプリケートしません。」を選択します。

以下のようになれば、成功です。

15. 失敗の通知がされるか確認するため、レプリケーション元 (source-batch-replication-test) S3 バケットへ適当なファイルをアップロードします。

16. 配信先のメールアドレスで通知がされていれば成功です。

※例
{"Service":"Amazon S3","Event":"s3:TestEvent","Time":"2024-03-20T08:10:48.291Z","Bucket":"source-batch-replication-test","RequestId":"H1JRRSAAAAAAAAAA","HostId":"123456789012345678abcdefghijkGw1dkHnehccxxKLtoY="}

まとめ

本ブログが誰かの参考となれば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。