メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

Amazon S3 イベント通知の設定

Amazon S3 通知機能により、バケット内で特定のイベントが発生したときに、通知を受けることができます。通知を有効にするには、まず通知設定を追加して、Amazon S3 で発行する必用のあるイベントと、Amazon S3 がそのイベント通知を送信する宛先を指定します。この設定は、バケットに関連付けられた notification サブリソースに保存します(「バケット設定オプション」を参照)。Amazon S3 は、このサブリソースを管理するための API も提供します。

現在、Amazon S3 は次のイベントを発行できます。

  • 新しいオブジェクトの作成イベント - Amazon S3 ではオブジェクトを作成するために複数の API をサポートします。特定の API が使用されたときのみ通知をリクエストする(たとえば s3:ObjectCreated:Put)か、ワイルドカードを使用して(たとえば s3:ObjectCreated:*)、API にかかわらずオブジェクトが作成されたときに通知をリクエストできます。

  • 低冗長化ストレージ (RRS) オブジェクト消失イベント - Amazon S3 は RRS ストレージクラスのオブジェクトが消失したことを検出すると、通知メッセージを送信します。

サポートされるイベントタイプのリストについては、「サポートされるイベントタイプ」を参照してください。

Amazon S3 は、次の宛先に対してイベントを発行できます。

  • Amazon Simple Notification Service (Amazon SNS) トピック

    Amazon SNS は、柔軟性に優れたフルマネージド型のプッシュメッセージングサービスです。このサービスを使用すると、モバイルデバイスまたは分散サービスにメッセージをプッシュすることができます。SNS を使用すれば、一度メッセージを発行するだけで、何回も配信できます。SNS トピックは、受信者がイベント通知を動的に購読できるようにする「アクセスポイント」です。SNS の詳細については、Amazon SNS の製品詳細ページを参照してください。

  • Amazon Simple Queue Service (Amazon SQS) キュー

    Amazon SQS は、スケーラブルな、フルマネージド型のメッセージキューサービスです。SQS を使用すると、どのような量のデータでも転送することができ、他のサービスが常に利用可能である必要もありません。通知設定で、Amazon S3 が SQS キューにイベントを発行するようにリクエストすることができます。SQS に関する詳細については、Amazon SQS の製品詳細ページを参照してください。

  • AWS Lambda

    AWS Lambda は、新しい情報に迅速に対応できるアプリケーションを容易に構築できるコンピューティングサービスです。AWS Lambda は、イメージのアップロード、アプリ内のアクティビティ、ウェブサイトのクリック、接続されたデバイスからの出力などのイベントに対する応答としてコードを実行します。AWS Lambda を使用して、他の AWS サービスをカスタムロジックで拡張したり、AWS のスケール、パフォーマンス、セキュリティで動作する独自のバックエンドを作成したりすることができます。AWS Lambda を使用すると、必要なときだけ実行される個別のイベント駆動型アプリケーションを簡単に作成し、1 日あたり数回のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングできます。

    AWS Lambda は、Amazon S3 バケットのイベントに対する応答としてカスタムコードを実行できます。カスタムコードを AWS Lambda にアップロードして、いわゆる Lambda 関数を作成します。Amazon S3 は特定のタイプのイベント(たとえば、オブジェクトが作成したイベント)を検出すると、そのイベントを AWS Lambda に発行し、Lambda で関数を呼び出します。それに応じて、AWS Lambda が関数を実行します。詳細については、AWS Lambda の製品詳細ページを参照してください。

次のセクションでは、バケットでイベント通知を有効化する方法について説明します。サブトピックでは、通知機能について学習するのに役立つチュートリアル例を提供します。詳細については、以下のトピックを参照してください。

イベント通知を有効にする方法

