Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

事件消息结构

Amazon S3 发送以发布事件的通知消息采用 JSON 格式。以下示例显示 JSON 消息的结构。

请注意有关示例的以下内容:

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

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

    如果 Amazon 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 键提供了确定事件顺序的方法。无法保证事件通知按事件发生的顺序到达。但是,来自创建对象 (PUT) 和删除对象的事件的通知包含 sequencer,可用于确定给定对象键的事件的顺序。

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

    请注意以下几点:

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

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

     

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

     

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

以下示例显示版本 2.1 的事件消息 JSON 结构,该版本是 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":"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, "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" } } } ] }

以下示例显示版本 2.0 的事件消息结构,Amazon S3 不再使用该版本。

{ "Records":[ { "eventVersion":"2.0", "eventSource":"aws:s3", "awsRegion":"us-west-2", "eventTime":The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z, when 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, "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" } } } ] }

以下是示例消息:

  • 测试消息 — 当您在存储桶上配置事件通知时,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-cn:s3:::mybucket" }, "object":{ "key":"HappyFace.jpg", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko", "sequencer":"0055AED6DCD90281E5" } } } ] }