Lambda Kinesis Firehose 통합 문제를 해결하려면 어떻게 해야 합니까?

4분 분량
0

AWS Lambda를 Amazon Kinesis Data Firehose와 통합하여 들어오는 소스 데이터를 변환하고 변환된 데이터를 목적지로 전송했습니다. 하지만 Lambda 함수가 호출되지 않았거나 실패했습니다.

간략한 설명

Amazon Kinesis Data Firehose로 구성된 Lambda 함수는 다음과 같은 이유로 실패할 수 있습니다.

  • 부족한 AWS 자격 증명 및 액세스 관리(IAM) 권한
  • 허용된 최대 제한 시간을 초과하는 Lambda 지속 시간
  • 람다 제한
  • 데이터 변환 오류
  • 람다 함수 오류

참고:호출 한도에 도달하여 Lambda 함수 호출에 네트워크 시간이 초과되거나 실패하는 경우 Kinesis Data Firehose는 호출을 세 번 재시도합니다. 자세한 내용은 데이터 변환 실패 처리를 참조하십시오.

해상도

아직 활성화하지 않았다면 Kinesis Data Firehose에 대한 Amazon CloudWatch 로깅을 활성화하십시오. 데이터 변환 또는 데이터 전송을 위한 Lambda 호출이 실패할 때 특정 오류 로그를 볼 수 있습니다. 전송 스트림을 생성할 때 Kinesis Data Firehose 오류 로깅을 켤 수 있습니다. 로그 그룹 이름의 형식은**/aws/kinesisfirehose/delivery-stream-name**입니다. 전송 스트림 이름은 전송 스트림의 이름입니다.

Lambda 함수가 실패한 이유를 확인하려면 Amazon CloudWatch Logs 그룹에서**/aws/lambda/lambda-function-name**을 확인하십시오. 실패한 데이터 변환 레코드는 처리 실패 폴더의 백업으로 Amazon Simple Storage Service(Amazon S3) 버킷에 전송됩니다. S3 버킷의 레코드에는 호출 실패에 대한 오류 메시지도 포함됩니다. Lambda 호출 실패 해결에 대한 자세한 내용은 데이터 변환 실패 처리를 참조하십시오.

IAM 권한이 충분하지 않음

“수임자 액세스 거부됨 - 액세스가 거부되었습니다. 제공된 IAM 역할에 대한 신뢰 정책에서 Kinesis Data Firehose가 역할을 맡을 수 있도록 허용하는지 확인하십시오.“

이 오류는 Amazon Kinesis Data Firehose IAM 역할이 “firehose.amazonaws.com”을 맡을 수 없을 때 발생합니다. IAM 신뢰 정책에 다음과 비슷한 “firehose.amazonaws.com”을 가정할 수 있는 권한이 있는지 확인하십시오.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "firehose.amazonaws.com"
      },
     "Action": "sts:AssumeRole"
    }
  ]
}

“호출 액세스 거부됨 - 액세스가 거부되었습니다. 액세스 정책이 Lambda 함수에 대한 액세스를 허용하는지 확인하십시오.“

이 오류는 Amazon Kinesis Data Firehose IAM 역할에 데이터 변환에 사용되는 Lambda 함수를 호출할 권한이 허용되지 않을 때 발생합니다. IAM 정책에서 Amazon Kinesis Data Firehose가 다음과 비슷한 Lambda 함수를 호출하도록 허용하는지 확인하십시오.

**참고:**이 예제의 리소스 ARN을 변수로 바꾸십시오.

{
  "Effect": "Allow",
  "Action": [
    "lambda:InvokeFunction",
    "lambda:GetFunctionConfiguration"
  ],
  "Resource": [
    "arn:aws:lambda:region:account-id:function:function-name:function-version"
  ]
}

허용된 최대 제한 시간을 초과하는 Lambda 지속 시간

“Firehose에서 AWS Lambda를 호출할 때 시간 초과 오류가 발생했습니다. 지원되는 최대 함수 타임아웃은 5분입니다.“

