

# イベントメッセージの構造
<a name="notification-content-structure"></a>

Amazon S3 がイベントを発行するために送信する通知メッセージは JSON 形式です。

イベント通知の設定に関する一般的な概要と手順については、[Amazon S3 イベント通知](EventNotifications.md) を参照してください。

次の例は、イベント通知 JSON 構造体の*バージョン 2.1* を示します。Amazon S3 は、このイベント構造体の*バージョン 2.1 *、* 2.2 *、* 2.3 *を使用します。Amazon S3 は、クロスリージョンレプリケーションイベント通知にバージョン 2.2 を使用します。S3 ライフサイクル、S3 Intelligent−Tiering、オブジェクト ACL、オブジェクトのタグ付け、オブジェクトの復元削除イベントにバージョン 2.3 を使用します。これらのバージョンには、これらのオペレーションに固有の追加情報が含まれています。バージョン 2.2 および 2.3 は、バージョン 2.1 と互換性があり、Amazon S3 が現在すべてのイベント通知タイプで使用されています。

```
{  
   "Records":[  
      {  
         "eventVersion":"2.1",
         "eventSource":"aws:s3",
         "awsRegion":"us-west-2",
         "eventTime":"The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z) when Amazon S3 finished processing the request",
         "eventName":"The event type",
         "userIdentity":{  
            "principalId":"The unique ID of the IAM resource that caused the event"
         },
         "requestParameters":{  
            "sourceIPAddress":"The IP address where the request came from"
         },
         "responseElements":{  
            "x-amz-request-id":"The Amazon S3 generated request ID",
            "x-amz-id-2":"The Amazon S3 host that processed the request"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"The ID found in the bucket notification configuration",
            "bucket":{  
               "name":"The name of the bucket, for example, amzn-s3-demo-bucket",
               "ownerIdentity":{  
                  "principalId":"The Amazon retail customer ID of the bucket owner"
               },
               "arn":"The bucket Amazon Resource Name (ARN)"
            },
            "object":{  
               "key":"The object key name",
               "size":"The object size in bytes (as a number)",
               "eTag":"The object entity tag (ETag)",
               "versionId":"The object version if the bucket is versioning-enabled; null or not present if the bucket isn't versioning-enabled",
               "sequencer": "A string representation of a hexadecimal value used to determine event sequence; only used with PUT and DELETE requests"
            }
         },
         "glacierEventData": {
            "restoreEventData": {
               "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z), when the temporary copy of the restored object expires",
               "lifecycleRestoreStorageClass": "The source storage class for restored objects"
            }
         }
      }
   ]
}
```

イベントメッセージ構造について、以下の点に注意してください。
+ `eventVersion` 形式でメジャーおよびマイナーバージョンを含む `major` キーの値。`minor`

  Amazon S3 が、後方互換性のないイベント構造に変更を加えた場合、メジャーバージョンは増分されます。これには、すでに存在する JSON フィールドの削除や、フィールドのコンテンツの表現方法 (日付形式など) の変更が含まれます。

  Amazon S3 が、イベント構造に新しいフィールドを追加した場合、マイナーバージョンは増分されます。これは、既存のイベントの一部またはすべてに対して新しい情報が提供された場合に発生します。これは、新しく導入されたイベントタイプでのみ新しい情報が提供されている場合にも発生します。イベント構造の新しいマイナーバージョンとの互換性を維持するため、アプリケーションでは新しいフィールドを無視することをお勧めします。

  新しいイベントタイプが導入されても、イベントの構造が変更されていない場合、イベントのバージョンは変更されません。

  アプリケーションがイベント構造を正しく解析できるようにするため、メジャーバージョン番号が同等かどうかの比較を行うことをお勧めします。アプリケーションで想定されるフィールドが存在することを確認するため、マイナーバージョンが同等以上かを比較することをお勧めします。
