AWS S3 通知設定で注意すべきポイント:s3:TestEvent
はじめに
Amazon S3 バケットのイベント通知を設定する際に、s3:TestEvent
メッセージが自動的に送信されます。このテストメッセージを適切に処理することで、システムの問題を回避できます。
When you configure an event notification on a bucket, Amazon S3 sends the following test message.
AWS リソースの作成
以下の手順に従って、S3 通知のテスト用の AWS リソースを作成してください。
CloudFormation テンプレート
次の CloudFormation テンプレートを使用して、関連する SQS キューを持つ S3 バケットを作成します。(行11-14)
AWSTemplateFormatVersion: "2010-09-09"
Description: Example of CloudWatch events not queueing to SSE SQS
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
NotificationConfiguration:
QueueConfigurations:
- Event: 's3:ObjectCreated:Put'
Queue: !GetAtt Queue.Arn
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
Queue:
Type: AWS::SQS::Queue
Properties:
QueueName: s3-event-notification-test-queue
ReceiveMessageWaitTimeSeconds: 20
QueuePolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2008-10-17'
Statement:
- Effect: Allow
Principal:
Service: s3.amazonaws.com
Action:
- SQS:SendMessage
- SQS:ReceiveMessage
Resource: !GetAtt Queue.Arn
Condition:
StringEquals:
aws:SourceAccount: !Ref AWS::AccountId
Queues:
- !Ref Queue
CloudFormation スタックのデプロイ
以下のコマンドを使用してスタックをデプロイしてください。
aws cloudformation deploy --template-file template.yaml --stack-name s3-event-notification-test
設定のテスト
セットアップを確認するには、以下のコマンドを使用して SQS メッセージを確認します。
aws sqs receive-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/{AccountId}/s3-event-notification-test-queue
以下のように、バケットにオブジェクトが追加されていない場合でも、s3:TestEvent
メッセージが出力されるはずです。
{
"Messages": [
{
"MessageId": "...",
"ReceiptHandle": "...",
"MD5OfBody": "...",
"Body": "{\"Service\":\"Amazon S3\",\"Event\":\"s3:TestEvent\",\"Time\":\"2020-12-29T18:53:47.874Z\",\"Bucket\":\"s3-event-notification-test-bucket-xxxxxxxx\",\"RequestId\":\"...\",\"HostId\":\"...\"}"
}
]
}
リソースのクリーンアップ
テストが完了したら、不要なコストを回避するためにリソースを削除してください。
aws cloudformation delete-stack --stack-name s3-event-notification-test
まとめ
s3:TestEvent
メッセージを適切に処理することは、S3 通知システムの信頼性を確保するために非常に重要です。このメッセージを適切に管理しないと、下流のシステムで誤動作や意図しない結果を引き起こす可能性があります。
Happy Coding! 🚀