이 오류는 Lambda 함수를 완료하는 데 5분 이상 걸릴 때 발생합니다. Kinesis Data Firehose에서 Lambda 함수 시간 초과 오류를 해결하려면 데이터 변환 실패 처리를 참조하십시오.

람다 제한

“호출 제한 초과 - Lambda 동시 실행 제한을 초과했습니다. 동시 실행 한도를 늘리십시오.“

이 오류는 Lambda 동시 실행 제한을 초과할 때 발생합니다. CloudWatch 로그의 Lambda 동시성 지표를 검토하여 사용량을 결정하십시오. 동시 실행에 대한 증가를 요청하려면 할당량 증가 요청을 참조하십시오.

자세한 내용은Lambda 함수 조정“속도 초과” 및 429개의 “TooManyRequestException” 오류로 인한 Lambda 함수 스로틀링 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

데이터 변환 오류

“JSON 처리 예외 - Lambda 함수에서 반환된 레코드를 분석하는 중 오류가 발생했습니다. 반환된 레코드가 Kinesis Data Firehose에서 요구하는 상태 모델을 따르는지 확인하십시오.“

이 오류는 Lambda에서 반환한 변환된 레코드가 필요한 형식이 아닐 때 발생합니다. Lambda에서 반환된 모든 변환된 레코드에는RecordID,결과데이터 파라미터가 포함되어야 합니다. Lambda 함수 코드 및 CloudWatch 로그를 확인하여 이러한 레코드에 이러한 파라미터가 포함되어 있는지 확인합니다.

**참고:**레코드를 의도적으로 삭제하려면 값을 삭제됨으로 설정합니다.

자세한 내용은 데이터 변환 및 상태 모델을 참조하십시오.

“DuplicatedRecordID - 여러 레코드가 동일한 레코드 ID로 반환되었습니다. Lambda 함수가 각 레코드에 대해 고유한 레코드 ID를 반환하는지 확인하십시오.“

이 오류는 Lambda 함수에서 Kinesis Firehose로 반환한 여러 변환된 레코드의 레코드 ID가 동일한 경우 발생합니다. 레코드 ID는 함수 호출 중에 Kinesis Data Firehose에서 Lambda로 전달됩니다. Lambda 함수 코드와 CloudWatch 로그를 확인하여 각 레코드 ID가 고유한지 확인하십시오.

람다 함수 오류

“Lambda 함수가 성공적으로 호출되었지만 오류 결과를 반환했습니다.“

이 오류는 Amazon Kinesis Data Firehose가 Lambda 함수를 성공적으로 호출할 수 있었지만 오류로 인해 Lambda 함수 실행이 실패했을 때 발생합니다. 데이터 변환 CloudWatch 지표를 확인하여 Kinesis Data Firehose가 함수를 호출했는지 확인하십시오.

Kinesis Data Firehose에서 Lambda 함수를 호출하지 않은 경우 호출 시간을 확인하여 제한 시간 매개 변수를 초과했는지 확인하십시오. Lambda 함수를 완료하려면 더 큰 타임아웃 값이 필요하거나 더 많은 메모리가 필요할 수 있습니다. 호출 메트릭에 대한 자세한 내용은 호출 메트릭을 참조하십시오.

“허용되는 최대 페이로드 크기를 초과했습니다.” 또는 LAMBDA_RUNTIME 핸들러 성공 응답을 게시하지 못했습니다.” HTTP 응답 코드: 413.“

Amazon Kinesis Data Firehose는 Lambda 함수를 동기적으로 호출하며 호출 페이로드 제한은 각 요청 및 응답에 대해 6MB입니다. Lambda 페이로드 한도는 엄격한 제한이며 늘릴 수 없습니다. 각 요청 및 응답의 버퍼 크기가 6MB를 초과하지 않는지 확인하십시오.

자세한 내용은 Lambda 할당량을 참조하십시오.

관련 정보

Kinesis Data Firehose에서 데이터 전송 오류가 발생하는 이유는 무엇입니까?

AWS 공식
AWS 공식업데이트됨 2년 전