搭配使用 AWS Lambda 與 Amazon S3 批次操作 - AWS Lambda

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

搭配使用 AWS Lambda 與 Amazon S3 批次操作

您可以使用 Amazon S3 批次操作,在大型 Amazon S3 物件組合叫用 Lambda 函數。Amazon S3 會追蹤批次操作的進度、傳送通知以及儲存顯示每個動作狀態的完成報告。

若要執行批次操作,您可以建立 Amazon S3 批次操作任務。當您建立任務時,請提供資訊清單 (物件清單),並設定要在這些物件上執行的動作。

當批次任務開始時,Amazon S3 會針對資訊清單中的每個物件同步叫用 Lambda 函數。事件參數包括儲存貯體和物件的名稱。

下列範例顯示 Amazon S3 針對 examplebucket 儲存貯體中名稱為 customerImage1.jpg 的物件,傳送事件至 Lambda 函數。

範例 Amazon S3 批次請求事件
{ "invocationSchemaVersion": "1.0", "invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "job": { "id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce" }, "tasks": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "s3Key": "customerImage1.jpg", "s3VersionId": "1", "s3BucketArn": "arn:aws:s3:::examplebucket" } ] }

您的 Lambda 函數必須傳回一個 JSON 物件,並有如下例所示的欄位。您可以從事件參數複製 invocationIdtaskId。您可以在 resultString 返回子串。Amazon S3 會在完成報告中儲存 resultString 值。

範例 Amazon S3 批次請求回應
{ "invocationSchemaVersion": "1.0", "treatMissingKeysAs" : "PermanentFailure", "invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "results": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "resultCode": "Succeeded", "resultString": "[\"Alice\", \"Bob\"]" } ] }

從 Amazon S3 批次操作叫用 Lambda 函數

您可以使用不合格或合格的函數 ARN 叫用 Lambda 函數。如果您要在整個批次任務中使用相同的函數版本,請在建立任務時,在 FunctionARN 參數中設定特定的函數版本。如果您設定別名或 $LATEST 限定詞,如果在任務執行期間更新別名或 $LATEST,批次任務就會立即開始呼叫新版函數。

請注意,您無法重複使用現有的 Amazon S3 事件型函數進行批次操作。這是因為 Amazon S3 批次操作將不同的事件參數傳遞給 Lambda 函數,並預期傳回有特定 JSON 結構的訊息。

在您針對 Amazon S3 批次任務建立的資源型政策中,請確認您已針對任務設定權限以叫用您的 Lambda 函數。

在函數的執行角色中,針對 Amazon S3 設定信任政策以在角色執行您的函數時取得該角色。

如果您的函數使用 AWS 開發套件來管理 Amazon S3 資源,您就必須在執行角色中新增 Amazon S3 許可。

執行任務時,Amazon S3 會啟動多個函數執行個體以並行處理 Amazon S3 物件,直至達到函數的並行限制。Amazon S3 會限制執行個體的初始漸進測試,以避免較小任務造成過多成本。

如果 Lambda 函數傳回 TemporaryFailure 回應程式碼,Amazon S3 就會重試操作。

如需 Amazon S3 批次操作的詳細資訊,請參閱 Amazon S3 開發人員指南中的執行批次操作

如需如何在 Amazon S3 批次操作中使用 Lambda 函數的範例,請參閱 Amazon S3 開發人員指南中的從 Amazon S3 批次操作中叫用 Lambda 函數