내용으로 건너뛰기

Kinesis Data Streams 트리거가 Lambda 함수를 호출하지 않는 이유는 무엇입니까?

4분 분량
0

Amazon Kinesis Data Streams을 처리하기 위해 이벤트 소스로 AWS Lambda를 Amazon Kinesis 데이터 스트림과 통합했지만 함수가 호출되지 않습니다.

간략한 설명

Lambda 함수 오류가 발생할 수 있는 이유는 다음과 같습니다.

  • Lambda 함수의 실행 역할에 권한이 충분하지 않습니다.
  • Kinesis 데이터 스트림에 대한 인바운드 데이터가 없습니다.
  • Kinesis 데이터 스트림, Lambda 함수 또는 Lambda 실행 역할을 다시 만들어서 비활성 이벤트 소스 매핑이 발생했습니다.
  • 최대 실행 시간을 초과하는 Lambda 함수가 있고, 그로 인해 Lambda 함수에서 시간 초과 오류가 발생합니다.
  • Lambda가 동시 실행 할당량을 위반합니다.
  • 이벤트 소스 매핑이 함수를 호출하려 시도하지만, 스로틀링이 발생합니다.

Lambda 함수 오류가 있으면 Lambda가 함수를 호출하지 않습니다. 또한 이 함수는 배치의 레코드도 처리하지 않습니다. 오류가 발생하면 Lambda는 프로세스가 성공하거나 배치가 만료될 때까지 레코드 배치를 다시 시도할 수 있습니다. 자세한 내용은 Using Lambda to process records from Amazon Kinesis Data Streams(Lambda를 사용해 Amazon Kinesis Data Streams의 레코드 처리)를 참조하십시오.

해결 방법

Lambda 함수 문제 해결

Lambda 함수가 호출되지 않는 이유를 알아보려면 다음 단계를 완료하십시오.

  1. Amazon CloudWatch에서 Lambda 함수에 대하여 **Sum(합계)**으로 설정된 통계가 있는 Invocations metric(호출 지표)을 확인합니다. Invocations(호출) 지표를 보면 Lambda가 함수를 호출하는지 확인할 수 있습니다.

  2. IteratorAge 지표를 확인하여 배치의 마지막 레코드가 얼마나 오래되었는지 또는 프로세스가 언제 완료되었는지 알아봅니다. Lambda 소비자가 호출할 수 없으면 스트림의 반복기 수명이 늘어납니다. 자세한 내용은 성능 지표를 참조하십시오.

  3. Lambda 함수의 CloudWatch 로그를 확인합니다. 이 로그는 이름으로 .../aws/lambda/function_name 형식을 사용합니다. 함수 오류에 해당하는 항목을 찾습니다. 예를 들어 Lambda의 AWS Identity and Access Management(IAM) 역할 권한으로 인해 오류가 발생하는 경우, IAM 역할 정책을 수정합니다.

  4. IAM 역할에 CloudWatch에 액세스하는 데 적절한 권한이 있는지 확인합니다. IAM 역할 권한을 부여하려면 다음 예시와 유사한 정책을 사용하십시오.

    
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "*"
        }
      ]
    }
  5. (선택 사항) 권한 오류가 발생하는 경우, Lambda 함수 정책이 Kinesis Data Streams 및 CloudWatch Logs에 대한 권한을 모두 부여하도록 업데이트합니다. 다음 예시와 유사한 정책을 사용하십시오.

    
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "kinesis:DescribeStream",
            "kinesis:DescribeStreamSummary",
            "kinesis:GetRecords",
            "kinesis:GetShardIterator",
            "kinesis:ListShards",
            "kinesis:ListStreams",
            "kinesis:SubscribeToShard",
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "*"
        }
      ]
    }

참고: AWSLambdaKinesisExecutionRole 정책에 앞의 권한이 포함되어 있습니다.

추가 문제 해결

Lambda 실행 함수 시간 제한

오류가 Lambda 실행 함수 시간 제한과 관련된 경우, 시간 제한 값을 늘려 더 빠른 처리 속도를 감당하게 합니다.

AWS KMS 암호화된 데이터 스트림

