Lambda 함수를 출력으로 사용 - Amazon Kinesis Data Analytics for SQL 애플리케이션 개발자 안내서

새 프로젝트의 경우 Kinesis Data Analytics for SQL 애플리케이션보다 새로운 Managed Service for Apache Flink Studio를 사용하는 것이 좋습니다. Managed Service for Apache Flink Studio는 사용 편의성과 고급 분석 기능을 결합하여 정교한 스트림 처리 애플리케이션을 몇 분 만에 구축할 수 있도록 합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Lambda 함수를 출력으로 사용

대상으로 사용하면 SQL 결과를 최종 AWS Lambda 목적지로 보내기 전에 보다 쉽게 사후 처리를 수행할 수 있습니다. 일반적인 사후 처리 작업에는 다음이 포함됩니다.

  • 단일 레코드에 여러 행 집계

  • 현재 결과와 과거 결과를 결합하여 늦게 도착하는 데이터 처리

  • 정보의 유형에 따라 서로 다른 대상으로 전송

  • 레코드 형식 변환(예: Protobuf로 변환)

  • 문자열 조작 또는 변환

  • 분석 처리 후 데이터 강화

  • 지리 공간 사용 사례에 대한 맞춤 처리

  • 데이터 암호화

Lambda 함수는 다음을 비롯한 다양한 AWS 서비스 및 기타 대상으로 분석 정보를 전달할 수 있습니다.

Lambda 애플리케이션 생성에 대한 자세한 설명은 AWS Lambda로 시작하기 섹션을 참조하십시오.

출력 권한으로서 Lambda

Lambda를 출력으로 사용하려면 애플리케이션의 Lambda 출력 IAM 역할에 다음과 같은 권한 정책이 필요합니다:

{ "Sid": "UseLambdaFunction", "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": "FunctionARN" }

출력 지표로서의 Lambda

CloudWatch Amazon을 사용하여 전송된 바이트 수, 성공 및 실패 등을 모니터링합니다. Lambda를 출력으로 사용하여 Kinesis Data Analytics에서 내보내는 지표에 대한 자세한 내용은 Amazon Kinesis 애널리틱스 CloudWatch 지표를 참조하십시오.

출력 이벤트 입력 데이터 모델 및 레코드 응답 모델로서 Lambda

Kinesis Data Analytics 출력 레코드를 전송하려면 Lambda 함수가 필수 이벤트 입력 데이터 및 레코드 응답 모델을 준수해야 합니다.

이벤트 입력 데이터 모델

Kinesis Data Analytics는 다음 요청 모델을 사용하여 애플리케이션의 출력 레코드를 출력 함수인 Lambda로 계속 전송합니다. 함수 내에서 목록을 반복하고 비즈니스 로직을 적용하여 출력 요구 사항(예: 최종 대상으로 전송하기 전에 데이터 변환)을 충족합니다.

필드 설명
invocationId Lambda 간접 호출 ID(임의의 GUID)
applicationArn Kinesis Data Analytics 애플리케이션 Amazon 리소스 이름(ARN).
레코드
필드 설명
recordId 레코드 ID(임의 GUID)
lambdaDeliveryRecordMetadata
필드 설명
retryHint 전송 재시도 횟수
data Base64 인코딩된 출력 레코드 페이로드
참고

retryHint는 전송이 실패할 때마다 증가하는 값입니다. 이 값은 영구적으로 유지되지 않으며 애플리케이션이 중단되면 재설정됩니다.

레코드 응답 모델

출력 함수인 Lambda로 전송된 각 레코드(레코드 ID 포함)는 Ok 또는 DeliveryFailed로 승인되어야 하며 다음 파라미터를 포함해야 합니다. 그렇지 않으면 Kinesis Data Analytics가 이를 전송 실패로 처리합니다.

레코드
필드 설명
recordId 레코드 ID는 간접 호출 중에 Kinesis Data Analytics에서 Lambda로 전달됩니다. 원래 레코드의 ID와 승인된 레코드의 ID 간 불일치는 전송 실패로 처리됩니다.
result 레코드의 전송 상태입니다. 유효한 값은 다음과 같습니다.
  • Ok: 레코드가 성공적으로 변환되고 최종 목적지로 전송되었습니다. Kinesis Data Analytics는 SQL 처리를 위해 레코드를 수집합니다.

  • DeliveryFailed: Lambda가 출력 함수로 레코드를 최종 목적지로 성공적으로 전달하지 못했습니다. Kinesis Data Analytics는 전송 실패 레코드를 Lambda에 출력 함수로 전송하는 작업을 계속 재시도합니다.

Lambda 출력 호출 빈도

