Kinesis Data Streams 트리거로 Lambda 함수를 호출할 수 없는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 8월 21일

Amazon Kinesis 데이터 스트림을 처리하기 위해 AWS Lambda와 Amazon Kinesis Data Streams를 이벤트 소스로 통합했습니다. 그러나 Lambda 함수가 호출되지 않습니다. 왜 이런 현상이 발생하며, 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Lambda 함수 오류는 종종 다음과 같은 원인으로 발생합니다.

  • Lambda 함수의 실행 역할에 충분한 권한이 없습니다.
  • Kinesis 데이터 스트림으로 수신되는 데이터가 없습니다.
  • Kinesis 데이터 스트림, Lambda 함수 또는 Lambda 실행 역할이 재생성되면서 비활성 이벤트 소스 매핑이 발생했습니다.
  • 실행 한도를 초과하는 Lambda 함수로 인해 Lambda 함수에 제한 시간 오류가 발생했습니다.
  • Lambda가 동시 실행 제한을 위반합니다. Lambda의 제한 위반에 대한 자세한 내용은 AWS Lambda 제한을 참조하십시오.

Lambda 함수 오류가 있는 경우 함수가 호출되지 않으며 함수에서 배치의 레코드도 처리되지 않습니다. 오류가 발생하면 처리가 성공하거나 배치가 만료될 때까지 Lambda가 레코드 배치를 재시도할 수 있습니다. Lambda 함수 및 Kinesis 오류에 대한 자세한 내용은 Amazon Kinesis에서 AWS Lambda 사용을 참조하십시오.

​해결 방법

Lambda 함수가 호출되지 않는 이유를 확인하려면 다음 단계를 수행합니다.

1.    Lambda 함수에 대한 합계로 설정된 통계를 사용하여 Amazon CloudWatch에서 Invocations 지표를 확인합니다. Invocations 지표는 Lambda 함수가 호출되었는지 여부를 확인하는 데 도움이 될 수 있습니다.

2.    IteratorAge 지표를 확인하여 배치의 마지막 레코드에 대한 경과 시간 또는 처리가 완료된 시간을 확인합니다. Lambda 소비자가 를 호출할 수 없는 경우 스트림의 반복기 수명이 증가합니다.

3.    Lambda 함수의 .../aws/lambda/function_name 형식으로 이름이 지정되는 CloudWatch Logs를 확인합니다. 함수 오류와 대조하여 해당하는 항목을 찾습니다. 예를 들어 Lambda의 실행 역할 권한으로 인해 오류가 발생하면 AWS Identity and Access Management(IAM) 역할에 적절한 액세스 권한을 부여하도록 정책을 수정합니다.

4.    IAM 실행 역할에 CloudWatch에 액세스할 수 있는 적절한 권한이 있는지 확인합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

5.    (선택 사항) 권한 오류가 발생하면 Kinesis Data Streams에 대한 액세스 권한을 부여하도록 Lambda 함수 정책을 업데이트합니다.

{
    "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 실행 함수 제한 시간과 관련된 경우 더 빠른 처리가 가능하도록 제한 시간 값을 늘립니다.
  • Kinesis 데이터 스트림이 AWS Key Management Service(AWS KMS)를 사용하여 암호화된 경우 소비자와 생산자에게 적절한 액세스 권한이 있어야 합니다. Kinesis 데이터 스트림에서 암호화 및 복호화에 사용되는 AWS KMS 키에 액세스할 수 있어야 합니다. Kinesis 데이터 스트림에서 데이터를 성공적으로 읽으려면 Lambda 함수의 실행 역할에도 KMS 키에 대한 읽기 액세스 권한이 있어야 합니다.
  • 내부 Lambda 함수 오류로 인해 오류가 발생한 경우 이 오류는 스트림 처리와 관련된 문제를 나타냅니다. 제어 플레인 API 조절을 방지하려면 각 스트림을 4~5개의 이벤트 소스 매핑으로 제한합니다.
  • 내부 Lambda 함수 오류로 인해 오류가 발생한 경우 이는 스트림 처리와 관련된 문제를 나타냅니다. 각 스트림을 4~5개의 이벤트 소스 매핑으로 제한하여 동일한 데이터 스트림에 너무 많은 이벤트 소스가 매핑되지 않도록 합니다. 동일한 스트림에 다수의 이벤트 소스가 매핑되면 Kinesis와 Amazon DynamoDB 제어 플레인 제한이 위반될 수 있습니다.
  • 연결 제한 시간 오류가 발생하는 경우 코드에서 API 호출 전후에 로깅 문을 추가합니다. 그러면 함수가 실패하기 시작하는 정확한 코드 줄을 식별할 수 있습니다.
  • 샤드가 느리거나 중지되는 경우 더 작은 배치 크기로 재시도하도록 이벤트 소스 매핑을 구성합니다. 또한 재시도 횟수를 제한하거나 이전 레코드를 폐기할 수도 있습니다.
  • CloudWatch 로그에 "memory used" 오류 메시지가 표시되면 Lambda 함수의 메모리를 늘립니다.
  • Lambda 함수의 최대 제한 시간을 초과한 경우 클라이언트 라이브러리 및 클라이언트 제한 시간을 수정합니다. Lambda 컨테이너의 남은 시간을 기준으로 제한 시간 세션을 수정하려면 context.GetRemainingTimeInMillis 함수를 사용합니다. context.GetRemainingTimeInMillis 함수는 시간이 초과되기 전에 Lambda 컨테이너의 남은 시간을 반환합니다.
  • Lambda 함수의 코드에서 오류가 수신되는 경우 Lambda 함수가 동일한 레코드를 시도하는 동안 멈출 수 있습니다. try-catch 블록을 사용하여 실패한 데이터를 파악한 다음 Amazon SQS 대기열 또는 Amazon SNS 주제를 사용하여 기록합니다. 또한 처리 로직을 사용하여 Lambda 트리거를 Amazon SQS 대기열에 추가하여 실패한 요청을 개별적으로 재시도할 수 있습니다.
  • Lambda 함수를 수동으로 호출하도록 Amazon SQS DLQ(배달 못한 편지 대기열)를 설정합니다. Lambda 함수를 생성하거나 업데이트할 때 DeadLetterConfig 속성을 구성합니다. Amazon Simple Queue Service(Amazon SQS) 대기열 또는 Amazon Simple Notification Service(Amazon SNS) 주제를 DLQ의 TargetArn으로 제공할 수 있습니다. 그러면 Lambda가 표준 재시도 정책이 소진된 후 Lambda 함수를 지정된 엔드포인트로 호출하는 이벤트 객체를 작성합니다.
  • AWS Lambda와 AWS X-Ray를 사용하여 Lambda 애플리케이션의 성능 문제를 탐지, 분석 및 최적화합니다. AWS X-Ray는 Lambda 서비스로부터 메타데이터를 수집하고 Lambda 애플리케이션의 성능에 영향을 미치는 문제를 설명하는 그래프를 생성합니다. 예를 들어 실행 시간이 오래 걸리는 호출이 있는 경우 AWS X-Ray를 사용하여 문제를 확인할 수 있습니다.

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?