

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

# 使用 Amazon S3 批次事件調用 Lambda 函數
<a name="services-s3-batch"></a>

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

若要執行批次操作，您可以建立 Amazon S3 [批次操作任務](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-operations.html)。當您建立任務時，請提供資訊清單 (物件清單)，並設定要在這些物件上執行的動作。

當批次任務開始時，Amazon S3 會針對資訊清單中的每個物件[同步](invocation-sync.md)叫用 Lambda 函數。事件參數包括儲存貯體和物件的名稱。

下列範例顯示 Amazon S3 針對 **amzn-s3-demo-bucket** 儲存貯體中名稱為 **customerImage1.jpg** 的物件，傳送事件至 Lambda 函數。

**Example 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:::amzn-s3-demo-bucket"
        }
    ]  
}
```

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

**Example Amazon S3 批次請求回應**  

```
{
  "invocationSchemaVersion": "1.0",
  "treatMissingKeysAs" : "PermanentFailure",
  "invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo",
  "results": [
    {
      "taskId": "dGFza2lkZ29lc2hlcmUK",
      "resultCode": "Succeeded",
      "resultString": "[\"Alice\", \"Bob\"]"
    }
  ]
}
```

## 從 Amazon S3 批次操作叫用 Lambda 函數
<a name="invoking"></a>

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

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

在您針對 Amazon S3 批次任務建立的[資源型政策](access-control-resource-based.md)中，請確認您已針對任務設定權限以叫用您的 Lambda 函數。

在函數的[執行角色](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-iam-role-policies.html)中，針對 Amazon S3 設定信任政策以在角色執行您的函數時取得該角色。

如果您的函數使用 AWS SDK 來管理 Amazon S3 資源，您需要在執行角色中新增 Amazon S3 許可。

執行任務時，Amazon S3 會啟動多個函數執行個體以並行處理 Amazon S3 物件，直至達到函數的[並行限制](lambda-concurrency.md)。Amazon S3 會限制執行個體的初始漸進測試，以避免較小任務造成過多成本。

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

如需 Amazon S3 批次操作的詳細資訊，請參閱 *Amazon S3 開發人員指南*中的[執行批次操作](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops.html)。

如需如何在 Amazon S3 批次操作中使用 Lambda 函數的範例，請參閱 *Amazon S3 開發人員指南*中的[從 Amazon S3 批次操作中叫用 Lambda 函數](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-invoke-lambda.html)。