MSK 및 자체 관리형 Kafka 클러스터에서 폴링하는 Lambda 트리거 문제를 해결하려면 어떻게 해야 하나요?

7분 분량
0

AWS Lambda 함수가 Amazon Managed Streaming for Apache Kafka(Amazon MSK) 클러스터 또는 자체 관리형 Kafka 클러스터의 레코드를 처리하도록 설계되어 있습니다. 그러나 Lambda 트리거에 오류 메시지가 표시됩니다.

간략한 설명

이벤트 소스 매핑(ESM)은 이벤트 소스에서 데이터를 읽고 Lambda 함수를 호출하는 AWS Lambda 리소스입니다. Lambda 함수를 호출하려면 Lambda-Kafka ESM이 다음 작업을 수행할 수 있어야 합니다.

ESM의 네트워킹, 인증 또는 권한 부여 설정으로 인해 클러스터와의 통신이 차단되면 함수를 호출하기 전에 설정이 실패합니다. 그러면 트리거는 근본 원인을 해결하는 데 도움이 되는 오류 메시지를 표시합니다.

해결 방법

ESM 이해

Amazon MSK 트리거 또는 자체 관리형 Kafka 트리거로 Lambda 함수를 구성하면 ESM 리소스가 자동으로 생성됩니다. ESM은 Lambda 함수와는 별개이며 Kafka 클러스터의 주제에서 레코드를 지속적으로 폴링합니다. ESM은 이러한 레코드를 페이로드로 묶습니다. 그런 다음 Lambda Invoke API를 호출하여 처리를 위해 Lambda 함수에 페이로드를 전달합니다.

중요: Lambda-Kafka ESM은 Lambda 함수의 VPC 네트워크 설정을 상속하지 않습니다. 이는 MSK 트리거와 자체 관리형 Kafka 트리거 모두에 해당됩니다. MSK ESM은 대상 MSK 클러스터에 구성된 서브넷 및 보안 그룹 설정을 사용합니다. 자체 관리형 Kafka 트리거는 기본적으로 WAN 액세스를 제공하지만 동일한 계정 및 AWS 리전의 VPC에 대한 네트워크 액세스를 사용하도록 구성할 수 있습니다. 네트워크 구성이 분리되어 있기 때문에 Lambda 함수는 Kafka 클러스터에 대한 경로가 없는 네트워크 내에서 코드를 실행할 수 있습니다.

ESM 설정 프로세스 이해

ESM이 연결된 Lambda 함수를 호출하기 전에 ESM은 다음 단계를 자동으로 완료합니다.

1.    ESM은 AWS STS API를 호출하여 보안 토큰을 가져옵니다.

2.    SourceAccessConfiguration에 보안 암호가 포함되어 있는 경우 AWS Secrets Manager API에서 해당 암호를 가져옵니다.

3.    자체 관리형 Kakfa ESM의 경우: Lambda는 selfManagedEventSourceEndPoints 아래의 ESM에 구성된 호스트 이름에서 클러스터 엔드포인트의 IP 주소를 확인합니다.

      MSK ESM의 경우: MSK 클러스터의 서브넷 및 보안 그룹 구성을 가져옵니다.

4.    자체 관리형 Kakfa ESM의 경우: 브로커 엔드포인트에 네트워크 연결을 설정합니다.

      MSK ESM의 경우: 각 MSK 클러스터의 서브넷에 MSK 클러스터의 보안 그룹이 있는 하이퍼플레인 탄력적 네트워크 인터페이스를 생성합니다.

5.    인증:

  • TLS 인증이 활성화된 경우 브로커 엔드포인트에서 제공하는 SSL 인증서를 확인합니다.
  • 브로커에 로그인합니다.

6.    인증:

  • 해당 주제가 클러스터에 존재하는지 확인합니다. ESM의 Topics 파라미터에 구성된 주제가 클러스터에 존재하는지 클러스터 브로커에게 물어보세요.
  • ESM의 UUID를 소비자 그룹 ID로 사용하여 클러스터에 소비자 그룹을 생성합니다.

7.    해당 주제의 폴링 레코드.

8.    레코드를 6MB 미만의 페이로드로 묶습니다. 이 수치는 Lambda 호출 페이로드의 한도입니다.

9.    ESM은 레코드 페이로드와 함께 관련 Lambda 함수를 호출합니다. 이렇게 하려면 Lambda 호출 API를 동기식으로 호출해야 합니다.

네트워크 보안 문제 해결

ESM이 브로커 엔드포인트에 요청을 보내고 응답을 받지 못하면 ESM은 요청 시간이 초과된 것으로 간주합니다. 브로커 엔드포인트에 대한 시간 초과가 발생하면 트리거에 다음 오류 메시지가 표시됩니다.