通知の有効化はバケットレベルのオペレーションです。つまり、通知設定情報は、バケットに関連付けられた notification サブリソースに保存します。次のいずれかの方法を使用して通知設定の管理を行います。

  • Amazon S3 コンソールを使用して

    コンソール UI では、コードを記述しなくても、バケットの通知設定を指定できます。手順については、『Amazon Simple Storage Service コンソールユーザーガイド』の「イベント通知の有効化」を参照してください。

  • プログラムで AWS SDK を使用して

    注記

    必要に応じて、コードから直接 Amazon S3 REST API を呼び出すこともできます。ただし、この方法は、リクエストを認証するためのコードを作成する必要があるため面倒な場合もあります。

    内部的には、コンソールも SDK も Amazon S3 REST API を呼び出して、バケットに関連付けられた notification サブリソースを管理します。AWS SDK を使用する通知設定の例は、前のセクションで紹介したチュートリアルのリンクを参照してください。

    使用する方法にかかわらず、Amazon S3 は通知設定を XML として、バケットに関連付けられた notification サブリソースに格納します。バケットのサブリソースの詳細ついては、「バケット設定オプション」を参照してください。デフォルトでは、通知はどのタイプのイベントにも有効になりません。したがって、最初は notification サブリソースに空の設定が格納されています。

    Copy
    <NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </NotificationConfiguration>

    特定のタイプのイベントに対して通知を有効化するには、XML を Amazon S3 が発行するイベントタイプとイベントの発行先を識別するための適切な設定に置き換えます。各宛先には、対応する XML 設定を追加します。(例:

    • イベントメッセージを SQS キューに発行する - SQS キューを 1 つ以上のイベントタイプの通知の宛先として設定するには、QueueConfiguration を追加します。

      Copy
      <NotificationConfiguration> <QueueConfiguration> <Id>optional-id-string</Id> <Queue>sqs-queue-arn</Queue> <Event>event-type</Event> <Event>event-type</Event> ... </QueueConfiguration> ... </NotificationConfiguration>
    • SNS トピックにイベントメッセージを発行する - SNS トピックを特定のイベントタイプの通知の宛先として設定するには、TopicConfiguration を追加します。

      Copy
      <NotificationConfiguration> <TopicConfiguration> <Id>optional-id-string</Id> <Topic>sns-topic-arn</Topic> <Event>event-type</Event> <Event>event-type</Event> ... </TopicConfiguration> ... </NotificationConfiguration>
    • AWS Lambda 関数を呼び出し、引数としてイベントメッセージを指定します。Lambda 関数を指定されたイベントタイプの通知の送信先として設定するには、CloudFunctionConfiguration を追加します。

      Copy
      <NotificationConfiguration> <CloudFunctionConfiguration>    <Id>optional-id-string</Id>    <CloudFunction>cloud-function-arn</CloudFunction>         <Event>event-type</Event>       <Event>event-type</Event>       ...   </CloudFunctionConfiguration> ... </NotificationConfiguration>

    設定には複数の宛先を含めることができますが、1 つのイベントタイプは、多くても 1 つの宛先に表示される可能性があります。たとえば、次の通知設定にはすべての宛先が含まれ、それぞれが特定のタイプのイベントをそれらの宛先に発行するように Amazon S3 にリクエストしています。

    Copy
    <NotificationConfiguration> <QueueConfiguration> <Queue>sqs-queue-arn</Queue> <Event>event-type1</Event> <Event>event-type2</Event> ... </QueueConfiguration> ... <TopicConfiguration> <Topic>sns-topic-arn</Topic> <Event>event-type3</Event> ... </TopicConfiguration> <CloudFunctionConfiguration>    <CloudFunction>cloud-function-arn</CloudFunction>             <Event>event-type4</Event>           </CloudFunctionConfiguration> </NotificationConfiguration>

    イベントタイプの 1 つ(s3:ObjectCreated:*)にワイルドカードを使用していますが、これはすべてのオブジェクトが作成したイベントと考えられ、その結果、他のイベントタイプが含まれる可能性がなくなります。これについては次のセクションで説明します。

    バケットに設定されたすべての通知を削除するには、notification サブリソースに空の <NotificationConfiguration/> エレメントを保存します。

    Amazon S3 は、特定のタイプのイベントを検出すると、そのイベント情報を含むメッセージを発行します(イベントメッセージの構造を参照)。

サポートされるイベントタイプ

Amazon S3 は、次のタイプのイベントを発行できます。通知設定で、これらのイベントタイプを指定します。

イベントタイプ 説明

s3:ObjectCreated:*

s3:ObjectCreated:Put

s3:ObjectCreated:Post

s3:ObjectCreated:Copy

s3:ObjectCreated:CompleteMultipartUpload

PUT、POST、COPY などの Amazon S3 API はオブジェクトを作成できます。これらのイベントタイプを使用すると、特定の API を使用してオブジェクトが作成されたときに通知を有効化できます。また、s3:ObjectCreated:* イベントタイプを使用すると、オブジェクトを作成するために使用された API にかかわらず通知をリクエストすることができます。
s3:ReducedRedundancyLostObject このイベントタイプを使用して、Amazon S3 が RRS ストレージクラスのオブジェクトが失われたことを検出したときに、通知メッセージを送信するように Amazon S3 にリクエストできます。

サポートされる宛先

Amazon S3 は、次の宛先にイベントの通知メッセージを送信できます。通知設定でこれらの宛先の ARN 値を指定します。

  • イベントメッセージを Amazon Simple Notification Service (Amazon SNS) トピックに発行する

  • イベントメッセージを Amazon Simple Queue Service (Amazon SQS) キューに発行する

  • Lambda を呼び出してイベントメッセージを AWS Lambda に発行し、イベントメッセージを引数として指定します。

SNS トピックまたは SQS キューにメッセージを投稿するには、Amazon S3 アクセス権限を付与する必要があります。また、代わりに AWS Lambda 関数を呼び出す場合も Amazon S3 アクセス権限を付与する必要があります。

宛先にイベント通知メッセージを発行するためのアクセス権限の付与

Amazon S3 が宛先にメッセージを発行できるようにするには、該当する API を呼び出して、SNS トピック、SQS キュー、または Lambda 関数にメッセージを発行するために必要なアクセス権限を事前に Amazon S3 プリンシパルに付与しておく必要があります。

AWS Lambda 関数を呼び出すためのアクセス権限の付与

Amazon S3 は Lambda 関数を呼び出してイベントメッセージを AWS Lambda に発行し、イベントメッセージを引数として指定します。

Amazon S3 コンソールを使用して、Lambda 関数で Amazon S3 バケットのイベント通知を設定する場合、Amazon S3 コンソールは Lambda で必要なアクセス権限を設定し、Amazon S3 がバケットから関数を呼び出すアクセス権限を持つようにします。詳細については、『Amazon Simple Storage Service コンソールユーザーガイド』の「イベント通知の有効化」を参照してください。

AWS Lambda から Amazon S3 アクセス権限を付与して、Lambda 関数を呼び出すこともできます。詳細については、「Amazon S3 を設定してイベントを発行する」を参照してください。これは『AWS Lambda Developer Guide』の「AWS Lambda ウォークスルー 2: Amazon S3 イベントを処理する(AWS CLI を使用)」の一部です。

SNS トピックまたは SQS キューにメッセージを発行するためのアクセス権限の付与

IAM ポリシーを宛先の SNS トピックまたは SQS キューにアタッチして、SNS トピックまたは SQS キューにメッセージを発行する Amazon S3 アクセス権限を付与します。

宛先の SNS トピックにアタッチする IAM ポリシーの例。

Copy
{ "Version": "2008-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "SNS-ARN", "Condition": { "ArnLike": {         "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } } } ] }

宛先の SQS キューにアタッチする IAM ポリシーの例。

Copy
{ "Version": "2008-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SQS:SendMessage" ], "Resource": "SQS-ARN", "Condition": { "ArnLike": {         "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } } } ] }

Amazon SNS および Amazon SQS IAM ポリシーの両方について、ArnLike 条件の代わりに StringLike 条件をポリシーで指定できます。

Copy
"Condition": {        "StringLike": {         "aws:SourceArn": "arn:aws:s3:*:*:bucket-name"        } }

SNS トピックまたは SQS キューにポリシーをアタッチする方法の例については、「チュートリアル例 1: バケットを通知用に設定する(メッセージの宛先: SNS トピックおよび SQS キュー)」を参照してください。

アクセス権限の詳細については、次のトピックを参照してください。