Kinesis Data Analytics 애플리케이션은 출력 레코드를 버퍼링하고 AWS Lambda 목적지 함수를 빈번하게 간접 호출합니다.

  • 레코드가 데이터 분석 애플리케이션 내의 대상 인애플리케이션 스트림에 텀블링 윈도우로 전송되는 경우 텀블링 윈도우 트리거별로 대상 함수가 호출됩니다 AWS Lambda . 예를 들어 60초 텀블링 윈도우가 레코드를 목적지 애플리케이션 내 스트림으로 방출하는 데 사용되면 Lambda 함수가 60초에 한 번씩 간접 호출됩니다.

  • 레코드가 애플리케이션에서 연속 쿼리 또는 슬라이딩 윈도우로서 대상 애플리케이션 내 스트림으로 방출된 경우 약 1초에 한 번씩 Lambda 목적지 함수가 간접 호출됩니다.

참고

Lambda 함수 당 간접 호출 요청 페이로드 크기 한도가 적용됩니다. 이러한 제한을 초과하면 출력 레코드가 분할되어 여러 Lambda 함수 호출로 전송됩니다.

출력으로 사용할 Lambda 함수 추가

다음 절차는 Lambda 함수를 Kinesis Data Analytics 애플리케이션의 출력으로 추가하는 방법을 보여 줍니다.

  1. AWS Management Console 로그인하고 https://console.aws.amazon.com/kinesisanalytics 에서 Apache Flink용 관리형 서비스 콘솔을 엽니다.

  2. 목록에서 애플리케이션을 선택한 다음 [Application details]를 선택합니다.

  3. [Destination] 섹션에서 [Connect new destination]을 선택합니다.

  4. [Destination] 항목에서 [AWS Lambda function]을 선택합니다.

  5. 레코드를 AWS Lambda에 전송 섹션에서 기존 Lambda 함수 및 버전을 선택하거나, 또는 새로 만들기를 선택합니다.

  6. Lambda 함수를 새로 생성하는 경우에는 다음을 수행합니다:

    1. 제공된 템플릿 중 하나를 선택합니다. 자세한 설명은 애플리케이션 목적지용 Lambda 함수 생성 섹션을 참조하세요.

    2. 새 브라우저 탭에서 함수 생성 페이지가 열립니다. 명칭 상자에서 함수에 의미 있는 명칭(예: myLambdaFunction)을 지정합니다.

    3. 애플리케이션의 사후 처리 기능으로 템플릿을 업데이트합니다. Lambda 함수 생성에 대한 자세한 설명은 AWS Lambda 개발자 가이드시작하기를 참조하세요.

    4. Kinesis Data Analytics 콘솔의 Lambda 함수 목록에서, 방금 생성한 Lambda 함수를 선택합니다. Lambda 함수 버전의 경우 $LATEST를 선택합니다.

  7. [In-application stream] 섹션에서 [Choose an existing in-application stream]을 선택합니다. [In-application stream name]에서 애플리케이션의 출력 스트림을 선택합니다. 선택한 출력 스트림의 결과는 Lambda 출력 함수로 전송됩니다.

  8. 양식의 나머지 부분은 기본값으로 두고 [Save and continue]를 선택합니다.

이제 애플리케이션에서 애플리케이션 내 스트림의 레코드를 Lambda 함수로 전송합니다. Amazon CloudWatch 콘솔에서 기본 템플릿의 결과를 확인할 수 있습니다. Lambda 함수에 전송되는 레코드 수를 보려면 AWS/KinesisAnalytics/LambdaDelivery.OkRecords 지표를 모니터링하십시오.

일반적인 Lambda 출력 실패

다음은 Lambda 함수로 전송할 수 없는 일반적인 이유입니다.

  • Lambda 함수에 전송되는 배치 내의 일부 레코드(레코드 ID 포함)가 Kinesis Data Analytics 서비스에 반환 되지는 않습니다.

  • 응답에 레코드 ID 또는 상태 필드가 없습니다.

  • Lambda 함수 제한 시간이 Lambda 함수 내의 비즈니스 로직을 수행하는 데 충분하지 않습니다.

  • Lambda 함수 내의 비즈니스 로직은 모든 오류를 잡아내지 못하므로 처리되지 않은 예외로 인해 시간 초과 및 백 프레셔(back pressure)가 발생합니다. 이를 "독약" 메시지라고 하기도 합니다.

데이터 전송에 실패한 경우 Kinesis Data Analytics는 동일한 레코드 세트에 대해 Lambda 간접 호출을 성공할 때까지 계속 재시도합니다. 실패에 대한 통찰력을 얻으려면 다음 CloudWatch 지표를 모니터링할 수 있습니다.

  • Kinesis Data Analytics 애플리케이션 Lambda ( CloudWatch 출력 지표로서의 Lambda): 다른 통계 중에서도 성공 및 실패 수를 나타냅니다. 자세한 설명은 Amazon Kinesis Analytics 지표를 참조하십시오.

  • AWS Lambda 함수 지표 및 로그 CloudWatch .