AWS Lambda 이벤트 소스 매핑 - AWS Lambda

AWS Lambda 이벤트 소스 매핑

이벤트 소스 매핑은 이벤트 소스에서 읽어 AWS Lambda 함수를 호출하는 Lambda 리소스입니다. 이벤트 소스 매핑을 사용해 Lambda 함수를 직접 호출하지 않는 서비스의 스트림 또는 대기열에서 항목을 처리할 수 있습니다. Lambda는 다음 서비스에 이벤트 소스 매핑을 제공합니다.

Lambda이 이벤트를 읽는 서비스

이벤트 소스 매핑은 함수의 실행 역할에 있는 권한을 사용해 이벤트 소스의 항목을 읽고 관리합니다. 권한, 이벤트 구조, 설정 및 폴링 동작은 이벤트 소스에 따라 달라집니다. 자세한 내용은 이벤트 소스로 사용하는 서비스에 대해 링크된 주제를 참조하십시오.

AWS CLI 또는 AWS SDK로 이벤트 소스 매핑을 관리하려면 다음 API 작업을 사용합니다.

다음 예제는 AWS CLI를 사용하여 Amazon 리소스 이름(ARN)으로 지정된 DynamoDB 스트림에 my-function이라는 함수를 매핑합니다. 배치 크기는 500입니다.

$ aws lambda create-event-source-mapping --function-name my-function --batch-size 500 --starting-position LATEST \ --event-source-arn arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525 { "UUID": "14e0db71-5d35-4eb5-b481-8945cf9d10c2", "BatchSize": 500, "MaximumBatchingWindowInSeconds": 0, "ParallelizationFactor": 1, "EventSourceArn": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "LastModified": 1560209851.963, "LastProcessingResult": "No records processed", "State": "Creating", "StateTransitionReason": "User action", "DestinationConfig": {}, "MaximumRecordAgeInSeconds": 604800, "BisectBatchOnFunctionError": false, "MaximumRetryAttempts": 10000 }

이벤트 소스 매핑은 스트림 또는 대기열의 항목을 배치로 읽습니다. 이벤트 소스 매핑은 함수가 수신하는 이벤트에 여러 항목을 포함시킵니다. 이벤트 소스 매핑이 함수에 전달하는 배치의 크기를 최대값(서비스에 따라 다름)까지 구성할 수 있습니다. 이벤트 내 항목의 수는 사용 가능한 항목이 충분하지 않거나 배치가 너무 커서 한 개의 이벤트로 전송할 수 없어 분할해야 하는 경우 배치 크기보다 작을 수 있습니다.

다음 예제에서는 Kinesis 스트림에서 읽는 이벤트 소스 매핑을 보여줍니다. 이벤트 배치가 모든 처리 시도에 실패하면 이벤트 소스 매핑은 배치에 관한 세부 정보를 SQS 대기열로 보냅니다.


      이벤트 소스 매핑은 Kinesis 스트림에서 읽기를 수행합니다. 레코드를 함수로 보내기 전에 로컬로 대기열에 저장합니다.

이벤트 배치는 Lambda가 함수에 보내는 이벤트입니다. 이것은 이벤트 소스 매핑이 스트림 또는 대기열에서 읽는 항목에서 컴파일된 레코드 또는 메시지의 배치입니다. 배치 크기 및 기타 설정은 이벤트 배치에만 적용됩니다.

스트림의 경우 이벤트 소스 매핑은 스트림에 있는 각 샤드에 대해 반복기를 생성하고 각 샤드에 있는 항목을 순서대로 처리합니다. 이벤트 소스 매핑이 스트림에 표시되는 새 항목만 읽도록 또는 더 오래된 항목으로 시작하도록 구성할 수 있습니다. 처리된 항목은 스트림에서 제거되지 않으므로 다른 함수 또는 소비자가 처리할 수 있습니다.

기본적으로 함수가 오류를 반환하는 경우 함수가 성공할 때까지 또는 배치에 있는 항목이 만료될 때까지 전체 배치가 다시 처리됩니다. 순서대로 처리되도록 하기 위해 영향을 받은 샤드에 대한 처리를 오류가 해결될 때까지 일시 중지합니다. 이전 이벤트를 무시하거나, 재시도 횟수를 제한하거나, 여러 배치를 병렬로 처리하도록 이벤트 소스 매핑을 구성할 수 있습니다. 여러 배치를 병렬로 처리하는 경우에도 각 파티션 키에 대해 순차적 처리가 보장되지만 동일한 샤드의 여러 파티션 키가 동시에 처리됩니다.

이벤트 배치를 무시할 때 호출 레코드를 다른 서비스로 보내도록 이벤트 소스 매핑을 구성할 수도 있습니다. Lambda에서는 이벤트 소스 매핑에 대해 다음 대상을 지원합니다.

  • Amazon SQS – SQS 대기열입니다.

  • Amazon SNS – SNS 주제입니다.

호출 레코드에는 JSON 형식의 실패한 이벤트 배치에 관한 세부 정보가 포함되어 있습니다.

다음 예제에서는 Kinesis 스트림의 호출 레코드를 보여 줍니다.

예 호출 레코드

{ "requestContext": { "requestId": "c9b8fa9f-5a7f-xmpl-af9c-0c604cde93a5", "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myfunction", "condition": "RetryAttemptsExhausted", "approximateInvokeCount": 1 }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "version": "1.0", "timestamp": "2019-11-14T00:38:06.021Z", "KinesisBatchInfo": { "shardId": "shardId-000000000001", "startSequenceNumber": "49601189658422359378836298521827638475320189012309704722", "endSequenceNumber": "49601189658422359378836298522902373528957594348623495186", "approximateArrivalOfFirstRecord": "2019-11-14T00:38:04.835Z", "approximateArrivalOfLastRecord": "2019-11-14T00:38:05.580Z", "batchSize": 500, "streamArn": "arn:aws:kinesis:us-east-2:123456789012:stream/mystream" } }

Lambda는 FIFO(선입선출) 대기열에 대한 순차적 처리를 지원하므로 활성 메시지 그룹의 수까지 확장할 수 있습니다. 표준 대기열의 경우 항목이 반드시 순서대로 처리되지는 않습니다. Lambda는 가능한 한 빨리 표준 대기열을 처리하도록 확장됩니다. 오류가 발생하면 실패한 배치는 개별 항목으로 대기열로 반환되므로 원래 배치와 다른 그룹에서 처리될 수 있습니다. 때로 이벤트 소스 매핑은 함수 오류가 발생하지 않았다 하더라도 대기열에서 동일한 항목을 두 번 수신할 수 있습니다. Lambda는 성공적으로 처리된 이후에 대기열에서 항목을 삭제합니다. 항목을 처리할 수 없는 경우 항목을 배달 못한 편지 대기열로 보내도록 소스 대기열을 구성할 수 있습니다.

Lambda 함수를 직접 호출하는 서비스에 대한 자세한 내용은 다른 서비스와 함께 AWS Lambda 사용를 참조하십시오.