Amazon Kinesis의 향상된 팬아웃(EFO) 모드를 통해 AWS Lambda 이벤트 소스 매핑(ESM)을 호출하면 GetRecords에 대한 지표가 표시됩니다.
간략한 설명
표준 Kinesis 데이터 스트림의 경우 Lambda는 각 샤드에 대해 1초에 한 번의 속도로 레코드에 대해 스트림의 샤드를 폴링합니다. Kinesis EFO의 경우 Lambda는 HTTP/2 연결을 사용하여 Kinesis에서 푸시된 레코드를 수신합니다. 레코드를 사용할 수 있게 되면 Lambda는 함수를 호출하고 결과를 기다립니다.
해결 방법
이 오류를 해결하려면 다음 작업을 수행하십시오.
권한 확인
Lambda 함수를 생성하고 EFO 소비자와 함께 Kinesis 활성화를 설정하려면 다음 권한이 필요합니다.
kinesis:GetRecords
kinesis:GetShardIterator
이러한 권한은 표준 및 EFO 소비자를 지원하는 AWSLambdaKinesisExecutionRole 관리형 정책에 포함되어 있습니다. 실행 역할에 위 권한이 없는 경우 다음 오류가 표시됩니다. "An Error occurred when creating the trigger: Cannot access event source <Kinesis stream ARN>."
AWS Identity and Access Management(IAM) 역할에 다음과 같은 권한이 있는지 확인하십시오. 스트림에 대한 DescribeStreamSummary, ListShards, GetShardIterator 및 GetRecords 작업과 소비자에 대한 SubscribeToShard.
이벤트 소스 매핑 확인
Kinesis EFO 스트림 소비자로 Lambda 이벤트 소스 매핑을 구성한 경우 Lambda 함수가 지정된 Kinesis 스트림의 메시지를 처리할 수 있습니다. Kinesis GetRecords Amazon CloudWatch 지표는 성공적인 Lambda 호출에 대해서는 제공되지 않습니다. 이는 Lambda ESM이 푸시 기반의 향상된 팬아웃 소비자를 사용하기 때문에 예상되는 동작입니다.
표시된 CloudWatch 지표와 그 이유를 확인
Lambda 호출이 실패하면 Lambda 서비스는 구성된 최대 재시도 횟수를 기준으로 동일한 배치를 여러 번 처리하려고 시도합니다. 이러한 재시도 중에 GetRecords API 호출에 대한 지표가 표시됩니다. 이는 Lambda 서비스가 실패한 Lambda 호출 시도에 대해 샤드에서 레코드를 폴링하기 때문입니다. 레코드를 폴링하는 것은 관련된 지표 데이터 포인트를 생성하는 GetRecords API 호출입니다.
관련 정보
Amazon Kinesis Data Streams 차원 및 지표