Amazon SNS의 메시지 필터링 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Simple Notification Service(SNS) 주제에서 게시하는 동안 내 메시지가 필터링됩니다.

간략한 설명

기본적으로 Amazon SNS 주제 구독자는 주제에 게시된 모든 메시지를 수신합니다. 메시지의 일부만 수신하려면 구독자가 주제 구독에 필터 정책을 할당해야 합니다. 자세한 내용은 Amazon SNS 메시지 필터링을 참조하세요.

FilterPolicyScope 구독 속성을 사용하면 다음 값 중 하나를 설정하여 필터링 범위를 선택할 수 있습니다.

  • MessageAttributes: 필터 정책이 메시지 속성에 적용됩니다. 이는 기본값입니다.
  • MessageBody: 필터 정책이 메시지 본문에 적용됩니다.

참고: 구독 필터 정책을 적용할 때 필터 정책 범위가 정의되지 않은 경우 범위는 기본적으로 MessageAttributes로 설정됩니다.

해결 방법

메시지 필터링과 관련된 몇 가지 일반적인 문제와 이러한 문제를 해결하는 방법은 다음과 같습니다.

Amazon SNS 구독에는 15분 대기 시간이 적용되는 필터 정책이 있습니다.

AWS Identity and Access Management(IAM) 와 Amazon SNS는 최종 일관성이라는 분산 컴퓨팅 모델을 사용합니다. 구독 필터 정책에 대한 추가 또는 변경 사항이 완전히 적용되려면 최대 15분이 걸립니다. 이 기간은 줄일 수 없습니다.

오류: 값의 총합(120)은 100을 초과할 수 없습니다.

Amazon SNS 구독 필터 정책의 AWS 계정당 주제별 기본 한도는 200입니다. AWS 계정당 필터 정책의 한도는 10,000입니다.

Amazon SNS 구독 필터 정책 한도를 늘리려면 내부 서비스 팀의 승인이 필요합니다. 승인은 사용 사례, 리전, 게시된 메시지 수, 구독 세부 정보 수 등의 요인을 기준으로 합니다.

Amazon SNS 구독 필터 정책에 대한 요구 사항이 증가할 것으로 예상되면 다른 옵션을 고려해 보세요.

가능한 해결 방법

  • 주제 구독과 관련된 동일한 필터 정책에 여러 조건(또는 필터)을 사용합니다.
  • Amazon SNS 주제에 대해 AWS Lambda 함수를 구독하고 Lambda 함수 코드에서 필터 로직을 처리합니다. Lambda 함수가 구독을 통해 필터 로직을 처리하고 메시지 속성을 기준으로 다른 SNS 주제에 게시합니다.

오류: AuthorizationErrorException

이 오류는 SetSubscriptionAttributes 요청을 보내는 사용자 또는 역할에 충분한 권한이 없을 때 나타납니다.

사용자에게 SetSubscriptionAttributes 권한을 추가한 다음 구독 필터 정책을 편집합니다. 권한 추가에 대한 자세한 내용은 Amazon SNS에서 ID 기반 정책 사용을 참조하세요.

이 오류는 일반적으로 교차 계정 환경에서 권한 문제가 있는 경우에도 발생합니다. 예를 들어, Amazon SNS에서 교차 계정을 설정한 경우가 있습니다. SetSubscriptionAttributes API 호출을 사용하여 구독에 필터 정책을 추가하는 사용자에게 "이 구독에 액세스하는 데 필요한 권한 없음"이라는 오류가 발생합니다.

SetSubscriptionAttributes를 사용하면 구독 소유자가 구독에 대해 속성과 유사한 필터 정책을 설정할 수 있습니다. SNS에서 교차 계정을 설정한 경우(예: Amazon SNS-Amazon Simple Queue Service 교차 계정) 구독 소유자는 구독 생성을 위해 Subscribe API를 호출하는 데 사용되는 AWS 계정입니다. 구독을 소유하지 않은 다른 계정의 사용자는 SetSubscriptionAttributes API 호출을 사용하여 구독에 필터 정책을 추가하려고 할 수 있습니다. 이제 이 사용자에게 "이 구독에 액세스하는 데 필요한 권한 없음" 오류가 표시됩니다.

올바른 필터 정책을 적용한 후에도 SNS 주제에 알림이 전송되지 않음

구독은 다음과 같은 조건에서 메시지를 수락합니다.

  • 필터 정책 범위가 MessageAttributes로 설정됨
  • 필터 정책 범위가 MessageBody로 설정됨

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

문제를 해결하고 조사하려면 다음을 확인하세요.

  • 올바른 메시지 속성을 전달했는지 확인하세요.
  • 메시지 본문 필터링의 경우 메시지 페이로드가 올바른 형식의 JSON 객체인지 확인하세요. 자세한 내용은 페이로드 기반 메시지 필터링에 대한 이 블로그를 참조하세요.
  • 여기에 표시된 SNS Amazon CloudWatch 지표를 확인하여 해당 지표에 대한 데이터 포인트가 채워져 있는지 확인하세요.

NumberOfNotificationsFilteredOut: 구독 필터 정책에 의해 거부된 메시지 수입니다. 필터 정책은 메시지 속성이 정책 속성과 일치하지 않는 경우 메시지를 거부합니다.

NumberOfNotificationsFilteredOut-MessageAttributes: 속성 기반 필터링에 대한 구독 필터 정책에 의해 거부된 메시지 수입니다.

NumberOfNotificationsFilteredOut-MessageBody: 페이로드 기반 필터링에 대한 구독 필터 정책에 의해 거부된 메시지 수입니다.

NumberOfNotificationsFilteredOut-InvalidAttributes: 메시지 속성이 유효하지 않아 구독 필터 정책에 의해 거부된 메시지 수입니다. 예를 들어, 속성 JSON 형식이 잘못되어 메시지가 거부되었습니다.

NumberOfNotificationsFilteredOut-NoMessageAttributes: 메시지에 속성이 없어서 구독 필터 정책에 의해 거부된 메시지 수입니다.

NumberOfNotificationsFilteredOut-InvalidMessageBody: 메시지 본문이 필터링에 적합하지 않아 구독 필터 정책에 의해 거부된 메시지 수입니다. 예를 들어, 메시지에 유효하지 않은 JSON 메시지 본문이 있습니다.

자세한 내용은 Amazon SNS 지표를 참조하세요.

관련 정보

Amazon SNS 리소스

AWS 공식
AWS 공식업데이트됨 9달 전
댓글 없음