Amazon S3 배치 이벤트로 Lambda 함수 간접 호출
Amazon S3 Batch Operations를 사용하여 대규모 Amazon S3 객체 집합에 대해 Lambda 함수를 호출할 수 있습니다. Amazon S3는 배치 작업의 진행 상황을 추적하고, 알림을 전송하며, 각 작업의 상태를 보여주는 완료 보고서를 저장합니다.
배치 작업을 실행하려면 Amazon S3 Batch Operations 작업을 생성합니다. 작업을 생성할 때 매니페스트(객체 목록)를 제공하고 해당 객체에 대해 수행할 작업을 구성합니다.
배치 작업이 시작되면 Amazon S3에서 매니페스트의 각 객체에 대해 Lambda 함수를 동기적으로 호출합니다. 이벤트 파라미터에는 버킷과 객체의 이름이 포함됩니다.
다음 예제에서는 Amazon S3가 amzn-s3-demo-bucket 버킷에 있는 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:::amzn-s3-demo-bucket" } ] }
Lambda 함수는 다음 예제에 나온 것과 같은 필드를 포함한 JSON 객체를 반환해야 합니다. 이벤트 파라미터에서 invocationId
및 taskId
를 복사할 수 있습니다. resultString
의 문자열을 반환할 수 있습니다. Amazon S3는 완료 보고서의 resultString
값을 저장합니다.
예 Amazon S3 배치 요청 응답
{ "invocationSchemaVersion": "1.0", "treatMissingKeysAs" : "PermanentFailure", "invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "results": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "resultCode": "Succeeded", "resultString": "[\"Alice\", \"Bob\"]" } ] }
Amazon S3 Batch Operations에서 Lambda 함수 호출
정규화되거나 정규화되지 않은 함수 ARN을 사용하여 Lambda 함수를 호출할 수 있습니다. 전체 배치 작업에 동일한 함수 버전을 사용하려면 작업을 생성할 때 FunctionARN
파라미터에 특정 함수 버전을 구성합니다. 별칭 또는 $LATEST 한정자를 구성하는 경우 작업 실행 중에 별칭 또는 $LATEST가 업데이트되면 배치 작업이 함수의 새 버전을 즉시 호출하기 시작합니다.
기존 Amazon S3 이벤트 기반 함수는 배치 작업에 재사용할 수 없습니다. 이는 Amazon S3 Batch Operations가 Lambda 함수에 다른 이벤트 파라미터를 전달하고 특정 JSON 구조의 반환 메시지를 예상하기 때문입니다.
Amazon S3 Batch Job에 대해 생성하는 리소스 기반 정책에서 Lambda 함수를 호출하는 작업에 대한 권한을 설정해야 합니다.
함수의 실행 역할에서 Amazon S3가 함수를 실행할 때 역할을 수임하기 위한 신뢰 정책을 설정합니다.
함수가 AWS SDK를 사용하여 Amazon S3 리소스를 관리하는 경우 실행 역할에 Amazon S3 권한을 추가해야 합니다.
작업이 실행될 때 Amazon S3는 여러 함수 인스턴스를 시작하여 Amazon S3 객체를 함수의 동시성 한도까지 병렬로 처리합니다. Amazon S3는 소규모 작업에 대한 과도한 비용을 막기 위해 인스턴스의 초기 증가량을 제한합니다.
Lambda 함수가 TemporaryFailure
응답 코드를 반환하면 Amazon S3는 작업을 다시 시도합니다.
Amazon S3 Batch Operations에 대한 자세한 내용은 Amazon S3 개발자 안내서의 배치 작업 수행을 참조하세요.
Amazon S3 Batch Operations에서 Lambda 함수를 사용하는 방법에 대한 예는 Amazon S3 개발자 안내서의 Amazon S3 Batch Operations에서 Lambda 함수 호출을 참조하세요.