AWS Key Management Service(AWS KMS)를 사용하여 Kinesis 데이터 스트림을 암호화하는 경우 소비자와 생산자에게 적절한 액세스 권한이 있어야 합니다. Kinesis 데이터 스트림에 암호화 및 암호 해독에 사용하는 AWS KMS 키에 대한 액세스 권한이 있어야 합니다. 또한 Lambda 함수의 실행 역할은 Kinesis 데이터 스트림에서 데이터를 성공적으로 읽으려면 KMS 키에 대한 읽기 액세스 권한이 있어야 합니다.

내부 Lambda 함수 오류

내부 Lambda 함수로 인해 오류가 발생하는 경우, 스트림 처리에 문제가 있는 것입니다. 컨트롤 플레인 API 스로틀링을 피하려면 각 스트림을 4~5개의 이벤트 소스 매핑으로 제한합니다. 이렇게 제한하면 동일한 데이터 스트림으로 이벤트 소스 매핑을 너무 많이 만들지 않게 방지됩니다. 동일한 스트림으로 이벤트 소스 매핑을 여러 개 만들면 Amazon Kinesis 및 Amazon DynamoDB 컨트롤 플레인 한도를 어길 수 있습니다.

연결 시간 초과 오류

연결 시간 초과 오류가 발생하면 먼저 코드에서 API 직접 호출 전후에 로깅 문을 추가합니다. 그런 다음 함수가 실패하기 시작하는 코드 줄이 정확히 어디인지 알아냅니다.

느리거나 지연된 샤드

느리거나 지연된 샤드가 있는 경우, 더 작은 배치 크기로 재시도하도록 이벤트 소스 매핑을 구성합니다. 재시도 횟수를 제한하거나 오래된 레코드를 삭제할 수도 있습니다.

‘Memory used’ 오류

CloudWatch 로그에 ‘memory used’ 오류 메시지가 표시되는 경우, Lambda 함수의 메모리를 늘립니다.

최대 시간 제한 초과됨

Lambda 함수의 최대 시간 제한을 초과한 경우, 클라이언트 라이브러리 및 클라이언트 시간 제한을 수정합니다. Lambda 컨테이너의 남은 시간을 기준으로 시간 제한 세션을 수정하려면 context.GetRemainingTimeInMillis 함수를 사용합니다. context.GetRemainingTimeInMillis 함수는 시간이 초과될 때까지 Lamdba 컨테이너에 남은 시간을 반환합니다.

Lambda 함수 코드 오류

Lambda 함수의 코드에서 오류가 발생하면 Lambda 함수가 동일한 레코드를 시도하다가 멈출 수 있습니다. try-catch 블록을 사용해 실패한 데이터를 포착합니다. 그런 다음, Amazon Simple Queue Service(Amazon SQS) 대기열 또는 Amazon Simple Notification Service(Amazon SNS) 주제를 사용하여 기록합니다. Lambda 트리거와 처리 로직을 함께 Amazon SQS 대기열에 추가해 실패한 요청을 별도로 다시 시도할 수도 있습니다.

SQS DLQ

Lambda 함수를 수동으로 호출하기 위해 Amazon SQS Dead Letter Queue(DLQ)를 설정합니다. Lambda 함수를 만들거나 업데이트할 때 DeadLetterConfig 속성을 구성합니다. Amazon SQS 대기열 또는 Amazon SNS 주제를 DLQ의 TargetArn으로 입력할 수 있습니다. 그러면 Lambda가 표준 재시도 정책이 소진된 이후 이벤트 객체를 작성하고 지정된 엔드포인트에 대하여 Lambda 함수를 호출합니다.

Lambda를 X-Ray와 함께 사용

Lambda와 AWS X-Ray를 사용하여 Lambda 애플리케이션의 성능 문제를 탐지, 분석 및 최적화합니다. X-Ray는 Lambda 서비스에서 메타데이터를 수집하고 Lambda 애플리케이션의 성능에 영향을 미치는 문제를 나타내는 그래프를 생성합니다. 예를 들어, 실행하는 데 시간이 오래 걸리는 호출이 있는 경우 AWS X-Ray를 사용하여 문제를 확인할 수 있습니다

AWS 공식업데이트됨 6달 전