

# Amazon S3 배치 이벤트로 Lambda 함수 간접 호출
<a name="services-s3-batch"></a>

Amazon S3 Batch Operations를 사용하여 대규모 Amazon S3 객체 집합에 대해 Lambda 함수를 간접 호출할 수 있습니다. Amazon S3는 배치 작업의 진행 상황을 추적하고, 알림을 전송하며, 각 작업의 상태를 보여주는 완료 보고서를 저장합니다.

배치 작업을 실행하려면 Amazon S3 [Batch Operations 작업](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-operations.html)을 생성합니다. 작업을 생성할 때 매니페스트(객체 목록)를 제공하고 해당 객체에 대해 수행할 작업을 구성합니다.

배치 작업이 시작되면 Amazon S3에서 매니페스트의 각 객체에 대해 Lambda 함수를 [동기적으로](invocation-sync.md) 간접 호출합니다. 이벤트 파라미터에는 버킷과 객체의 이름이 포함됩니다.

다음 예제에서는 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 Batch Operations에서 Lambda 함수 호출
<a name="invoking"></a>

정규화되거나 정규화되지 않은 함수 ARN을 사용하여 Lambda 함수를 간접 호출할 수 있습니다. 전체 배치 작업에 동일한 함수 버전을 사용하려면 작업을 생성할 때 `FunctionARN` 파라미터에 특정 함수 버전을 구성합니다. 별칭 또는 \$1LATEST 한정자를 구성하는 경우 작업 실행 중에 별칭 또는 \$1LATEST가 업데이트되면 배치 작업이 함수의 새 버전을 즉시 호출하기 시작합니다.

기존 Amazon S3 이벤트 기반 함수는 배치 작업에 재사용할 수 없습니다. 이는 Amazon S3 Batch Operations가 Lambda 함수에 다른 이벤트 파라미터를 전달하고 특정 JSON 구조의 반환 메시지를 예상하기 때문입니다.

Amazon S3 Batch Job에 대해 생성하는 [리소스 기반 정책](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 Batch Operations에 대한 자세한 내용은 *Amazon S3 개발자 안내서*의 [배치 작업 수행](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops.html)을 참조하세요.

Amazon S3 Batch Operations에서 Lambda 함수를 사용하는 방법에 대한 예는 *Amazon S3 개발자 안내서*의 [Amazon S3 Batch Operations에서 Lambda 함수 호출](https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-invoke-lambda.html)을 참조하세요.