事件訊息結構 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

事件訊息結構

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 將新欄位新增至事件結構,次要版本就會增加。如果針對部分或所有現有事件提供新資訊,則可能會發生這種情況。如果只有新引進的事件類型才提供新資訊,也可能會發生這種情況。應用程式應略過新欄位,以與新次要版本的事件結構維持正向相容。

    如果引進新的事件類型,但卻未修改事件結構,則事件版本不會變更。

    為確保您的應用程式可以正確剖析事件結構,我們建議您對主要版本編號進行「等於」比較。為了確保您的應用程序預期的字段存在,我們還建議對次要版本進行 greater-than-or-equal-to 比較。

  • 所以 eventName 會參考事件通知類型的清單,但不會包含 s3: 字首。

  • 如果您想通過跟進來跟踪請求,則responseElements鍵值非常有用 AWS 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 來判斷不同物件金鑰上的事件順序。

    • 排序器長度各不相同。所以,為了比較這些值,請先在較短值的右邊填充零,再執行字典排序比較。

  • 只有 s3:ObjectRestore:Completed 事件才可見到 glacierEventData金鑰。

  • 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 識別符