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

事件消息结构

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

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

此示例说明了事件通知 JSON 结构的版本 2.1。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.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":"The event type", "userIdentity":{ "principalId":"The unique ID of the IAM resource that caused the event" }, "requestParameters":{ "sourceIPAddress":"The IP address where the request came from" }, "responseElements":{ "x-amz-request-id":"The Amazon S3 generated request ID", "x-amz-id-2":"The Amazon S3 host that processed the request" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"The ID found in the bucket notification configuration", "bucket":{ "name":"The name of the bucket, for example, amzn-s3-demo-bucket", "ownerIdentity":{ "principalId":"The Amazon retail customer ID of the bucket owner" }, "arn":"The bucket Amazon Resource Name (ARN)" }, "object":{ "key":"The object key name", "size":"The object size in bytes (as a number)", "eTag":"The object entity tag (ETag)", "versionId":"The object version if the bucket is versioning-enabled; null or not present if the bucket isn't versioning-enabled", "sequencer": "A string representation of a hexadecimal value used to determine event sequence; only used with PUT and DELETE requests" } }, "glacierEventData": { "restoreEventData": { "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z), when the temporary copy of the restored object expires", "lifecycleRestoreStorageClass": "The source storage class for restored objects" } } } ] }

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

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

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

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

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

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

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

  • userIdentity 键值引用导致事件的 Amazon Identity and Access Management(IAM)资源(用户、角色、组等)的唯一 ID。有关每个 IAM 标识前缀(如 AIDA、AROA、AGPA 等)的定义和有关如何获取唯一标识符的信息,请参阅《IAM 用户指南》中的唯一标识符

  • 如果您希望通过联系 Amazon Web Services 支持 来跟踪请求,则 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”作为响应中的内容类型。)

    ownerIdentity 键值对应于存储桶拥有者的 Amazon 零售(Amazon.com)客户 ID。不再使用此 ID 值,保留此值仅是为了向后兼容。

  • sequencer 键值提供了一种用于确定事件顺序的方法。无法保证事件通知按事件发生的顺序到达。然而,来自创建对象(PUT 请求)和删除对象的事件的通知将包含 sequencer。您可以使用此值来确定给定对象键的事件的顺序。

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

    请注意以下几点:

    • 您不能使用 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":"amzn-s3-demo-bucket", "RequestId":"5582815E1AEA5ADF", "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE" }
注意

s3:TestEvent 消息使用的格式与常规 S3 事件通知不同。与其它使用之前显示的 Records 数组结构的事件通知不同,测试事件使用带有直接字段的简化格式。在实施事件处理时,请确保您的代码能够区分和正确地处理这两种消息格式。

使用 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":"172.16.0.1" }, "responseElements":{ "x-amz-request-id":"C3D13FE58DE4C810", "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"testConfigRule", "bucket":{ "name":"amzn-s3-demo-bucket", "ownerIdentity":{ "principalId":"A3NL1KOZZKExample" }, "arn":"arn:aws:s3:::amzn-s3-demo-bucket" }, "object":{ "key":"HappyFace.jpg", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko", "sequencer":"0055AED6DCD90281E5" } } } ] }