事件消息结构 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

事件消息结构

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: 前缀。

  • 如果您希望通过联系 Amazon Web Services 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 标识符