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

事件消息结构

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

有关配置事件通知的一般信息,请参阅 Amazon S3 事件通知

此示例说明了事件通知 JSON 结构的版本 2.2。Amazon S3 使用了这个事件结构的版本 2.12.2。Amazon S3 将版本 2.2 用于跨区域复制事件通知,其中包含特定于这些操作的额外信息。版本 2.2 与版本 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: 前缀。

  • 如果您希望通过联系 responseElements 来跟踪请求,则 Amazon Web Services Support 键值很有用。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 键包含与您的还原请求相关的属性。

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

以下示例显示版本 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 事件通知消息的示例。

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 标识符