“문제: 연결 오류. 이벤트 소스 연결 구성을 확인하십시오. 이벤트 소스가 VPC에 있는 경우 동일한 VPC, 서브넷 및 보안 그룹 설정으로 새 Lambda 함수 또는 EC2 인스턴스를 설정해 보십시오. 새 디바이스를 Kafka 클러스터에 연결하고 메시지를 사용하여 문제가 VPC 또는 엔드포인트 구성과 관련이 없는지 확인합니다. 새 디바이스에서 메시지를 사용할 수 있는 경우 Lambda 고객 지원에 문의하여 추가 조사를 요청하십시오.“

문제를 해결하려면 이전 오류 메시지에 나와 있는 단계를 따르십시오. 또한 다음 섹션의 네트워킹 구성을 참고하여 ESM이 제대로 구성되었는지 확인합니다.

참고: 클러스터에서 요청을 처리할 시스템 리소스가 부족한 경우에도 ESM에서 요청 제한 시간 초과가 발생할 수 있습니다. 또는 ESM이나 클러스터에 잘못된 보안 설정이 구성된 경우 요청 제한 시간 초과가 발생할 수 있습니다. 이 오류가 표시되고 네트워크 구성에 문제가 없는 경우, 클러스터 브로커의 액세스 로그에서 추가 정보를 확인하세요.

자체 관리형 Kafka ESM이 사용하는 네트워킹 구성

자체 관리형 Kafka ESM의 네트워크 구성은 Lambda 함수와 유사합니다. 기본적으로 ESM은 WAN에 액세스할 수 있지만 VPC 내에서 액세스할 수 있도록 구성되어 있지 않습니다. Kafka 클러스터에 액세스하도록 특정 서브넷 및 보안 그룹을 사용하여 수동으로 구성할 수 있습니다. 하지만 Lambda 함수가 포함된 계정의 VPC에서 연결할 수 있는 클러스터에만 액세스할 수 있습니다. 그 결과 다음 위치에 있는 Kafka 클러스터에 대해 자체 관리형 Kafka ESM을 생성할 수 있습니다.

  • 온프레미스 데이터 센터
  • 다양한 클라우드 제공자
  • 다른 계정의 VPC에 있는 Kafka 클러스터의 MSK 브로커

참고: 다른 계정의 MSK 클러스터에서 사용하는 자체 관리형 Kafka 트리거를 만들 수 있습니다. 그러나 몇 가지 단점이 있습니다. MSK 트리거와 달리 AWS Identity and Access Management(IAM) 인증은 자체 관리형 Kafka 트리거에 사용할 수 없습니다. 또한 VPC 피어링 연결을 통해 MSK 클러스터에 연결하려면 특정 VPC 해결 방법이 필요합니다. 자세한 내용은 Goldman Sachs가 AWS PrivateLink를 사용하여 Amazon MSK 클러스터에 대한 교차 계정 연결을 구축하는 방법을 참조하세요.

Lambda-MSK ESM의 네트워킹 구성

MSK ESM은 MSK 클러스터와 통신하기 위해 클러스터에서 사용하는 각 서브넷 내에 하이퍼플레인 엘라스틱 네트워크 인터페이스를 생성합니다. 이는 Lambda 함수가 VPC 내에서 작동하는 방식과 유사합니다.

MSK ESM은 Lambda 함수의 VPC 설정을 사용하지 않습니다. 그 대신 ESM은 대상 MSK 클러스터에 구성된 서브넷 및 보안 그룹 설정을 자동으로 사용합니다. 그런 다음, MSK ESM은 MSK 클러스터에서 사용하는 각 서브넷 내에 네트워크 인터페이스를 생성합니다. 이러한 네트워크 인터페이스는 MSK 클러스터에서 사용하는 것과 동일한 보안 그룹을 사용합니다. MSK ESM에서 사용하는 보안 그룹과 수신 또는 송신 규칙은 다음 CLI 명령으로 찾을 수 있습니다.

1.    AWS CLI MSK 명령 describe-cluster를 사용하여 MSK 클러스터에서 사용하는 보안 그룹과 서브넷을 나열합니다.

2.    describe-cluster의 출력에 나열된 보안 그룹에 대해 describe-security-groups 명령을 사용하십시오.

트래픽에 대한 액세스 권한 부여

