

# Kafka 이벤트 소스 매핑 오류 문제 해결
<a name="with-kafka-troubleshoot"></a>

다음 주제에서는 Amazon MSK 또는 자체 관리형 Apache Kafka를 Lambda와 사용할 때 발생할 수 있는 오류 및 문제에 대한 문제 해결 조언을 제공합니다.

[문제 해결에 대한 추가 지원이 필요하면 AWS 지식 센터를 방문하십시오.](https://repost.aws/knowledge-center#AWS_Lambda)

## 인증 및 권한 부여 오류
<a name="kafka-permissions-errors"></a>

Kafka 클러스터의 데이터를 사용하는 데 필요한 권한이 누락된 경우 Lambda는 **LastProcessingResult** 아래의 이벤트 소스 매핑에 다음 오류 메시지 중 하나를 표시합니다.

**Topics**
+ [클러스터가 Lambda를 인증하지 못함](#kafka-authorize-errors)
+ [SASL 인증 실패](#kafka-sasl-errors)
+ [서버가 Lambda를 인증하지 못함](#kafka-mtls-errors-server)
+ [Lambda가 서버를 인증하지 못함](#kafka-mtls-errors-lambda)
+ [제공된 인증서 또는 프라이빗 키가 잘못됨](#kafka-key-errors)

### 클러스터가 Lambda를 인증하지 못함
<a name="kafka-authorize-errors"></a>

SASL/SCRAM 또는 mMTS의 경우 이 오류는 제공된 사용자에게 다음 필수 Kafka 액세스 제어 목록(ACL) 권한이 모두 있지는 않음을 나타냅니다.
+ DescribeConfigs 클러스터
+ 그룹 설명
+ 그룹 읽기
+ 주제 설명
+ Thread-Topic

필수 `kafka-cluster` 권한으로 Kafka ACL을 생성할 때 주제와 그룹을 리소스로 지정합니다. 주제 이름은 이벤트 소스 매핑의 주제와 일치해야 합니다. 그룹 이름은 이벤트 소스 매핑의 UUID와 일치해야 합니다.

실행 역할에 필요한 권한을 추가한 후 변경 사항이 적용되기까지 몇 분 정도 소요될 수 있습니다.

다음은 이 문제에 대해 [로깅 구성](esm-logging.md)을 활성화한 후 ESM 시스템 수준 로그의 예입니다.

```
{
    "eventType": "ESM_PROCESSING_EVENT",
    "timestamp": 1734567890123,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE11111-1",
    "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111/0",
    "logLevel": "WARN",
    "error": {
        "errorMessage": "Not authorized to access topics: [my-topic]",
        "errorCode": "org.apache.kafka.common.errors.TopicAuthorizationException"
    }
}
```

### SASL 인증 실패
<a name="kafka-sasl-errors"></a>

SASL/SCRAM 또는 SASL/PLAIN의 경우 이 오류는 제공된 로그인 자격 증명이 유효하지 않음을 나타냅니다.

IAM 액세스 제어의 경우 실행 역할에 클러스터에 대한 `kafka-cluster:Connect` 권한이 없습니다. 역할에 이 권한을 추가하고 클러스터의 Amazon 리소스 이름(ARN)을 리소스로 지정합니다.

이 오류가 간헐적으로 발생하는 경우가 있습니다. TCP 연결 수가 서비스 할당량을 초과하면 클러스터는 연결을 거부합니다. Lambda는 연결이 성공할 때까지 취소하고 다시 시도합니다. Lambda가 클러스터에 연결하고 레코드를 폴링하면 마지막 처리 결과가 `OK`로 변경됩니다.

다음은 IAM 인증을 사용하는 경우 이 문제에 대해 [로깅 구성](esm-logging.md)을 활성화한 후 ESM 시스템 수준 로그의 예입니다.

```
{
    "eventType": "ESM_PROCESSING_EVENT",
    "timestamp": 1734567890456,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE22222-1",
    "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222/0",
    "logLevel": "WARN",
    "error": {
        "errorMessage": "[a1b2c3d4-5678-90ab-cdef-EXAMPLE22222]: Access denied",
        "errorCode": "org.apache.kafka.common.errors.SaslAuthenticationException"
    }
}
```

### 서버가 Lambda를 인증하지 못함
<a name="kafka-mtls-errors-server"></a>

이 오류는 Kafka 브로커가 Lambda를 인증하지 못했음을 나타냅니다. 이 오류는 다음과 같은 이유로 발생할 수 있습니다.
+ mTLS 인증을 위한 클라이언트 인증서를 제공하지 않았습니다.
+ 클라이언트 인증서를 제공했지만 Kafka 브로커가 mTLS 인증을 사용하도록 구성되지 않았습니다.
+ Kafka 브로커가 클라이언트 인증서를 신뢰하지 않습니다.

### Lambda가 서버를 인증하지 못함
<a name="kafka-mtls-errors-lambda"></a>

이 오류는 Lambda가 Kafka 브로커를 인증하지 못했음을 나타냅니다. 이 오류는 다음과 같은 이유로 발생할 수 있습니다.
+ 자체 관리형 Apache Kafka의 경우: Kafka 브로커는 자체 서명 인증서 또는 사설 CA를 사용하지만 서버 루트 CA 인증서를 제공하지 않았습니다.
+ 자체 관리형 Apache Kafka의 경우: 서버 루트 CA 인증서가 브로커 인증서에 서명한 루트 CA와 일치하지 않습니다.
+ 브로커의 인증서에 브로커의 DNS 이름 또는 IP 주소가 주체 대체 이름으로 포함되어 있지 않기 때문에 호스트 이름 검증에 실패했습니다.

### 제공된 인증서 또는 프라이빗 키가 잘못됨
<a name="kafka-key-errors"></a>

이 오류는 Kafka 소비자가 제공된 인증서 또는 프라이빗 키를 사용할 수 없음을 나타냅니다. 인증서와 키가 PEM 형식을 사용하고 프라이빗 키 암호화가 PBES1 알고리즘을 사용하는지 확인합니다.

다음은 이 문제에 대해 [로깅 구성](esm-logging.md)을 활성화한 후 ESM 시스템 수준 로그의 예입니다.

```
{
    "eventType": "ESM_PROCESSING_EVENT",
    "timestamp": 1734567891234,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE44444",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE44444-1",
    "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE44444/0",
    "logLevel": "WARN",
    "error": {
        "errorMessage": "Invalid PEM keystore configs",
        "errorCode": "org.apache.kafka.common.errors.InvalidConfigurationException"
    }
}
```

## 네트워크 및 연결 오류
<a name="kafka-network-errors"></a>

네트워크 구성 문제로 인해 Lambda가 Kafka 클러스터에 연결하지 못할 수 있습니다. 다음 주제에서는 일반적인 네트워크 관련 오류에 대해 설명합니다.

**Topics**
+ [보안 그룹 구성으로 인한 연결 시간 초과](#kafka-security-group-errors)
+ [Kafka 브로커 엔드포인트를 확인할 수 없음](#kafka-cluster-deleted-errors)

### 보안 그룹 구성으로 인한 연결 시간 초과
<a name="kafka-security-group-errors"></a>

Kafka 클러스터와 연결된 보안 그룹이 자신으로부터의 인바운드 트래픽을 허용하지 않는 경우 Lambda가 클러스터에 연결할 수 없습니다. 보안 그룹의 인바운드 규칙이 Kafka 브로커 포트에서 보안 그룹 자체로부터의 트래픽을 허용하는지 확인하세요.

다음은 이 문제에 대해 [로깅 구성](esm-logging.md)을 활성화한 후 ESM 시스템 수준 로그의 예입니다.

```
{
    "eventType": "ESM_PROCESSING_EVENT",
    "timestamp": 1734567892345,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE55555",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE55555-1",
    "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE55555/0",
    "logLevel": "WARN",
    "error": {
        "errorMessage": "Timeout expired while fetching topic metadata",
        "errorCode": "org.apache.kafka.common.errors.TimeoutException"
    }
}
```

또한 Kafka 소비자 INFO 로그를 확인하여 연결 및 네트워크 구성을 확인할 수도 있습니다. `brokerEndpoints` 필드에는 Kafka 브로커 주소가 표시되고, `securityProtocol` 및 `saslMechanism`(해당하는 경우)에는 인증 방법이 표시되고, `networkConfig` 필드에는 이벤트 소스 매핑에 사용되는 IP 주소, 서브넷 CIDR 블록, 보안 그룹이 표시됩니다. 나열된 보안 그룹이 필요한 인바운드 트래픽을 허용하는지 확인하세요.

```
{
    "eventType": "POLLER_STATUS_EVENT",
    "timestamp": 1734567892456,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE-1",
    "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/0",
    "logLevel": "INFO",
    "kafkaEventSourceConnection": {
        "brokerEndpoints": "boot-abcd1234.c2.kafka-serverless.us-east-1.amazonaws.com:9098",
        "consumerId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE-0",
        "topics": [
            "my-topic"
        ],
        "consumerGroupId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
        "securityProtocol": "SASL_SSL",
        "saslMechanism": "AWS_MSK_IAM",
        "totalPartitionCount": 2,
        "assignedPartitionCount": 2,
        "partitionsAssignmentGeneration": 1,
        "assignedPartitions": [
            "my-topic-0",
            "my-topic-1"
        ],
        "networkConfig": {
            "ipAddresses": [
                "10.0.0.37"
            ],
            "subnetCidrBlock": "10.0.0.32/28",
            "securityGroups": [
                "sg-0123456789abcdef0"
            ]
        }
    }
}
```

### Kafka 브로커 엔드포인트를 확인할 수 없음
<a name="kafka-cluster-deleted-errors"></a>

이 오류는 Kafka 클러스터가 존재하지 않거나 삭제되었음을 나타냅니다. 이벤트 소스 매핑에 지정된 클러스터가 존재하고 활성 상태인지 확인하세요.

다음은 이 문제에 대해 [로깅 구성](esm-logging.md)을 활성화한 후 ESM 시스템 수준 로그의 예입니다.

```
{
    "eventType": "ESM_PROCESSING_EVENT",
    "timestamp": 1734567893456,
    "resourceArn": "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLE66666",
    "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-kafka-cluster/12345678-abcd-1234-efgh-EXAMPLE66666-1",
    "eventProcessorId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE66666/0",
    "logLevel": "WARN",
    "error": {
        "errorMessage": "No resolvable bootstrap urls given in bootstrap.servers",
        "errorCode": "org.apache.kafka.common.config.ConfigException"
    }
}
```

## 이벤트 소스 매핑 오류
<a name="services-event-errors"></a>

Lambda 함수의 [이벤트 소스](invocation-eventsourcemapping.md)로 Apache Kafka 클러스터를 추가한 경우 함수에 오류가 발생하면 Kafka 소비자가 레코드 처리를 중지합니다. 토픽 파티션의 소비자는 레코드를 구독하고, 읽고, 처리하는 소비자입니다. 다른 Kafka 소비자는 동일한 오류가 발생하지 않는 한 레코드 처리를 계속할 수 있습니다.

중지된 소비자의 원인을 확인하려면 `StateTransitionReason` 응답의 `EventSourceMapping` 필드를 확인하세요. 다음 목록에는 발생할 수 있는 이벤트 소스 오류가 나왔습니다.

**`ESM_CONFIG_NOT_VALID`**  
이벤트 소스 매핑 구성이 잘못되었습니다.

**`EVENT_SOURCE_AUTHN_ERROR`**  
Lambda가 이벤트 소스를 인증하지 못했습니다.

**`EVENT_SOURCE_AUTHZ_ERROR`**  
Lambda에 이벤트 소스에 액세스하는 데 필요한 권한이 없습니다.

**`FUNCTION_CONFIG_NOT_VALID`**  
함수의 구성이 유효하지 않습니다.

**참고**  
Lambda 이벤트 레코드가 허용되는 크기 제한인 6MB를 초과하면 처리되지 않을 수 있습니다.