

# 자체 관리형 Apache Kafka에서 Lambda 사용
<a name="with-kafka"></a>

이 주제에서는 자체 관리형 Kafka 클러스터에서 Lambda를 사용하는 방법을 설명합니다. AWS 용어에서 자체 관리형 클러스터는 AWS가 아닌 다른 서비스에 호스팅된 Kafka 클러스터를 포함합니다. 예를 들어, [Confluent Cloud](https://www.confluent.io/confluent-cloud/) 또는 [Redpanda](https://www.redpanda.com/)와 같은 클라우드 공급업체를 통해 Kafka 클러스터를 호스팅할 수 있습니다.

이 장에서는 자체 관리형 Apache Kafka 클러스터를 Lambda 함수의 이벤트 소스로 사용하는 방법을 설명합니다. 자체 관리형 Apache Kafka를 Lambda와 통합하는 일반적인 프로세스에는 다음 단계가 포함됩니다.

1. **[클러스터 및 네트워크 설정](with-kafka-cluster-network.md)** - 우선 Lambda가 클러스터에 액세스할 수 있도록 자체 관리형 Apache Kafka 클러스터를 적합한 네트워킹 구성으로 설정합니다.

1. **[이벤트 소스 매핑 설정](with-kafka-configure.md)** - 그런 다음 Lambda가 Apache Kafka 클러스터를 함수에 안전하게 연결하는 데 필요한 [이벤트 소스 매핑](invocation-eventsourcemapping.md) 리소스를 생성합니다.

1. **[함수 및 권한 설정](with-kafka-permissions.md)** - 마지막으로 함수가 올바르게 설정되었고 [실행 역할](lambda-intro-execution-role.md)에 필요한 권한이 있는지 확인합니다.

이벤트 소스로서 Apache Kafka는 Amazon Simple Queue Service(Amazon SQS) 또는 Amazon Kinesis를 사용하는 것과 유사하게 작동합니다. Lambda는 이벤트 소스의 새 메시지를 내부적으로 폴링한 다음 대상 Lambda 함수를 동기적으로 간접 호출합니다. Lambda는 메시지를 배치 단위로 읽고 이를 함수에 이벤트 페이로드로 제공합니다. 최대 배치 크기를 구성할 수 있습니다. 기본값은 메시지 100건입니다. 자세한 내용은 [일괄 처리 동작](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching) 섹션을 참조하세요.

자체 관리형 Apache Kafka 이벤트 소스 매핑의 처리량을 최적화하려면 프로비저닝된 모드를 구성합니다. 프로비저닝된 모드에서는 이벤트 소스 매핑에 할당된 최소 및 최대 이벤트 폴러 수를 정의할 수 있습니다. 그러면 예기치 않은 메시지 급증을 처리하는 이벤트 소스 매핑의 역량이 향상될 수 있습니다. 자세한 내용은 [프로비저닝된 모드](kafka-scaling-modes.md#kafka-provisioned-mode)를 참조하세요.

**주의**  
Lambda 이벤트 소스 매핑은 각 이벤트를 한 번 이상 처리하므로 레코드가 중복될 수 있습니다. 중복 이벤트와 관련된 잠재적 문제를 방지하려면 함수 코드를 멱등성으로 만드는 것이 좋습니다. 자세한 내용은 AWS 지식 센터의 [함수를 멱등성 Lambda 함수로 만들려면 어떻게 해야 하나요?](https://repost.aws/knowledge-center/lambda-function-idempotent)를 참조하세요.

Kafka 기반 이벤트 소스의 경우 Lambda는 일괄 처리 기간 및 배치 크기와 같은 처리 제어 파라미터를 지원합니다. 자세한 정보는 [일괄 처리 동작](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching) 섹션을 참조하세요.

자체 관리형 Kafka를 이벤트 소스로 사용하는 방법의 예는 AWS 컴퓨팅 블로그에서 [Using self-hosted Apache Kafka as an event source for AWS Lambda](https://aws.amazon.com/blogs/compute/using-self-hosted-apache-kafka-as-an-event-source-for-aws-lambda/)를 참조하세요.

**Topics**
+ [예제 이벤트](#smaa-sample-event)
+ [Lambda용 자체 관리형 Apache Kafka 클러스터 및 네트워크 구성](with-kafka-cluster-network.md)
+ [Lambda 실행 역할 권한 구성](with-kafka-permissions.md)
+ [Lambda용 자체 관리형 Apache Kafka 이벤트 소스 구성](with-kafka-configure.md)

## 예제 이벤트
<a name="smaa-sample-event"></a>

Lambda는 Lambda 함수를 간접 호출할 때 이벤트 파라미터의 메시지 배치를 보냅니다. 이벤트 페이로드에는 메시지 배열이 포함됩니다. 각 배열 항목에는 Kafka 주제 및 Kafka 파티션 식별자에 대한 세부 정보와 함께 타임스탬프 및 base64로 인코딩된 메시지가 포함됩니다.

```
{
   "eventSource": "SelfManagedKafka",
   "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092",
   "records":{
      "mytopic-0":[
         {
            "topic":"mytopic",
            "partition":0,
            "offset":15,
            "timestamp":1545084650987,
            "timestampType":"CREATE_TIME",
            "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==",
            "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==",
            "headers":[
               {
                  "headerKey":[
                     104,
                     101,
                     97,
                     100,
                     101,
                     114,
                     86,
                     97,
                     108,
                     117,
                     101
                  ]
               }
            ]
         }
      ]
   }
}
```