チュートリアル: 通知 (SNS トピックまたは SQS キュー) のバケットを設定する
Amazon S3 通知は、Amazon Simple Notification Service (Amazon SNS) または Amazon Simple Queue Service (Amazon SQS) を使用して受信できます。このチュートリアルでは、Amazon SNS トピックと Amazon SQS キューを使用して、バケットに通知設定を追加します。
注記
Amazon Simple キューサービス FIFO (先入れ先出し) キューは、Amazon S3 イベント通知の送信先としてサポートされていません。Amazon S3 イベントの通知を Amazon SQS FIFO キューに送信するには、Amazon EventBridge を使用できます。詳細については、「Amazon EventBridge を有効にします」を参照してください。
トピック
チュートリアルの概要
このチュートリアルは、以下を行う際に役立ちます。
-
s3:ObjectCreated:*
タイプのイベントを Amazon SQS キューに発行する。 -
s3:ReducedRedundancyLostObject
タイプのイベントを Amazon SNS トピックに発行する。
通知設定の情報については、Amazon SQS、Amazon SNS、Lambda を使用します を参照してください。
コンソールを使用して、コードを記述することなく、これらの手順をすべて実行できます。また、通知設定をプログラムで追加できるように、AWS SDK for Java および .NET を使用したコード例も用意されています。
この手順には、以下のステップが含まれます。
-
Amazon SQS キュー を作成する。
Amazon SQS コンソールを使用して、SQS キューを作成します。Amazon S3 がそのキューにプログラムで送信するどのメッセージにもアクセスできます。ただし、このチュートリアルでは、コンソールで通知メッセージを確認します。
キューにアクセスポリシーをアタッチして、メッセージを発行するための Amazon S3 アクセス許可を付与します。
-
Amazon SNS トピックを作成する。
Amazon SNS コンソールを使用して、SNS トピックを作成し、トピックにサブスクライブします。これにより、そこに投稿されたすべてのイベントが配信されます。通信プロトコルとして E メールを指定します。トピックを作成すると、Amazon SNS から E メールが送信されます。E メール内のリンクを使用して、トピックのサブスクリプションを確認します。
トピックにアクセスポリシーをアタッチして、メッセージを発行するための Amazon S3 アクセス許可を付与します。
-
通知設定をバケットに追加します。
ステップ 1: Amazon SQS キューを作成する
次の手順に従い、Amazon Simple Queue Service (Amazon SQS) キューを作成し、このキューにサブスクライブします。
-
Amazon SQS コンソールを使用して、キューを作成します。手順については、「Amazon Simple Queue Service デベロッパーガイド」の「Getting Started with Amazon SQS」を参照してください。
-
キューに添付したアクセスポリシーを次のポリシーに置き換えます。
-
Amazon SQS コンソールの [Queues] (キュー) リストで、キューの名前を選択します。
-
[Access policy] (アクセスポリシー) タブで [Edit] (編集) をクリックします。
-
キューに添付されているアクセスポリシーを置き換えます。その中で、Amazon SQS ARN、ソースバケット名、バケット所有者アカウント ID を提供します。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "
SQS-queue-ARN
", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1
" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id
" } } } ] } -
[Save] を選択します。
-
-
(オプション) Amazon SQS キューまたは Amazon SNS トピックで、AWS Key Management Service (AWS KMS) によるサーバー側の暗号化が有効になっている場合は、次のポリシーを関連する対称暗号化カスタマーマネージドキーに追加します。
Amazon SQS または Amazon SNS 用の AWS マネージドキーは変更できないため、カスタマーマネージドキーにポリシーを追加する必要があります。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }
AWS KMS で Amazon SQS および Amazon SNS で SSE を使用する方法の詳細については、以下を参照してください。
-
「Amazon Simple Notification Service デベロッパーガイド」の「Key management」。
-
「Amazon Simple Queue Service デベロッパーガイド」の「Key management」。
-
-
キューの ARN を書き留めます。
作成した SQS キューは、AWS アカウント 内の別のリソースです。固有の Amazon リソースネーム (ARN) があります。この ARN は次のステップで必要になります。ARN の形式は次のとおりです。
arn:aws:sqs:
aws-region
:account-id
:queue-name
ステップ 2: Amazon SNS トピックを作成する
手順に従って、Amazon SNS トピックを作成してサブスクライブします。
-
Amazon SNS コンソールを使用してトピックを作成します。詳細については、「Amazon Simple Notification Service デベロッパーガイド」の「Creating an Amazon SNS topic」を参照してください。
-
トピックを受信します。この演習では、通信プロトコルとしてメールを使用します。手順については、Amazon Simple Notification Service デベロッパーガイドの Amazon SNS トピックへのサブスクライブを参照してください。
トピックのサブスクリプションの確認を求めるメールがお客様宛てに送信されます。サブスクリプションを確認します。
-
トピックにアタッチされたアクセスポリシーを次のポリシーに置き換えます。その中で、SNS トピックの ARN、バケット名、バケット所有者のアカウント ID を提供します。
{ "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:*:*:
" }, "StringEquals": { "aws:SourceAccount": "amzn-s3-demo-bucket
bucket-owner-account-id
" } } } ] } -
トピックの ARN を書き留めておきます。
作成した SNS トピックは、AWS アカウント内の別のリソースであり、一意の ARN があります。この ARN は次のステップで必要になります。ARN は次のような形式になります。
arn:aws:sns:
aws-region
:account-id
:topic-name
ステップ 3: 通知設定をバケットに追加する
Amazon S3 コンソールを使用するか、プログラムで AWS SDK を使用して、バケットの通知を有効にすることができます。バケットでの通知を設定するオプションのいずれかを選択します。このセクションでは、AWS SDK for Java および .NET を使用するコード例を示します。
オプション A: コンソールを使用してバケットの通知を有効にする
Amazon S3 コンソールを使用して、Amazon S3 に次のアクションをリクエストする通知設定を追加します。
-
[All object create events (すべてのオブジェクト作成イベント)] タイプのイベントを Amazon SQS キューに発行する。
-
[Object in RRS lost (RRS オブジェクトの紛失)] タイプのイベントを Amazon SNS トピックに発行する。
通知設定を保存すると、Amazon S3 からテストメッセージが発行され、このメッセージが E メールで送信されます。
手順については、Amazon S3 コンソールを使用したイベント通知の有効化と設定 を参照してください。
オプション B: AWS SDK を使用してバケットの通知を有効にする
ステップ 4: セットアップをテストする
さて、バケットにオブジェクトをアップロードしたり、Amazon SQS コンソールのイベント通知を検証することでセットアップをテストできます。手順については、Amazon Simple Queue Service デベロッパーガイドの開始方法」セクションのメッセージの受信を参照してください。