MSK 클러스터의 보안 그룹에는 자체로부터의 수신 트래픽과 자체를 향한 송신 트래픽을 허용하는 규칙이 포함되어야 합니다. 또한 브로커가 사용하는 다음 개방형 인증 포트 중 하나를 통해 트래픽을 부여해야 합니다.

  • 일반 텍스트의 경우 9092
  • TLS의 경우 9094
  • SASL의 경우 9096
  • 443은 모든 구성에 사용 가능

초기화, 폴링 및 호출 중에 발생할 수 있는 문제 해결

“문제: 연결 오류. VPC는 Lambda 및 STS 뿐만 아니라 인증이 필요한 경우 Secrets Manager에도 연결할 수 있어야 합니다. PrivateLink 또는 NAT 게이트웨이를 구성하여 액세스를 제공할 수 있습니다.“

앞의 오류는 다음과 같은 이유로 발생합니다.

  • ESM은 VPC에 구성되며 STS API 호출이 실패하거나 제한 시간이 초과됩니다.
  • ESM이 VPC에 구성되어 있으며 Secrets Manager API 연결 시도가 실패하거나 제한 시간이 초과되었습니다.
  • 트리거는 Kafka 클러스터에 액세스할 수 있지만 Lambda API를 통해 함수를 호출하면 제한 시간이 초과됩니다.

이러한 문제는 ESM이 AWS STS 및 AWS Secrets Manager와 같은 다른 서비스에 도달하지 못하도록 하는 잘못된 VPC 설정 때문일 수 있습니다. VPC 내에서 Apache Kafka 클러스터를 사용하여 AWS Lambda 설정의 단계를 따라 VPC 설정을 올바르게 구성하십시오.

STS API 호출이 실패하거나 제한 시간이 초과되면 VPC 설정에 따라 ESM이 포트 443에서 리전별 Lambda 엔드포인트에 도달하지 못하게 됩니다. 이 문제를 해결하려면 VPC 내에서 Apache Kafka 클러스터를 사용하여 AWS Lambda 설정을 참조하세요.

SourceAccessConfiguration에 암호가 포함되어 있는 경우, Secrets Manager에서 해당 암호를 검색해야 합니다.

“문제: 인증서 및/또는 프라이빗 키는 PEM 형식이어야 합니다.”

위 오류는 ESM에서 해독할 수 있는 형식이 아닌 암호가 있는 경우 발생합니다.

이 문제를 해결하려면 암호의 형식을 확인하세요. Secrets Manager는 .pem 형식의 X.509 인증서 파일만 지원한다는 점에 유의하세요. 자세한 내용은 제공된 인증서 또는 프라이빗 키가 유효하지 않음(Amazon MSK) 또는 제공된 인증서 또는 프라이빗 키가 유효하지 않음(Kafka)을 참조하세요.

“문제: 제공된 Kafka 브로커 엔드포인트를 해결할 수 없습니다.”

위 오류는 ESM이 호스트 이름을 IP 주소로 변환할 수 없을 때 발생합니다.

이 오류를 해결하려면 ESM이 호스트 이름을 변환할 수 있는 DNS 서버에 연결할 수 있어야 합니다. 엔드포인트의 호스트 이름이 프라이빗 네트워크 내에 있는 경우 호스트 이름을 확인할 수 있는 DNS 설정이 있는 VPC를 사용하도록 ESM을 구성합니다.

“문제: 서버가 Lambda를 인증하지 못했거나 Lambda가 서버를 인증하지 못했습니다.”

위 오류는 ESM이 연결된 서버가 ESM 설정에서 구성한 서버가 아닐 때 발생합니다.

이 문제를 해결하려면 연결하려는 서버에 대해 ESM 설정을 구성했는지 확인하세요.

“문제: SASL 인증에 실패했습니다.

위 오류는 서버 로그인 시도가 실패할 때 발생합니다.

Amazon MSK 주제에서 트리거되는 AWS Lambda 함수는 SASL/SCRAM을 사용하여 AWS Secrets Manager에서 보호하는 사용자 이름과 암호에 액세스할 수 있습니다. 사용자 이름과 암호가 유효한 것으로 인식되지 않으면 오류가 발생합니다.

이 오류를 해결하려면 브로커에 로그인하고 액세스 로그를 확인하세요.

참고:

“문제: 클러스터가 Lambda를 인증하지 못했습니다.

위 오류는 ESM이 브로커에 로그인했지만 ESM 사용자에게 해당 주제의 레코드를 폴링할 권한이 없을 때 발생합니다. 이 문제를 해결하려면 클러스터가 Lambda 인증 실패(Amazon MSK) 또는 클러스터가 Lambda 권한 부여 실패(Kafka)를 참조하세요.


관련 정보

인증 및 권한 부여 오류

AWS 공식
AWS 공식업데이트됨 일 년 전