事件消息结构
Amazon S3 为发布事件而发送的通知消息采用 JSON 格式。
有关配置事件通知的一般概述和说明,请参阅 Amazon S3 事件通知。
此示例说明了事件通知 JSON 结构的版本 2.2。Amazon S3 使用了这个事件结构的版本 2.1、2.2 和 2.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-id
和x-amz-id-2
都可帮助 Amazon S3 跟踪单个请求。这些值与 Amazon S3 为响应您启动事件的请求而返回的值相同。这是因为它们可以用于将事件与请求匹配。 -
s3
键提供事件中涉及的桶和对象的相关信息。对象键名称值进行了 URL 编码。例如,“red flower.jpg”变成了“red+flower.jpg”(Amazon S3 返回“application/x-www-form-urlencoded
”作为响应中的内容类型)。 -
sequencer
键提供了确定事件顺序的方法。无法保证事件通知按事件发生的顺序到达。然而,来自创建对象 (PUT
s) 和删除对象事件的通知将包含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 标识符。