Lambda로 Amazon Kinesis Data Streams 레코드 처리
Lambda로 Amazon Kinesis Data Streams 레코드를 처리하려면 스트림에 대한 소비자를 생성한 다음 Lambda 이벤트 소스 매핑을 생성합니다.
데이터 스트림과 함수 구성
Lambda 함수는 데이터 스트림의 소비자 애플리케이션입니다. 이 함수는 각 샤드에서 한 번에 한 개의 레코드 배치를 처리합니다. Lambda 함수를 공유 처리량 소비자(표준 반복기)에 매핑하거나 향상된 팬 아웃 기능이 있는 전용 처리량 소비자에 매핑할 수 있습니다.
-
표준 반복자: Lambda는 초당 1회의 속도로 Kinesis 스트림의 각 샤드에서 레코드를 폴링합니다. 더 많은 레코드를 사용할 수 있는 경우 Lambda는 함수가 스트림을 따라잡을 때까지 배치 처리를 유지합니다. 이벤트 소스 매핑은 샤드의 다른 소비자와 읽기 처리량을 공유합니다.
-
향상된 팬아웃: 지연 시간을 최소화하고 읽기 처리량을 최대화하려면 향상된 팬아웃으로 데이터 스트림 소비자를 생성하세요. 향상된 팬아웃 소비자는 각 샤드에 대해 전용 연결을 설정하므로 스트림에서 읽는 다른 애플리케이션에 영향을 주지 않습니다. 스트림 소비자는 HTTP/2를 사용하여 수명이 긴 연결을 통해 레코드를 Lambda에 푸시하고 요청 헤더를 압축함으로써 지연 시간을 최소화합니다. Kinesis RegisterStreamConsumer API를 사용하여 스트림 소비자를 생성할 수 있습니다.
aws kinesis register-stream-consumer \ --consumer-name con1 \ --stream-arn arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream
다음 결과가 표시됩니다:
{ "Consumer": { "ConsumerName": "con1", "ConsumerARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream/consumer/con1:1540591608", "ConsumerStatus": "CREATING", "ConsumerCreationTimestamp": 1540591608.0 } }
함수가 레코드를 처리하는 속도를 높이려면 데이터 스트림에 샤드를 추가
함수가 총 동시 배치 수를 처리하기 위해 확장할 수 없는 경우 함수에 대한 할당량 증가를 요청하거나 동시성을 예약합니다.
이벤트 소스 매핑을 생성하여 Lambda 함수 간접 호출
데이터 스트림의 레코드와 함께 Lambda 함수를 간접 호출하려면 이벤트 소스 매핑을 생성합니다. 여러 이벤트 소스 매핑을 생성하여 여러 Lambda 함수로 동일한 데이터를 처리하거나, 단일 함수로 여러 데이터 스트림의 항목을 처리할 수 있습니다. 여러 스트림에서 항목을 처리할 때 각 배치에는 단일 샤드 또는 스트림의 레코드만 포함됩니다.
다른 AWS 계정에서 스트림의 레코드를 처리하도록 이벤트 소스 매핑을 구성할 수 있습니다. 자세한 내용은 계정 간 이벤트 소스 매핑 생성을 참조하십시오.
이벤트 소스 매핑을 생성하기 전에 Kinesis 데이터 스트림에서 읽을 수 있는 권한을 Lambda 함수에 부여해야 합니다. Lambda는 Kinesis 데이터 스트림 관련 리소스를 관리하기 위해 다음 권한이 필요합니다.
AWS 관리형 정책 AWSLambdaKinesisExecutionRole에는 다음 권한이 포함됩니다. 다음 절차의 설명에 따라 함수에 해당 관리형 정책을 추가합니다.
필요한 권한을 구성한 후 이벤트 소스 매핑을 생성합니다.
폴링 및 스트리밍 시작 위치
이벤트 소스 매핑 생성 및 업데이트 중 스트림 폴링은 최종적으로 일관됩니다.
-
이벤트 소스 매핑 생성 중 스트림에서 이벤트 폴링을 시작하는 데 몇 분 정도 걸릴 수 있습니다.
-
이벤트 소스 매핑 업데이트 중 스트림에서 이벤트 폴링을 중지했다가 다시 시작하는 데 몇 분 정도 걸릴 수 있습니다.
이 동작은 스트림의 시작 위치로 LATEST
를 지정하면 이벤트 소스 매핑이 생성 또는 업데이트 중에 이벤트를 놓칠 수 있음을 의미합니다. 누락된 이벤트가 없도록 하기 위해서는 스트림 시작 위치를 TRIM_HORIZON
또는 AT_TIMESTAMP
로 지정하세요.
계정 간 이벤트 소스 매핑 생성
Amazon Kinesis Data Streams는 리소스 기반 정책을 지원합니다. 따라서 다른 계정의 Lambda 함수를 사용하여 스트림으로 수집된 데이터를 하나의 AWS 계정에서 처리할 수 있습니다.
다른 AWS 계정에서 Kinesis 스트림을 사용하여 Lambda 함수에 대한 이벤트 소스 매핑을 생성하려면 리소스 기반 정책을 사용하여 스트림을 구성해서 Lambda 함수에 항목 읽기 권한을 부여합니다. 크로스 계정 액세스를 허용하도록 스트림을 구성하는 방법을 알아보려면 Amazon Kinesis Streams 개발자 안내서의 교차 계정 AWS Lambda 함수를 통한 액세스 공유를 참조하세요.
Lambda 함수에 필요한 권한을 부여하는 리소스 기반 정책으로 스트림을 구성하고 나면 이전 섹션에서 설명한 방법 중 하나를 사용하여 이벤트 소스 매핑을 생성합니다.
Lambda 콘솔을 사용하여 이벤트 소스 매핑을 생성하기로 선택한 경우 스트림의 ARN을 입력 필드에 직접 붙여넣기합니다. 스트림의 소비자를 지정하려는 경우 소비자의 ARN을 붙여넣기하면 스트림 필드가 자동으로 채워집니다.