Lambda 함수를 출력으로 사용 - Amazon Kinesis Data Analytics for SQL Applications 개발자 안내서

신중한 고려 끝에 두 단계로 Amazon Kinesis Data Analytics for SQL applications를 중단하기로 결정했습니다.

1. 2025년 10월 15일부터 SQL 애플리케이션을 위한 새 Kinesis Data Analytics를 생성할 수 없습니다.

2. 2026년 1월 27일부터 애플리케이션이 삭제됩니다. SQL 애플리케이션용 Amazon Kinesis Data Analytics를 시작하거나 작동할 수 없습니다. 해당 시점부터 에 대한 Amazon Kinesis Data AnalyticsSQL에 대한 지원을 더 이상 사용할 수 없습니다. 자세한 내용은 Amazon Kinesis Data Analytics for SQL Applications 중단 단원을 참조하십시오.

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

Lambda 함수를 출력으로 사용

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

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

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

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

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

  • 문자열 조작 또는 변환

  • 분석 처리 후 데이터 강화

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

  • 데이터 암호화

Lambda 함수는 다음을 포함하여 다양한 AWS 서비스 및 기타 대상에 분석 정보를 제공할 수 있습니다.

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

출력 권한으로서 Lambda

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

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

출력 지표로서의 Lambda

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

출력 이벤트 입력 데이터 모델 및 레코드 응답 모델로서 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에 출력 함수로 전송되는 각 레코드( 레코드 포함IDs)는 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에서 Managed Service for 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 함수로 전송되는 배치의 모든 레코드( 레코드 포함IDs)가 Kinesis Data Analytics 서비스로 반환되는 것은 아닙니다.

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

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

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

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

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

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