オブジェクトキー名のフィルタリングを使用したイベント通知の設定 - Amazon Simple Storage Service

オブジェクトキー名のフィルタリングを使用したイベント通知の設定

Amazon S3 イベント通知を設定する場合、Amazon S3 による通知の送信をトリガーするサポート対象の Amazon S3 イベントタイプを指定する必要があります。指定しなかったイベントタイプが S3 バケットで発生しても、Amazon S3 は通知を送信しません。

通知がオブジェクトのキー名のプレフィックスまたはサフィックスでフィルタリングされるように設定できます。たとえば、ファイル名の拡張子が .jpg であるイメージファイルがバケットに追加されたときにのみ通知が送信されるように設定できます。または、「images/」というプレフィックスの付いたオブジェクトがバケットに追加されたときに Amazon SNS トピックに通知が送信されるように設定し、同じバケット内にある「logs/」というプレフィックスの付いたオブジェクトの通知が AWS Lambda 関数に渡されるようにすることができます。

Amazon S3 コンソールで、AWS SDK で Amazon S3 API を使用して、または直接 REST API を使用して、オブジェクトキー名によるフィルタリングを使用する通知設定をセットアップできます。コンソール UI を使用してバケットの通知設定をセットアップする方法については、「Amazon S3 コンソールを使用したイベント通知の有効化と設定」を参照してください。

Amazon S3 は、「イベント通知の有効化」で説明されているように、バケットに関連付けられている notification サブリソースに通知設定を XML 形式で保存します。Filter XML 構造を使用して、オブジェクトキー名のプレフィックスまたはサフィックスでフィルタリングされる通知のルールを定義します。Filter XML 構造の詳細については、Amazon Simple Storage Service API リファレンスの「PUT Bucket 通知」を参照してください。

Amazon S3 イベント通知がオブジェクトキー名のフィルタリングを使用するように設定されている場合、通知は特定のキー名のプレフィックスまたはサフィックスを持つオブジェクトに対してのみ発行されます。ワイルドカード文字 (「*」) は、フィルターで任意の文字を表すプレフィックスまたはサフィックスとして使用することはできません。プレフィックスまたはサフィックスの値に特殊文字を使用する場合は、URL エンコード (パーセントエンコード) 形式で入力する必要があります。詳細については、「オブジェクトキーの命名のガイドライン」を参照してください。

Filter を使用する通知設定では、プレフィックスの重複、サフィックスの重複、またはプレフィックスとサフィックスの重複があるフィルタリングルールを定義できません。以下のセクションでは、オブジェクトキー名フィルタリングを使用した有効な通知設定の例を示します。また、プレフィックス/サフィックスが重複しているために無効である通知設定の例も示します。

オブジェクトキー名によるフィルタ処理を使用した有効な通知設定の例

次の通知設定には、Amazon SQS キューを識別するキュー設定が含まれており、これにより Amazon S3 は s3:ObjectCreated:Put タイプのイベントを発行できます。イベントは、images/ というプレフィックスと jpg というサフィックスの付いたオブジェクトがバケットに PUT (作成) されるたびにパブリッシュされます。

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

次の通知設定には、複数の重複していないプレフィックスがあります。この設定では、images/ フォルダ内の PUT リクエストの通知を queue-A に送信し、logs/ フォルダ内の PUT リクエストの通知を queue-B に送信するように定義しています。

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> <QueueConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>logs/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

次の通知設定には、複数の重複していないサフィックスがあります。この設定では、バケットに新しく追加される .jpg イメージはすべて Lambda の cloud-function-A によって処理され、新しく追加される .png イメージはすべて cloud-function-B によって処理されるように定義されています。.png.jpg は、末尾の 1 文字が同じであっても、重複していると見なされません。文字列が両方のサフィックスで終わる可能性がある場合には、2 つのサフィックスは、重複していると見なされます。文字列が .png.jpg の両方で終わることはないので、この設定例の 2 つのサフィックスは重複していません。

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

Filter を使用する通知設定では、同じイベントタイプのプレフィックスが重複しているフィルタリングルールを定義できません。プレフィックスが重複していても、サフィックスが重複していない場合は、これに該当しません。次の設定例は、プレフィックスは重複しており、サフィックスは重複していないオブジェクトがどのように別々の場所に送られるかを示しています。

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

無効なプレフィックス/サフィックスの重複がある通知設定の例

Filter を使用する通知設定では、通常、同じイベントタイプに対してプレフィックスが重複したり、サフィックスが重複したり、プレフィックスとサフィックスの組み合わせが重複したりするフィルタリングルールは定義できません。サフィックスが重複していなければ、プレフィックスが重複していても問題ありません。例については、「オブジェクトキー名のフィルタリングを使用したイベント通知の設定」を参照してください。

イベントタイプが異なれば、重複しているオブジェクトキー名フィルターを使用できます。たとえば、image/ イベントタイプにプレフィックス ObjectCreated:Put を使用すると同時に、image/ イベントタイプにプレフィックス ObjectRemoved:* を使用する通知設定を作成できます。

Amazon S3 コンソールまたは API の使用時に、同じイベントタイプに対して名前が重複する無効なフィルターを使用する通知設定を保存しようとすると、エラーが発生します。このセクションでは、名前が重複するフィルターを使用しているために無効である通知設定の例を示します。

既存の通知設定ルールのデフォルトのプレフィックスまたはサフィックスが、他のプレフィックスまたはサフィックスとそれぞれ一致する可能性があります。次の通知設定は、重複するプレフィックスがあり、ルートプレフィックスが他の任意のプレフィックスと重複するため、無効です。(この例でプレフィックスではなくサフィックスを使用する場合も無効です。ルートサフィックスが他のサフィックスと重複します。)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic> <Event>s3:ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

次の通知設定は、重複するサフィックスがあるために無効です。文字列が両方のサフィックスで終わる可能性がある場合には、2 つのサフィックスは、重複していると見なされます。文字列が jpgpg の両方で終わる可能性があるため、サフィックスが重複しています。(これはプレフィックスについても同じであり、文字列が両方のプレフィックスで始まる可能性があれば、2 つのプレフィックスは重複していると見なされます。)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>pg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration

次の通知設定は、重複するプレフィックスとサフィックスがあるために無効です。

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>