본문 바로가기

AWS

[AWS] MSK에서 Lambda Kafka 이벤트 소스 매핑 구성 방법

반응형

AWS Managed Streaming for Apache Kafka(이하 MSK)에서 Lambda 함수를 Kafka 토픽 소비자로 구성하는 방법에 대해 실제 콘솔과 CLI 명령을 기반으로 설명합니다.

1. 사전 준비

1-1. MSK 클러스터 생성

MSK 클러스터는 VPC 안에 위치해야 하며, Lambda가 클러스터에 접근 가능한 서브넷과 보안 그룹이 설정되어야 합니다. 이때 클러스터는 Amazon MSK 콘솔 또는 CloudFormation 등으로 생성할 수 있습니다.

1-2. Lambda 함수 생성

Kafka 메시지를 처리하는 Lambda 함수를 먼저 생성합니다. 함수는 반드시 MSK 클러스터와 동일한 VPC 내 서브넷에서 접근 가능해야 합니다.

1-3. 네트워크 및 권한

Lambda가 MSK 클러스터에 접속하기 위해 필요한 IAM 역할과 VPC ENI 권한을 준비합니다.
필수 권한 요약

  • MSK 클러스터 설명 및 부트스트랩 브로커 조회
    • kafka:DescribeCluster, kafka:GetBootstrapBrokers
  • VPC ENI 생성/조회/삭제
    • ec2:CreateNetworkInterface, ec2:DescribeSecurityGroups, ec2:DeleteNetworkInterface
  • CloudWatch Logs 권한
    • logs:CreateLogGroup, logs:PutLogEvents

2. MSK 콘솔에서 Lambda 이벤트 소스 매핑 생성

2025년 11월 업데이트로 MSK 콘솔에서 Lambda ESM을 바로 구성할 수 있게 되었습니다. 이제 콘솔에서 토픽과 Lambda 함수만 지정하면 매핑 구성이 자동으로 생성됩니다.

2-1. MSK 콘솔 접속

AWS 콘솔에서 Amazon MSK → 클러스터 선택으로 이동합니다.

2-2. Lambda 통합 탭 선택

클러스터 세부 페이지에서 Lambda Integration 탭을 선택합니다.

2-3. 필수 필드 입력

  • 토픽 이름 입력
    • Lambda 함수가 구독할 Kafka 토픽 이름을 입력합니다.
  • Lambda 함수 선택
    • 연결할 Lambda 함수를 드롭다운에서 선택합니다.

2-4. 기본 옵션 확인 및 매핑 생성

기본적으로:

  • 인증 방식
  • 네트워크 설정
  • 이벤트 폴러 스케일링Mode
    등은 AWS가 자동으로 최적값으로 설정합니다.
    이후 Create 버튼을 클릭하면 이벤트 소스 매핑이 곧바로 생성됩니다.

3. Lambda 이벤트 소스 매핑 세부 옵션

MSK 콘솔에서 기본값으로 자동 구성되지만, 필요에 따라 세부 옵션을 직접 조정할 수 있습니다.

3-1. Kafka 이벤트 폴러 스케일링 모드

Lambda는 Kafka 이벤트 폴러(Event Poller)를 생성해 Kafka 토픽의 파티션을 읽습니다. 두 가지 모드를 선택할 수 있습니다.

1) 온디맨드 (기본)

  • 기본 폴러 수로 시작하며, 메시지 처리량에 따라 자동으로 스케일 업/다운합니다.
  • Lambda 함수가 스로틀링되면 폴러 수를 줄여 워크로드를 제어합니다.

2) 프로비저닝 모드

  • MinimumPollers, MaximumPollers 값을 정해 고정 범위로 스케일링합니다.
  • 성능이 중요한 Kafka 워크로드에서 사용합니다.
  • 프로비저닝 모드는 추가 비용이 발생합니다.

구성 예제 (CLI)

 

aws lambda update-event-source-mapping \
  --uuid <ESM_UUID> \
  --provisioned-poller-config '{"MinimumPollers": 5, "MaximumPollers": 100}'
``` :contentReference[oaicite:6]{index=6}

### 3-2. 사용자 지정 Consumer Group ID  
ESM 생성 시 Kafka **Consumer Group ID**를 지정할 수 있습니다. 이는 파티션 오프셋 커밋 및 그룹 관리를 위해 중요합니다. 같은 Consumer Group ID가 여러 Lambda 매핑에 사용되면 각 매핑은 해당 그룹으로부터 메시지를 공유 처리합니다. :contentReference[oaicite:7]{index=7}

### 3-3. 인증과 보안  
MSK 클러스터에 따라 **SASL/SCRAM**, **mTLS** 등 인증 방식이 달라질 수 있으며, 해당 인증 비밀(Secrets Manager) 접근 권한이 Lambda 역할에 포함되어야 합니다. :contentReference[oaicite:8]{index=8}

---

## 4. CLI/SDK를 통한 매핑 생성

콘솔 외에도 CLI로 이벤트 소스 매핑을 생성할 수 있습니다. 예시는 아래와 같습니다:

```bash
aws lambda create-event-source-mapping \
  --function-name my-msk-function \
  --event-source-arn arn:aws:kafka:region:account-id:cluster/ClusterName/uuid \
  --topics MyTopic \
  --starting-position LATEST \
  --source-access-configuration '[{"Type":"SASL_SCRAM_512_AUTH","URI":"arn:aws:secretsmanager:region:..."}]'
 

이 명령은:

  • Lambda 함수와 Kafka 토픽을 연결
  • 시작 위치를 가장 최신 메시지(LATEST)로 설정
  • SASL_SCRAM 인증을 설정

위 구성은 VPC 및 권한이 사전에 설정된 상태를 필요로 합니다.

5. 운영 시 고려사항

5-1. VPC 네트워크

Lambda가 Kafka 클러스터에 접근 가능한 VPC 구성과 보안 그룹 설정이 되어 있어야 합니다. 그렇지 않으면 연결 실패가 발생할 수 있습니다.

5-2. 권한 문제

IAM 역할에 MSK 접근 권한이 누락되면 연결 오류가 발생합니다. 모듈화된 정책(AWSLambdaMSKExecutionRole) 또는 자동 권한 생성을 이용할 수 있습니다.

5-3. 처리량과 스케일링

Kafka 워크로드 패턴에 따라 폴러 스케일링 모드를 적절히 설정해야 합니다. 온디맨드 모드는 간단하지만 프로비저닝 모드는 높은 처리량과 일관성 있는 레이턴시를 제공합니다.

6. 마무리

이제 MSK 콘솔에서 토픽 + Lambda 함수 선택만으로 매핑을 생성할 수 있어 설정 시간이 크게 단축되며, 수동 설정 오류를 줄일 수 있습니다.

반응형