AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Amazon MSK 및 자체 관리형 Apache Kafka 클러스터에서 폴링하는 Lambda 트리거의 문제를 해결하려면 어떻게 해야 합니까?
Amazon Managed Streaming for Apache Kafka(Amazon MSK) 클러스터 또는 자체 관리형 Apache Kafka 클러스터의 레코드를 처리하도록 AWS Lambda 함수를 설계했습니다. 하지만 이벤트 소스 매핑이 Lambda 함수를 호출하지 않습니다.
간략한 설명
Lambda 함수를 호출하려면 Apache Kafka 이벤트 소스 매핑이 다음 작업을 수행할 수 있어야 합니다.
- 클러스터와 통신합니다.
- 주제의 레코드를 폴링합니다.
- Lambda 호출 API와 통신합니다.
- AWS Security Token Service(AWS STS) API와 통신합니다.
이벤트 소스 매핑의 네트워킹, 인증 또는 권한 부여 설정으로 인해 위 작업을 할 수 없으면 이벤트 소스 매핑은 함수를 호출할 수 없습니다. 대신 오류가 발생합니다.
해결 방법
Amazon MSK 트리거 또는 자체 관리형 Kafka 트리거로 Lambda 함수를 구성하면 Lambda가 자동으로 새 이벤트 소스 매핑 리소스를 생성합니다. 이 이벤트 소스 매핑은 Lambda 함수와는 별개의 리소스입니다. 이벤트 소스 매핑은 Kafka 클러스터에서 레코드를 폴링하고 레코드를 페이로드로 묶습니다. 그런 다음 Lambda 호출 API가 호출되어 처리될 Lambda 함수에 페이로드를 전달합니다. 폴링 실패 문제를 해결하려면 받은 각 오류에 대해 다음 문제 해결 단계를 완료하십시오.
중요: Lambda 이벤트 소스 매핑은 Lambda 함수의 가상 프라이빗 클라우드(VPC) 네트워크 구성을 상속하지 않습니다. 이는 Amazon MSK와 자체 관리형 Kafka 트리거 모두에 해당됩니다. Amazon MSK 이벤트 소스 매핑은 대상 MSK 클러스터에서 구성한 서브넷 및 보안 그룹 구성을 사용합니다. 자체 관리형 Kafka 트리거에는 기본적으로 광역 네트워크(WAN) 액세스 권한이 있습니다. 하지만 동일한 AWS 계정 및 AWS 리전의 VPC에 대한 네트워크 액세스를 구성할 수도 있습니다. 네트워크 구성이 분리되어 있기 때문에, Kafka 클러스터에 대한 경로가 없는 네트워크 내에서 Lambda 함수를 구성할 수 있습니다.
교차 계정 MSK 클러스터에서 레코드를 폴링하도록 Amazon MSK 이벤트 소스 매핑을 구성하려면 다중 VPC 프라이빗 연결을 설정합니다. 참고로 다른 계정의 MSK 클러스터에서 리소스를 사용하는 자체 관리형 Kafka 트리거를 만들 수 있습니다. 그러나 이 솔루션에는 몇 가지 단점이 있습니다. 예를 들어, 대상 클러스터가 MSK 클러스터인 경우에도 자체 관리형 Kafka 트리거와 함께 AWS Identity and Access Management(IAM) 인증을 사용할 수 없습니다. 또한 VPC 피어링 연결을 통해 MSK 클러스터에 연결하려면 VPC 해결 방법을 설정해야 합니다. 아키텍처의 예는 Goldman Sachs가 AWS PrivateLink를 사용하여 Amazon MSK 클러스터에 계정 간 연결을 구축한 방법을 참조하십시오.
참고: 다중 VPC 연결을 사용하려면 요구 사항을 준수하는지 확인하십시오.
트리거와 클러스터 간의 네트워크 통신 문제 해결
이벤트 소스 매핑은 클러스터 브로커 엔드포인트에 서로 다른 여러 요청을 전송하여 Lambda 함수의 단일 호출을 완료합니다. 호출 전에 이벤트 소스 매핑은 클러스터 브로커 엔드포인트에 클러스터 메타데이터 정보와 주제의 레코드를 요청합니다. 호출이 성공하면 이벤트 소스 매핑이 브로커 엔드포인트와 통신하여 처리된 레코드를 커밋합니다. 이벤트 소스 매핑이 브로커 엔드포인트에 요청을 보내고 응답을 받지 못하면 요청 시간 초과가 발생합니다. 다음과 같은 오류가 발생합니다.
"PROBLEM: Connection error. Please check your event source connection configuration. If your event source lives in a VPC, try setting up a new Lambda function or EC2 instance with the same VPC, Subnet, and Security Group settings. Connect the new device to the Kafka cluster and consume messages to ensure that the issue is not related to VPC or Endpoint configuration. If the new device is able to consume messages, please contact Lambda customer support for further investigation."
브로커 요청 시간 초과는 요청이 브로커 엔드포인트에 도달하기 이전에도, 이후에도 발생할 수 있습니다. 요청 도달 전 브로커 시간 초과는 네트워크 및 보안 그룹 설정이 브로커 엔드포인트에 대한 이벤트 소스 매핑 요청을 차단할 때 발생합니다. 요청 도달 후 브로커 시간 초과는 브로커가 이벤트 소스 매핑의 요청을 수신했지만 요청을 완료할 수 없을 때 발생합니다.
요청 도달 후 브로커 시간 초과를 조사하려면 실패 시점의 브로커 상태를 확인하십시오. 문제가 발생했을 때 클러스터가 오프라인 상태였다면 클러스터가 다시 온라인 상태가 되어 사용할 수 있게 되면 이벤트 소스 매핑을 다시 활성화하십시오. 요청 시간 초과는 클러스터의 디스크 공간이 부족하거나 CPU 사용량이 100%에 도달하거나 브로커 엔드포인트가 실패한 경우에도 발생합니다. 이러한 문제를 해결하려면 이벤트 소스 매핑의 배치 크기를 1로 설정한 다음 트리거를 다시 활성화하십시오. 참고로 배치 크기를 더 큰 값으로 설정하면 클러스터 응답 시간이 길어집니다.
시간 초과 오류를 해결하려면 브로커의 액세스 로그와 시스템 로그에서 자세한 내용을 확인하십시오.
요청이 브로커 엔드포인트에 도달하기 전에 요청 제한 시간이 초과되면 네트워킹 구성을 확인하십시오.
Amazon MSK 이벤트 소스 매핑을 위한 네트워킹 구성 확인
Amazon MSK 이벤트 소스 매핑은 MSK 클러스터와 통신하기 위해 클러스터가 사용하는 각 서브넷에 하이퍼플레인 탄력적 네트워크 인터페이스를 생성합니다. 이벤트 소스 매핑은 Lambda가 소유한 리소스입니다. 하지만 Amazon MSK 이벤트 소스 매핑은 Lambda 함수의 VPC 설정을 사용하지 않습니다. 대신 이벤트 소스 매핑은 대상 MSK 클러스터에 구성된 서브넷 및 보안 그룹 설정을 자동으로 사용합니다. 그러면 Amazon MSK 이벤트 소스 매핑은 MSK 클러스터가 사용하는 각 서브넷 내에 네트워크 인터페이스를 생성합니다. 이러한 네트워크 인터페이스는 MSK 클러스터에서 사용하는 것과 동일한 보안 그룹을 사용합니다.
보안 그룹이 필요한 트래픽과 포트를 허용하는지 확인하려면 다음 단계를 완료하십시오.
- MSK 클러스터에서 사용하는 모든 보안 그룹과 서브넷을 나열하려면 describe-cluster AWS CLI 명령을 실행합니다.
- 모든 인바운드 및 아웃바운드 규칙을 표시하려면 describe-cluster 명령의 출력에 나열된 보안 그룹에서 describe-security-groups 명령을 실행합니다.
- 보안 그룹과 MSK 클러스터 간의 트래픽을 허용하도록 나열된 보안 그룹에서 규칙을 구성합니다. 또한 브로커가 사용하는 다음과 같은 공개 인증 포트를 통한 트래픽을 허용해야 합니다.
일반 텍스트의 경우 9092
TLS의 경우 9094
SASL의 경우 9096
IAM의 경우 9098
모든 구성에 대해 443(아웃바운드 규칙)
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
자체 관리형 Kafka 이벤트 소스 매핑을 위한 네트워킹 구성 확인
기본적으로 자체 관리형 Kafka 이벤트 소스 매핑은 WAN에 액세스할 수 있지만 VPC에는 액세스할 수 없습니다. Kafka 클러스터의 특정 서브넷 및 보안 그룹에 대한 VPC 액세스를 수동으로 구성할 수 있습니다. 하지만 이벤트 소스 매핑은 클러스터가 Lambda 함수를 포함하는 계정에 있는 경우에만 클러스터에 액세스할 수 있습니다. 다음 위치 중 하나에 있는 Kafka 클러스터에 대해 자체 관리형 Kafka 이벤트 소스 매핑을 생성할 수 있습니다.
- 온프레미스 데이터 센터
- 다른 클라우드 공급자
- 다른 계정의 VPC에 위치한 Kafka 클러스터의 Amazon MSK 브로커
초기화, 폴링 또는 호출 중에 발생하는 문제 해결
초기화, 폴링 또는 호출 중에 문제가 발생하면 다음 오류가 발생합니다.
"PROBLEM: Connection error. Your event source VPC must be able to connect to Lambda and STS, Secrets Manager (if event source authentication is required), and the OnFailure Destination (if one is configured). You can provide access by configuring PrivateLink or a NAT Gateway. For how to setup VPC endpoints/NAT gateway, please check https://aws.amazon.com/blogs/compute/setting-up-aws-lambda-with-an-apache-kafka-cluster-within-a-vpc/".
위 오류는 다음의 이유로 발생합니다.
- 이벤트 소스 매핑이 VPC에 구성되어 있으며, AWS STS API에 대한 호출이 실패하거나 제한 시간이 초과되었습니다.
- 이벤트 소스 매핑이 Secrets Manager 클러스터 인증을 사용하도록 구성되었지만 Secrets Manager API에 대한 호출이 실패하거나 제한 시간이 초과되었습니다.
- 이벤트 소스 매핑이 Kafka 클러스터에 액세스하여 레코드 폴링에 성공하였지만 Lambda API에 대한 호출이 실패하거나 제한 시간이 초과되었습니다.
- Amazon Simple Storage Service(Amazon S3) 또는 Amazon Simple Notification Service(Amazon SNS)와 같은 장애가 발생한 대상을 사용하여 이벤트 소스 매핑을 구성했습니다. 하지만 함수 호출이 오류와 함께 종료되며, 대상의 API 호출이 실패하거나 제한 시간이 초과됩니다.
위의 문제는 보안 그룹 또는 라우팅 테이블의 구성으로 인해 이벤트 소스 매핑이 다른 서비스에 도달하는 것을 허용하지 않을 때 발생합니다. 이러한 서비스에는 AWS STS, Lambda 또는 AWS Secrets Manager 등이 있습니다. VPC 설정을 올바르게 구성하려면 VPC 내 Apache Kafka 클러스터를 사용하여 AWS Lambda 설정의 단계를 완료하십시오.
자체 관리형 Kafka 이벤트 소스 매핑에서 이러한 문제를 해결하려면 다음 작업을 수행하십시오.
- 자체 관리형 Kafka 이벤트 소스 매핑에서 사용하는 서브넷이 포함된 VPC에 Lambda VPC 엔드포인트 및 STS VPC 엔드포인트를 생성합니다.
- 보안 암호로 이벤트 소스 매핑을 구성한 경우 Secrets Manager용 VPC 엔드포인트를 생성합니다.
- 장애 발생 대상을 사용하여 이벤트 소스 매핑을 구성한 경우 장애 발생 대상의 VPC 엔드포인트를 생성합니다. 대상의 예로 Amazon SNS 또는 Amazon S3가 있습니다.
- 자체 관리형 Kafka 이벤트 소스 매핑의 보안 그룹에서 포트 443의 인바운드 트래픽을 허용하는 보안 그룹으로 VPC 엔드포인트를 구성합니다.
- 포트 443에서 VPC 엔드포인트의 보안 그룹으로의 아웃바운드 트래픽을 허용하도록 자체 관리형 Kafka 이벤트 소스 매핑의 보안 그룹을 구성합니다.
Amazon MSK 이벤트 소스 매핑에 대한 이러한 문제를 해결하려면 다음 작업을 수행하십시오.
- MSK 클러스터를 포함하는 VPC에서 Lambda VPC 엔드포인트 및 STS VPC 엔드포인트를 생성합니다.
- 이벤트 소스 매핑에서 보안 암호를 사용하거나 클러스터가 SASL IAM 인증을 사용하는 경우 Secrets Manager용 VPC 엔드포인트를 생성합니다. 이 엔드포인트는 MSK 클러스터를 포함하는 VPC에 있어야 합니다.
- 장애 발생 대상을 사용하여 이벤트 소스 매핑을 구성한 경우 장애 발생 대상의 VPC 엔드포인트를 생성합니다. 대상의 예로 Amazon SNS 또는 Amazon S3가 있습니다. 이 VPC 엔드포인트는 MSK 클러스터를 포함하는 VPC에 있어야 합니다.
- MSK 클러스터가 사용하는 보안 그룹의 포트 443에서 인바운드 트래픽을 허용하는 보안 그룹으로 VPC 엔드포인트를 구성합니다.
중요: Lambda 함수의 보안 그룹이 아닌 MSK 클러스터 보안 그룹이 인바운드 트래픽을 허용합니다. - 포트 443에서 VPC 엔드포인트의 보안 그룹으로의 아웃바운드 트래픽을 허용하도록 MSK 클러스터의 보안 그룹을 구성하십시오.
VPC 정책 또는 실행 역할 관련 문제 해결
실행 역할 관련 문제 확인
STS VPC 엔드포인트 리소스 정책에 구성 문제가 있는 경우 다음 오류가 발생합니다.
"PROBLEM: Lambda failed to assume your function execution role."
이 문제를 해결하려면 다음 작업을 수행하십시오.
- lambda.amazonaws.com 서비스 보안 주체가 IAM 역할의 신뢰 정책에 신뢰할 수 있는 서비스로 나열되어 있는지 확인합니다.
- STS VPC 엔드포인트 정책에서 Lambda 서비스 보안 주체가 sts:AssumeRole을 호출하도록 허용하는지 확인합니다. VPC를 구성하는 방법에 대한 자세한 내용은 네트워크 보안 구성을 참조하십시오.
Lambda VPC 엔드포인트에 대해 제한적인 VPC 엔드포인트 정책이 있는 경우 다음과 같은 오류가 발생합니다.
"No VPC endpoint policy allows the lambda:InvokeFunction action"
이러한 문제를 해결하려면 Lambda VPC 엔드포인트 정책에서 Lambda 서비스 보안 주체가 lambda:InvokeFunction을 호출하도록 허용해야 합니다.
참고: 장애 발생 대상을 Amazon Simple Queue Service(Amazon SQS) 대기열, Amazon SNS 주제 또는 Amazon S3 버킷으로 구성할 수 있습니다. 이러한 대상을 사용할 때는 VPC 엔드포인트 정책이 Lambda 실행 역할에서 필요한 작업을 허용하는지 확인하십시오.
보안 암호 액세스 관련 문제 확인
Secrets Manager 보안 암호에 액세스하는 데 문제가 있는 경우 다음 오류가 발생합니다.
"PROBLEM: Lambda is unable to call secretsmanager:GetSecretValue. Reason: User: Lambda execution role is not authorized to perform: secretsmanager:GetSecretValue on resource: Secret in Secrets Manager with an explicit deny in a VPC endpoint policy."
이 문제를 해결하려면 VPC 엔드포인트 리소스 정책에서 Lambda 실행 역할이 보안 암호에 대한 secretsmanager:GetSecretValue를 호출할 수 있도록 허용하는지 확인합니다. Secrets Manager에서 보안 암호를 가져오기 위해 Lambda는 Lambda 서비스 보안 주체가 아닌 실행 역할을 사용합니다.
보안 암호 관련 문제 해결
보안 암호 구성 확인
보안 암호가 이벤트 소스 매핑에서 사용할 수 있는 형식이 아닌 경우 다음 오류가 발생합니다.
"PROBLEM: Certificate and/or private key must be in PEM format."
이 문제를 해결하려면 X.509 인증서 파일의 키가 .pem 형식이어야 합니다. 인증서가 올바른 형식인지 확인하려면 다음 명령을 실행합니다.
openssl x509 -in PEM FILE -text
참고: PEM FILE을 .pem 파일 이름으로 바꾸십시오.
또한 프라이빗 키 암호화에 PBES2 알고리즘이 아닌 PBES1 알고리즘이 사용되는지 확인하십시오.
자세한 내용은 제공된 인증서 또는 프라이빗 키가 Amazon MSK에 유효하지 않음 또는 자체 관리형 Kafka의 클라이언트 인증서 보안 암호 구성을 참조하십시오.
보안 암호 값의 형식 확인
서버 로그인 시도가 실패하면 다음과 같은 오류가 발생합니다.
"PROBLEM: SASL authentication failed."
Amazon MSK 주제가 Lambda 함수를 호출하면 함수가 Secrets Manager가 SASL/SCRAM으로 보호하는 사용자 이름과 암호에 액세스할 수 있습니다. Lambda가 사용자 이름과 암호를 유효한 것으로 인식하지 못하면 위 오류가 발생합니다. 이 문제를 해결하려면 브로커에 로그인한 다음 액세스 로그를 확인하십시오. 자세한 내용은 Amazon MSK의 경우 SASL/SCRAM 인증 또는 자체 관리형 Kafka의 경우 SASL/SCRM 인증을 참조하십시오.
이벤트 소스 매핑의 서버 설정 관련 문제 해결
이벤트 소스 매핑이 DNS 서버에 도달할 수 있는지 확인
이벤트 소스 매핑이 호스트 이름을 IP 주소로 전환할 수 없는 경우 다음 오류가 발생합니다.
"PROBLEM: The provided Kafka broker endpoints cannot be resolved."
이 문제를 해결하려면 이벤트 소스 매핑이 호스트 이름을 변환하는 DNS 서버에 도달할 수 있어야 합니다. 엔드포인트의 호스트 이름이 프라이빗 네트워크에 있는 경우 호스트 이름을 변환할 수 있는 DNS 설정이 있는 VPC를 사용하도록 이벤트 소스 매핑을 구성합니다.
이벤트 소스 매핑 서버 설정의 구성을 확인
서버가 이벤트 소스 매핑 설정에서 구성한 서버와 다른 경우 다음 오류가 발생합니다.
"PROBLEM: Server failed to authenticate Lambda or Lambda failed to authenticate server."
이 문제를 해결하려면 설정의 서버 호스트 이름이 연결 중인 서버의 내부 서버 이름과 일치하는지 확인합니다.
이벤트 소스 매핑에 클러스터 주제의 레코드를 폴링할 수 있는 권한이 있는지 확인
이벤트 소스 매핑이 레코드를 폴링할 수 있는 액세스 권한이 경우 다음 오류가 발생합니다.
"PROBLEM: Cluster failed to authorize Lambda."
이 문제를 해결하려면 MSK 클러스터 또는 자체 관리형 Kafka 클러스터에 대해 Lambda를 승인하는 데 필요한 권한을 구성합니다.
관련 정보
관련 콘텐츠
질문됨 3년 전
AWS 공식업데이트됨 6달 전