Kafka 이벤트 소스 매핑 오류 문제 해결
다음 주제에서는 Amazon MSK 또는 자체 관리형 Apache Kafka를 Lambda와 사용할 때 발생할 수 있는 오류 및 문제에 대한 문제 해결 조언을 제공합니다.
문제 해결에 대한 추가 지원이 필요하면 AWS 지식 센터를 방문하십시오.
인증 및 권한 부여 오류
Kafka 클러스터의 데이터를 사용하는 데 필요한 권한이 누락된 경우 Lambda는 LastProcessingResult 아래의 이벤트 소스 매핑에 다음 오류 메시지 중 하나를 표시합니다.
클러스터가 Lambda를 인증하지 못함
SASL/SCRAM 또는 mMTS의 경우 이 오류는 제공된 사용자에게 다음 필수 Kafka 액세스 제어 목록(ACL) 권한이 모두 있지는 않음을 나타냅니다.
-
DescribeConfigs 클러스터
-
그룹 설명
-
그룹 읽기
-
주제 설명
-
Thread-Topic
필수 kafka-cluster 권한으로 Kafka ACL을 생성할 때 주제와 그룹을 리소스로 지정합니다. 주제 이름은 이벤트 소스 매핑의 주제와 일치해야 합니다. 그룹 이름은 이벤트 소스 매핑의 UUID와 일치해야 합니다.
실행 역할에 필요한 권한을 추가한 후 변경 사항이 적용되기까지 몇 분 정도 소요될 수 있습니다.
다음은 이 문제에 대해 로깅 구성을 활성화한 후 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 인증 실패
SASL/SCRAM 또는 SASL/PLAIN의 경우 이 오류는 제공된 로그인 자격 증명이 유효하지 않음을 나타냅니다.
IAM 액세스 제어의 경우 실행 역할에 클러스터에 대한 kafka-cluster:Connect 권한이 없습니다. 역할에 이 권한을 추가하고 클러스터의 Amazon 리소스 이름(ARN)을 리소스로 지정합니다.
이 오류가 간헐적으로 발생하는 경우가 있습니다. TCP 연결 수가 서비스 할당량을 초과하면 클러스터는 연결을 거부합니다. Lambda는 연결이 성공할 때까지 취소하고 다시 시도합니다. Lambda가 클러스터에 연결하고 레코드를 폴링하면 마지막 처리 결과가 OK로 변경됩니다.
다음은 IAM 인증을 사용하는 경우 이 문제에 대해 로깅 구성을 활성화한 후 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를 인증하지 못함
이 오류는 Kafka 브로커가 Lambda를 인증하지 못했음을 나타냅니다. 이 오류는 다음과 같은 이유로 발생할 수 있습니다.
mTLS 인증을 위한 클라이언트 인증서를 제공하지 않았습니다.
클라이언트 인증서를 제공했지만 Kafka 브로커가 mTLS 인증을 사용하도록 구성되지 않았습니다.
Kafka 브로커가 클라이언트 인증서를 신뢰하지 않습니다.
Lambda가 서버를 인증하지 못함
이 오류는 Lambda가 Kafka 브로커를 인증하지 못했음을 나타냅니다. 이 오류는 다음과 같은 이유로 발생할 수 있습니다.
자체 관리형 Apache Kafka의 경우: Kafka 브로커는 자체 서명 인증서 또는 사설 CA를 사용하지만 서버 루트 CA 인증서를 제공하지 않았습니다.
자체 관리형 Apache Kafka의 경우: 서버 루트 CA 인증서가 브로커 인증서에 서명한 루트 CA와 일치하지 않습니다.
브로커의 인증서에 브로커의 DNS 이름 또는 IP 주소가 주체 대체 이름으로 포함되어 있지 않기 때문에 호스트 이름 검증에 실패했습니다.
제공된 인증서 또는 프라이빗 키가 잘못됨
이 오류는 Kafka 소비자가 제공된 인증서 또는 프라이빗 키를 사용할 수 없음을 나타냅니다. 인증서와 키가 PEM 형식을 사용하고 프라이빗 키 암호화가 PBES1 알고리즘을 사용하는지 확인합니다.
다음은 이 문제에 대해 로깅 구성을 활성화한 후 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" } }
네트워크 및 연결 오류
네트워크 구성 문제로 인해 Lambda가 Kafka 클러스터에 연결하지 못할 수 있습니다. 다음 주제에서는 일반적인 네트워크 관련 오류에 대해 설명합니다.
보안 그룹 구성으로 인한 연결 시간 초과
Kafka 클러스터와 연결된 보안 그룹이 자신으로부터의 인바운드 트래픽을 허용하지 않는 경우 Lambda가 클러스터에 연결할 수 없습니다. 보안 그룹의 인바운드 규칙이 Kafka 브로커 포트에서 보안 그룹 자체로부터의 트래픽을 허용하는지 확인하세요.
다음은 이 문제에 대해 로깅 구성을 활성화한 후 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 브로커 엔드포인트를 확인할 수 없음
이 오류는 Kafka 클러스터가 존재하지 않거나 삭제되었음을 나타냅니다. 이벤트 소스 매핑에 지정된 클러스터가 존재하고 활성 상태인지 확인하세요.
다음은 이 문제에 대해 로깅 구성을 활성화한 후 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" } }
이벤트 소스 매핑 오류
Lambda 함수의 이벤트 소스로 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를 초과하면 처리되지 않을 수 있습니다.