

# オブジェクトキー名のフィルタリングを使用したイベント通知の設定
<a name="notification-how-to-filtering"></a>

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

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

**注記**  
ワイルドカード文字 (「\$1」) は、フィルタでプレフィックスまたはサフィックスとして使用することはできません。プレフィックスまたはサフィックスにスペースが含まれている場合は、それを「\$1」文字に置き換える必要があります。プレフィックスまたはサフィックスの値に他の特殊文字を使用する場合は、[URL エンコード (パーセントエンコード) 形式](https://en.wikipedia.org/wiki/Percent-encoding)で入力する必要があります。イベント通知のプレフィックスまたはサフィックスに使用する場合で、URL エンコード形式に変換する必要がある特殊文字の一覧については、「[セーフ文字](object-keys.md#object-key-guidelines-safe-characters)」を参照してください。

Amazon S3 コンソールでオブジェクトキー名フィルタリングを使用する通知設定を設定できます。これを行うには、AWS SDK または REST API を介して、Amazon S3 API を直接使用します。コンソール UI を使用してバケットの通知設定をセットアップする方法については、[Amazon S3 コンソールを使用したイベント通知の有効化と設定](enable-event-notifications.md) を参照してください。

Amazon S3 は、「[Amazon SQS、Amazon SNS、Lambda を使用します](how-to-enable-disable-notification-intro.md)」で説明されているように、バケットに関連付けられている *notification* サブリソースに通知設定を XML 形式で保存します。`Filter` XML 構造を使用して、オブジェクトキー名のプレフィックスまたはサフィックスでフィルタして通知のルールを定義します。`Filter` XML 構造の詳細については、*Amazon Simple Storage Service API リファレンス*の [PUT Bucket 通知](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html) を参照してください。

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

**Topics**
+ [オブジェクトキー名によるフィルタ処理を使用した有効な通知設定の例](#notification-how-to-filtering-example-valid)
+ [無効なプレフィックスやサフィックスの重複がある通知設定の例。](#notification-how-to-filtering-examples-invalid)

## オブジェクトキー名によるフィルタ処理を使用した有効な通知設定の例
<a name="notification-how-to-filtering-example-valid"></a>

次の通知設定には、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>
```

## 無効なプレフィックスやサフィックスの重複がある通知設定の例。
<a name="notification-how-to-filtering-examples-invalid"></a>

ほとんどの場合、`Filter` を使用する通知構成では、同じイベントタイプのプレフィックス、サフィックス、またはプレフィックスとサフィックスの組み合わせが重複するフィルタのルールを定義できません。サフィックスが重複していなければ、プレフィックスが重複していても問題ありません。例については、[オブジェクトキー名のフィルタリングを使用したイベント通知の設定](#notification-how-to-filtering) を参照してください。

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

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

既存の通知構成ルールには、他のプレフィックスとサフィックスとそれぞれ一致するデフォルトのプレフィックスとサフィックスがあると想定されます。次の通知設定は、重複するプレフィックスがあるために無効です。具体的には、ルートプレフィックスが他のプレフィックスと重複します。この例のように、プレフィックスではなくサフィックスを使用するのも true です。ルートサフィックスが他のサフィックスと重複します。

```
<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 つのサフィックスは、重複していると見なされます。文字列は `jpg` と`pg` で終わることができます。したがって、サフィックスは重なり合います。プレフィックスについても同様です。文字列が両方のプレフィックスで始まる可能性があれば、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>
```