Amazon SNS 주제의 알림을 성공적으로 수신하기 위해 Amazon SQS 구독을 진행하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 8일

내 Amazon Simple Queue Service(Amazon SQS) 구독이 Amazon Simple Notification Service(Amazon SNS) 주제의 알림을 받지 못합니다.

간략한 설명

시작하기 전에 SNS 주제에 대해 Amazon CloudWatch 전송 상태 로깅을 구성합니다. 자세한 내용은 CloudWatch를 사용하여 Amazon SNS 주제 모니터링을 참조하세요.

그리고 다음 문제 해결 단계를 시도해 보세요.

해결 방법

Amazon SNS가 메시지를 보낼 수 있도록 SQS 대기열의 액세스 정책을 구성합니다.

SQS 대기열의 액세스 정책을 보려면 액세스 정책을 구성합니다.

SQS 대기열의 액세스 정책에 SNS 주제에 대한 "sqs:SendMessage" 작업이 포함되어 있지 않으면 올바른 권한으로 정책을 업데이트합니다. 권한은 Amazon SNS가 SQS 대기열로 메시지를 보낼 수 있도록 허용해야 합니다.

SQS 대기열에서 서버 측 암호화를 사용할 수 있도록 AWS KMS 키 정책을 구성합니다.

SQS 대기열에서 서버 측 암호화가 활성화된 경우 다음을 수행해야 합니다.

1.    AWS KMS 키 상태를 활성화합니다.

2.    SQS 대기열에서 고객 관리형 키를 사용하고 있는지 확인합니다. KMS 키에는 Amazon SNS에 올바른 권한을 부여하는 AWS Key Management Service(AWS KMS) 키 정책이 있어야 합니다.

SNS 이벤트 소스에서 kms:GenerateDataKeykms:Decrypt API 작업을 수행하도록 허용하려면 KMS 키 정책에 다음 문을 추가합니다.

{<br>    "Sid": "Allow Amazon SNS to use this key",<br>    "Effect": "Allow",<br>    "Principal": {<br>        "Service": "sns.amazonaws.com"<br>   
    },<br>    "Action": [<br>        "kms:Decrypt",<br>        "kms:GenerateDataKey*"<br>    ],<br>    "Resource": "*"<br>}

KMS 키 정책이 구성되지 않은 경우 Amazon SNS 메시지 전송 상태 로그에 다음 KMS.AccessDeniedException 오류가 표시됩니다.

{<br>    "notification": {<br>        "messageMD5Sum": "1234567890abcdefghijklmnopqrstu0",<br>        "messageId": "abcdef01-gh23-4i5j-678k-90l23m45nopq",<br>       
    "topicArn": "arn:aws:sns:us-east-1:111111111111:sns",<br>        "timestamp": "2021-06-17 17:08:10.299"<br>    },<br>    "delivery": {<br>        "deliveryId": "12a3b4c5-6789-0de1-fgh2-ij34k56lmn78",<br>        "destination": "arn:aws:sqs:us-east-1:111111111111:sns-sqs",<br>        "providerResponse": "{\"ErrorCode\":\"KMS.AccessDeniedException\",\"ErrorMessage\":\"null
    (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: 12a345b6-7c89-0d1e-2f34-5gh67i8kl901; Proxy: null)\",\"sqsRequestId\":\"Unrecoverable\"}",<br>        "dwellTimeMs": 60,<br>       
    "attempts": 1,<br>        "statusCode": 400<br>    },<br>    "status": "FAILURE"<br>}

구독한 SQS 대기열의 필터 정책이 SNS 주제에서 보낸 메시지와 일치하는지 확인합니다.

Amazon SNS에 대한 CloudWatch 지표에서 NumberOfNotificationsFilteredOut 지표를 검토합니다.

함수를 호출하는 AWS Identity and Access Management(IAM) 엔터티에서 수행한 Publish 요청은 NumberOfNotificationsFilteredOut 지표에 나타날 수 있습니다. 이 시나리오에서는 SQS 대기열의 SNS 주제 구독 필터 정책을 확인합니다.

1.    Amazon SNS 콘솔을 엽니다.

2.    탐색 창에서 [구독(Subscriptions)]을 선택합니다.

3.    구독을 선택한 다음 [편집(Edit)]을 선택합니다.

4.    [구독 필터 정책(Subscription filter policy)] 섹션을 확장합니다.

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

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

6.    [변경 사항 저장(Save changes)]을 선택합니다.

원시 메시지 전송 문제 해결

SQS 대기열 구독에 대해 원시 메시지 전송을 사용하도록 설정한 경우 게시된 알림에서 메시지 속성을 10개 이하로 전송하고 있는지 확인합니다.

Amazon SNS는 원시 전송 지원 메시지의 메시지 속성을 SQS 메시지 속성에 매핑합니다. 10개 이상의 메시지 속성을 사용하는 경우 알림 전송이 실패하고 전송 상태 로그에 다음 오류 로그가 표시됩니다.

{<br>    "notification": {<br>        "messageMD5Sum": "5c10d6c5d7f246fc3fb85334b4ed55ca",<br>        "messageId": "50f51b06-ee71-56fc-b657-424391902ee7",<br>       
    "topicArn": "arn:aws:sns:us-east-1:111111111111:sns",<br>        "timestamp": "2021-06-17 16:51:45.468"<br>    },<br>    "delivery": {<br>        "deliveryId":
    "36b3ee88-bc85-5587-b2af-b7cdc3644e07",
    <br>        "destination": "arn:aws:sqs:us-east-1:111111111111:sns-sqs",<br>        "providerResponse": "{\"ErrorCode\":\"InvalidParameterValue\",\"ErrorMessage\":\"Number of message
    attributes [SENT DURING PUBLISH] exceeds the allowed maximum [10].\",\"sqsRequestId\":\"Unrecoverable\"}",<br>        "dwellTimeMs": 44,<br>        "attempts": 1,<br>       
    "statusCode": 400<br>    },<br>    "status": "FAILURE"<br>}

SNS FIFO 주제에 대한 알림 전송을 통해 메시지 중복 제거 문제 해결

SNS FIFO 주제는 메시지를 정렬하고 중복을 제거합니다. SNS FIFO 주제로 데이터 중복 제거 ID에 대한 알림이 성공적으로 전송되면 5분 간격 내에 동일한 데이터 중복 제거 ID로 게시된 메시지는 수락되지만 전달되지는 않습니다.

Publish API 작업에서 데이터 중복 제거 ID를 구성할 수 있습니다. 또는 SNS FIFO 주제에 대해 콘텐츠 기반 데이터 중복 제거가 활성화된 경우 메시지 본문을 기반으로 FIFO 주제에서 데이터 중복 제거 ID를 계산합니다.

SNS FIFO 주제는 메시지가 구독된 엔드포인트로 전달된 후에도 메시지 중복 제거 ID를 계속 추적합니다.

자세한 내용은 FIFO 항목에 대한 메시지 중복 제거를 참조하세요.


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


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