事件消息结构 - Amazon Simple Storage Service

事件消息结构

Amazon S3 为发布事件而发送的通知消息采用 JSON 格式。

有关配置事件通知的一般概述和说明,请参阅 Amazon S3 事件通知

此示例说明了事件通知 JSON 结构的版本 2.2。Amazon S3 使用了这个事件结构的版本 2.12.22.3。Amazon S3 使用版本 2.2 进行跨区域复制事件通知。它将 2.3 版本用于 S3 生命周期、S3 Intelligent-Tiering、对象 ACL、对象标记和对象恢复删除事件。这些版本包含特定于这些操作的额外信息。版本 2.2 和版本 2.3 与版本 2.1 兼容,Amazon S3 当前将该版本用于所有其他事件类型。

{ "Records":[ { "eventVersion":"2.2", "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":"event-type", "userIdentity":{ "principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event" }, "requestParameters":{ "sourceIPAddress":"ip-address-where-request-came-from" }, "responseElements":{ "x-amz-request-id":"Amazon S3 generated request ID", "x-amz-id-2":"Amazon S3 host that processed the request" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"ID found in the bucket notification configuration", "bucket":{ "name":"bucket-name", "ownerIdentity":{ "principalId":"Amazon-customer-ID-of-the-bucket-owner" }, "arn":"bucket-ARN" }, "object":{ "key":"object-key", "size":"object-size in bytes", "eTag":"object eTag", "versionId":"object version if bucket is versioning-enabled, otherwise null", "sequencer": "a string representation of a hexadecimal value used to determine event sequence, only used with PUTs and DELETEs" } }, "glacierEventData": { "restoreEventData": { "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z, of Restore Expiry", "lifecycleRestoreStorageClass": "Source storage class for restore" } } } ] }

注意,以下是关于事件消息结构:

  • eventVersion 键值包含 <major>.<minor> 格式的主要版本和次要版本。

    如果 Amazon S3 对不向后兼容的事件结构进行更改,则主要版本将递增。这包括删除已存在的 JSON 字段或更改字段内容的表示方式(例如,日期格式)。

    如果 Amazon S3 向事件结构添加新字段,则次要版本将递增。如果为某些或所有现有事件提供了新信息,则可能会发生这种情况 如果仅提供有关新引入的事件类型的新信息,则可能会发生这种情况。应用程序应忽略新字段,以保持与事件结构的新次要版本的前向兼容。

    如果引入了新的事件类型但事件的结构未经修改,则事件版本不会更改。

    为确保您的应用程序可以正确解析事件结构,我们建议您对主要版本号进行相等比较。为了确保您的应用程序所期望的字段存在,我们还建议对次要版本进行大于或等于比较。

  • eventName 引用事件通知类型列表,但不包含 s3: 前缀。

  • 如果您希望通过联系 AWS Support 来跟踪请求,则 responseElements 键值很有用。x-amz-request-idx-amz-id-2 都可帮助 Amazon S3 跟踪单个请求。这些值与 Amazon S3 为响应您启动事件的请求而返回的值相同。这是因为它们可以用于将事件与请求匹配。

  • s3 键提供事件中涉及的存储桶和对象的相关信息。对象键名称值进行了 URL 编码。例如,“red flower.jpg”变成了“red+flower.jpg”(Amazon S3 返回“application/x-www-form-urlencoded”作为响应中的内容类型)。

  • sequencer 键提供了确定事件顺序的方法。无法保证事件通知按事件发生的顺序到达。然而,来自创建对象 (PUTs) 和删除对象事件的通知将包含 sequencer。它可用于确定给定对象密钥的事件的顺序。

    如果将来自同一对象键上的两个事件通知的 sequencer 字符串进行比较,就会发现 sequencer 十六进制值较大的事件通知是后发生的事件。如果您正在使用事件通知来维护 Amazon S3 对象的单独数据库或索引,我们建议您在处理每个事件通知时比较和存储 sequencer 值。

    请注意以下几点:

    • 您不能使用 sequencer 确定不同对象键上的事件的顺序。

    • 排序器可以有不同的长度。因此,要比较这些值,您必须先使用零填补较短的值的右侧,然后进行字母表顺序比较。

  • glacierEventData 键只对 s3:ObjectRestore:Completed 事件可见。

  • restoreEventData 键包含与您的还原请求相关的属性。

  • replicationEventData 键只对复制事件可见。

  • intelligentTieringEventData 密钥只对 S3 Intelligent-Tiering 可见。

  • lifecycleEventData 密钥只对 S3 生命周期转换事件可见。

示例消息

以下是 Amazon S3 事件通知消息的示例。

Amazon S3 测试消息

当您在存储桶上配置事件通知时,Amazon S3 会发送以下测试消息。

{ "Service":"Amazon S3", "Event":"s3:TestEvent", "Time":"2014-10-13T15:57:02.089Z", "Bucket":"bucketname", "RequestId":"5582815E1AEA5ADF", "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE" }
使用 PUT 请求创建对象时的示例消息

以下消息是 Amazon S3 发送以发布 s3:ObjectCreated:Put 事件的消息示例。

{ "Records":[ { "eventVersion":"2.1", "eventSource":"aws:s3", "awsRegion":"us-west-2", "eventTime":"1970-01-01T00:00:00.000Z", "eventName":"ObjectCreated:Put", "userIdentity":{ "principalId":"AIDAJDPLRKLG7UEXAMPLE" }, "requestParameters":{ "sourceIPAddress":"127.0.0.1" }, "responseElements":{ "x-amz-request-id":"C3D13FE58DE4C810", "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"testConfigRule", "bucket":{ "name":"mybucket", "ownerIdentity":{ "principalId":"A3NL1KOZZKExample" }, "arn":"arn:aws:s3:::mybucket" }, "object":{ "key":"HappyFace.jpg", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko", "sequencer":"0055AED6DCD90281E5" } } } ] }

有关每个 IAM 标识前缀(如 AIDA、AROA、AGPA 等)的定义,请参阅 IAM 用户指南中的 IAM 标识符