使用 Lambda 處理 Amazon S3 事件通知 - AWS Lambda

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

使用 Lambda 處理 Amazon S3 事件通知

您可以使用 Lambda 來處理來自 Amazon Simple Storage Service 的事件通知。建立或刪除物件時,Amazon S3 可以將事件傳送至 Lambda 函數。您在儲存貯體上設定通知設定,並授予 Amazon S3 許可以在函數以資源為基礎的許可政策上叫用函數。

警告

如果 Lambda 函數使用的是觸發的相同儲存貯體,這可能會造成函數在迴圈中執行。例如,如果儲存貯體在物件每次上傳時都觸發函數,且該函數會將物件上傳至儲存貯體,則函數會間接地觸發本身。若要避免此狀況,請使用兩個儲存貯體,或將觸發設定為僅套用至傳入物件所用的字首。

Amazon S3 使用包含物件詳細資訊的事件以非同步方式叫用您的函數。以下範例顯示當部署套裝服務上傳至 Amazon S3 時,Amazon S3 傳送的事件。

範例 Amazon S3 通知事件
{ "Records": [ { "eventVersion": "2.1", "eventSource": "aws:s3", "awsRegion": "us-east-2", "eventTime": "2019-09-03T19:37:27.192Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "AWS:AIDAINPONIXQXHT3IKHL2" }, "requestParameters": { "sourceIPAddress": "205.255.255.255" }, "responseElements": { "x-amz-request-id": "D82B88E5F771F645", "x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo=" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1", "bucket": { "name": "amzn-s3-demo-bucket", "ownerIdentity": { "principalId": "A3I5XTEXAMAI3E" }, "arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df" }, "object": { "key": "b21b84d653bb07b05b1e6b33684dc11b", "size": 1305107, "eTag": "b21b84d653bb07b05b1e6b33684dc11b", "sequencer": "0C0F6F405D6ED209E1" } } } ] }

若要叫用您的函數,Amazon S3 需要該函數以資源為基礎政策的許可。當您在 Lambda 主控台中設定 Amazon S3 觸發條件時,主控台會修改以資源為基礎的政策,讓 Amazon S3 在儲存貯體名稱與帳戶 ID 相符時叫用該函數。如果您在 Amazon S3 中設定通知,您可以使用 Lambda API 來更新政策。您也可以使用 Lambda API 將權限授與其他帳戶,或限制指定別名的權限。

如果您的函數使用 AWS SDK來管理 Amazon S3 資源,則執行角色也需要 Amazon S3 許可。