+ `eventName` キー値は[イベント通知タイプ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html)のリストを参照しますが、`s3:` プレフィックスが含まれていません。
+ `userIdentity` キー値は、イベントの原因となった AWS Identity and Access Management (IAM) リソース (ユーザー、ロール、グループなど) の一意の ID を参照します。各 IAM 識別プレフィクス (AIDA、AROA、AGPA など) の定義については、「*IAM ユーザーガイド*」の「[一意の識別子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html##identifiers-unique-ids)」を参照してください。
+ `responseElements` キー値は、AWS サポート のサポートによってリクエストを追跡する場合に役立ちます。`x-amz-request-id` と `x-amz-id-2` のどちらも、Amazon S3 が個々のリクエストを追跡するのに役立ちます。これらの値は、イベントを開始するリクエストへの応答として Amazon S3 が返す値と同じです。したがって、これらの値を使用してイベントをリクエストに一致させることができます。
+ `s3` キー値は、イベントに関与したバケットとオブジェクトに関する情報を提供します。オブジェクトのキー名の値は URL エンコードされます。例えば、`red flower.jpg` は `red+flower.jpg` になります。(Amazon S3 は、レスポンスのコンテンツタイプとして「`application/x-www-form-urlencoded`」を返します。)

  `ownerIdentity` キー値は、バケット所有者の Amazon 小売 (Amazon.com) 顧客 ID に対応します。この ID 値は使用されなくなり、下位互換性のためにのみ維持されます。
+ イベントのシーケンスを決定する方法の 1 つとして、`sequencer` キー値があります。イベントが発生した順序でイベント通知が届く保証はありません。ただし、オブジェクト (`PUT` リクエスト) を作成するイベントからの通知と削除オブジェクトは `sequencer` を含みます。この値を使用して、特定のオブジェクトキーのイベントの順序を決定できます。

  同じオブジェクトキーに対する 2 つのイベント通知の `sequencer` の文字列を比較すると、`sequencer` の 16 進値が大きいほうのイベント通知が後に発生したイベントであることがわかります。イベント通知を使用して Amazon S3 オブジェクトの別のデータベースまたはインデックスを維持している場合は、イベント通知を処理するたびに `sequencer` の値を比較し、保存することを推奨します。

  次の点に注意してください。
  + 複数のオブジェクトキーのイベントの順序を決定するために `sequencer` キー値を使用することはできません。
  + `sequencer` 文字列の長さは異なる場合があります。これらの値を比較するには、まず短い値の左側に 0 を挿入してから、辞書式比較を行います。
+ `glacierEventData` キー値は `s3:ObjectRestore:Completed` イベントに対してのみ表示されます。
+ `restoreEventData` キー値には、復元リクエストに関連する属性が含まれます。
+ `replicationEventData` キー値は、レプリケーションイベントに対してのみ表示されます。
+ `intelligentTieringEventData` キー値は S3 Intelligent−Tiering イベントでのみ表示されます。
+ `lifecycleEventData` キー値は S3 ライフサイクルの移行イベントでのみ表示されます。

## メッセージの例
<a name="notification-content-structure-examples"></a>

Amazon S3 イベント通知メッセージの例を次に示します。

**Amazon S3 テストメッセージ**  
バケットにイベント通知を設定すると、Amazon S3 は次のようなテストメッセージを送信します。

```
1. {  
2.    "Service":"Amazon S3",
3.    "Event":"s3:TestEvent",
4.    "Time":"2014-10-13T15:57:02.089Z",
5.    "Bucket":"amzn-s3-demo-bucket",
6.    "RequestId":"5582815E1AEA5ADF",
7.    "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
8. }
```

**注記**  
`s3:TestEvent` メッセージは、通常の S3 イベント通知とは異なる形式を使用します。前述の `Records` 配列構造を使用する他のイベント通知とは異なり、テストイベントは直接フィールドを含む簡略化された形式を使用します。イベント処理を実装する際は、コードが両方のメッセージ形式を区別し、適切に処理できることを確認してください。

**`PUT` リクエストを使用してオブジェクトが作成された場合のメッセージの例**  
次は Amazon S3 が `s3:ObjectCreated:Put` イベントを発行するために送信するメッセージの例です。

```
 1. {  
 2.    "Records":[  
 3.       {  
 4.          "eventVersion":"2.1",
 5.          "eventSource":"aws:s3",
 6.          "awsRegion":"us-west-2",
 7.          "eventTime":"1970-01-01T00:00:00.000Z",
 8.          "eventName":"ObjectCreated:Put",
 9.          "userIdentity":{  
10.             "principalId":"AIDAJDPLRKLG7UEXAMPLE"
11.          },
12.          "requestParameters":{  
13.             "sourceIPAddress":"172.16.0.1"
14.          },
15.          "responseElements":{  
16.             "x-amz-request-id":"C3D13FE58DE4C810",
17.             "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
18.          },
19.          "s3":{  
20.             "s3SchemaVersion":"1.0",
21.             "configurationId":"testConfigRule",
22.             "bucket":{  
23.                "name":"amzn-s3-demo-bucket",
24.                "ownerIdentity":{  
25.                   "principalId":"A3NL1KOZZKExample"
26.                },
27.                "arn":"arn:aws:s3:::amzn-s3-demo-bucket"
28.             },
29.             "object":{  
30.                "key":"HappyFace.jpg",
31.                "size":1024,
32.                "eTag":"d41d8cd98f00b204e9800998ecf8427e",
33.                "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
34.                "sequencer":"0055AED6DCD90281E5"
35.             }
36.          }
37.       }
38.    ]
39. }
```

