Amazon SNS가 AWS Lambda 함수를 호출하지 않는 이유는 무엇이며 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 11월 4일

AWS Lambda 함수를 사용하여 Amazon Simple Notification Service(Amazon SNS) 알림을 처리하고 있지만 Amazon SNS 주제가 함수를 호출하지 않습니다. Lambda 함수를 호출하지 않는 Amazon SNS 알림 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon SNS 메시지 이벤트SNS 주제를 구독하는 Lambda 함수를 호출하지 않는 5가지 이유는 다음과 같습니다.

해결 방법

SNS 주제에 대한 IAM 자격 증명 게시에 SNS 주제에 게시하는 데 필요한 권한이 있는지 확인합니다.

Amazon SNS에 대한 Amazon CloudWatch 지표NumberOfMessagesPublished 지표를 확인하세요. 함수를 호출하는 데 사용하는 IAM 엔터티에서 수행한 Publish 요청이 NumberOfMessagesPublished 지표에 기록되지 않은 경우 다음을 수행합니다.

1.    Publish API 요청을 수행하는 IAM 엔터티에 SNS 주제에 게시하는 데 필요한 권한이 있는지 확인합니다. 자세한 내용과 구체적인 정책 문 예는 Amazon SNS 액세스 제어 사례를 참조하세요.

2.    SNS 주제에 대한 권한 정책이 Publish API를 호출하는 IAM 엔터티가 "SNS:Publish" 작업을 사용하도록 허용하는지 확인합니다. 자세한 내용과 권한 정책 예는 Amazon SNS 주제에 대한 권한을 참조하세요.

Amazon SNS가 함수를 호출하도록 허용하는 데 필요한 권한이 Lambda 함수에 있는지 확인합니다.

함수의 권한 정책을 보려면 AWS Lambda에 대한 리소스 기반 정책 사용 지침을 따르세요. 함수의 정책에 SNS 주제에 대한 "lambda:invokeFunction" 작업이 포함되어 있지 않은 경우 필요한 권한을 포함하도록 정책을 업데이트하세요.

Lambda 함수의 필터 정책이 SNS 주제에서 전송되는 메시지 속성과 일치하는지 확인합니다.

Amazon SNS에 대한 CloudWatch 지표에서 NumberOfNotificationsFilteredOut 지표를 검토합니다. 함수를 호출하는 IAM 엔터티에서 수행한 Publish 요청이 NumberOfNotificationsFilteredOut 지표에 나타나는 경우 다음을 수행합니다.

1.    다음을 수행하여 Lambda 함수의 SNS 주제 구독 필터 정책을 확인합니다.
Amazon SNS 콘솔을 엽니다.
왼쪽 탐색 패널에서 [구독(Subscriptions)]을 선택합니다.
[편집(Edit)] 페이지에서 [구독 필터 정책(Subscription filter policy)] 섹션을 확장합니다.

2.    구독 필터 정책을 검토하여 Publish 요청 메시지 속성이 필터 정책에 필요한 속성과 일치하는지 확인합니다. 속성이 일치하지 않으면 Publish 요청 메시지 속성을 업데이트하여 필터 정책에 필요한 속성과 일치시킵니다.

참고: 자세한 내용은 Amazon SNS 구독 필터 정책을 참조하세요.

Lambda 함수가 조절되지 않는지 확인합니다.

Lambda 함수가 SNS 주제와 동일한 리전에서 호스팅되는지 확인합니다.

참고: AWS 리전에서 호스팅되는 Amazon SNS 주제는 동일한 리전에 없는 Lambda 함수를 호출할 수 없습니다. Amazon SNS에서 지원하는 리전의 현재 목록은 Amazon Simple Notification Service 엔드포인트 및 할당량을 참조하세요.

Lambda 함수의 Amazon 리소스 이름(ARN)과 Amazon SNS 주제를 살펴보세요. Amazon SNS 주제가 상용 AWS 리전에서 호스팅되고 함수가 옵트인 리전에서 호스팅되는 경우 다음을 수행합니다.

1.    Amazon SNS 주제와 동일한 리전에서 새 Lambda 함수를 생성합니다.

2.    옵트인 리전에서 호스팅되는 함수에 대한 Invoke API를 호출하도록 함수의 설정을 구성합니다.

중요: SDK 리전 설정을 업데이트해야 합니다.

리전 설정을 변경하는 예제 Python(Boto 3) 명령

#us-east-1 client
lambda_us_east_1_client = boto3.client('lambda',  region_name='us-east-1')
#us_west_1 client
lambda_us_west_1_client = boto3.client('lambda',  region_name='us-west-1')

리전 설정을 변경하는 예제 JavaScript/Node.js 명령

//us-east-1 client
var lambda_us_east_1_client = new AWS.Lambda({apiVersion: '2015-03-31',region: 'us-east-1'});
//us_west_1 client
var lambda_us_east_1_client = new AWS.Lambda({apiVersion: '2015-03-31', region: 'us-west-1'});

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?