Amazon SNS 데드 레터 대기열 - Amazon Simple Notification Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SNS 데드 레터 대기열

데드 레터 대기열은 구독자에게 성공적으로 전달할 수 없는 메시지에 대해 Amazon SNS 구독이 대상으로 지정할 수 있는 Amazon SQS 대기열입니다. 클라이언트 오류 또는 서버 오류로 인해 배달할 수 없는 메시지는 추가 분석 또는 재처리를 위해 배달 못한 편지 대기열에 보관됩니다. 자세한 내용은 구독에 대한 Amazon SNS 데드 레터 대기열 구성Amazon SNS 메시지 전송 재시도 단원을 참조하세요.

참고
  • Amazon SNS 구독 및 Amazon SQS 대기열은 동일한 AWS 계정 및 리전 아래에 있어야 합니다.

  • FIFO 주제 의 경우 Amazon SQS 대기열을 Amazon SNS 구독의 데드 레터 대기열로 사용할 수 있습니다. FIFO 주제 구독은 FIFO 대기열을 사용하고 표준 주제 구독은 표준 대기열을 사용합니다.

  • 암호화된 Amazon SQS 대기열을 데드 레터 대기열로 사용하려면 Amazon SNS 서비스 보안 주체에게 작업에 대한 액세스 권한을 부여하는 키 정책KMS이 있는 사용자 지정을 AWS KMS API 사용해야 합니다. 자세한 내용은 서버 측 암호화로 Amazon SNS 데이터 보호 이 설명서의 와 서버 측 암호화를 사용하여 Amazon SQS 데이터 보호(SSE) 및 AWS KMS Amazon Simple Queue Service 개발자 안내서의 를 참조하세요.

메시지 전송이 실패하는 이유

일반적으로 클라이언트 측 또는 서버 오류로 인해 Amazon이 구독한 엔드포인트에 액세스할 SNS 수 없는 경우 메시지 전송이 실패합니다. Amazon이 클라이언트 측 오류를 SNS 수신하거나 해당 재시도 정책에 지정된 재시도 횟수를 초과하는 메시지에 대해 서버 측 오류를 계속 수신하면 Amazon은 구독에 데드 레터 대기열이 연결되어 있지 않은 한 메시지를 SNS 삭제합니다. 전송이 실패해도 구독의 상태는 바뀌지 않습니다. 자세한 내용은 Amazon SNS 메시지 전송 재시도 단원을 참조하십시오.

클라이언트 측 오류

Amazon에 오래된 구독 메타데이터SNS가 있는 경우 클라이언트 측 오류가 발생할 수 있습니다. 이러한 오류는 일반적으로 소유자가 엔드포인트를 삭제하거나(예: Amazon SNS 주제를 구독한 Lambda 함수) 소유자가 구독한 엔드포인트에 연결된 정책을 변경하여 Amazon이 엔드포인트에 메시지를 전달SNS하지 못하도록 할 때 발생합니다. AmazonSNS은 클라이언트 측 오류로 인해 실패한 메시지 전송을 다시 시도하지 않습니다.

서버 측 오류

구독 엔드포인트를 담당하는 시스템을 사용할 수 없게 되거나 Amazon 에서 유효한 요청을 처리할 수 없음을 나타내는 예외를 반환할 때 서버 측 오류가 발생할 수 있습니다SNS. 서버 측 오류가 발생하면 Amazon은 선형 또는 지수 백오프 함수를 사용하여 실패한 전송을 SNS 재시도합니다. Amazon SQS 또는 에서 지원하는 AWS 관리형 엔드포인트로 인해 발생하는 서버 측 오류의 경우 AWS Lambda Amazon은 23일 동안 최대 100,015회 전송을 SNS 재시도합니다.

고객 관리형 엔드포인트(예: HTTP, SMTPSMS, 또는 모바일 푸시)도 서버 측 오류를 일으킬 수 있습니다. AmazonSNS은 이러한 유형의 엔드포인트로의 전송도 다시 시도합니다. HTTP 엔드포인트는 고객 정의 재시도 정책을 지원하는 반면 Amazon은 , SMTP SMS및 모바일 푸시 엔드포인트에 대해 내부 전송 재시도 정책을 6시간에 걸쳐 50회로 SNS 설정합니다.

DLQ(Dead Letter Queue)의 작동 방식

SNS 구독 수준에서 메시지 전송이 발생하기 때문에 데드 레터 대기열이 Amazon 구독(주제 아님)에 연결됩니다. 이를 통해 각 메시지의 원래 대상 엔드포인트를 보다 쉽게 식별할 수 있습니다.

Amazon SNS 구독과 연결된 데드 레터 대기열은 일반 Amazon SQS 대기열입니다. 메시지 보존 기간에 대한 자세한 정보는 Amazon Simple Queue Service 개발자 안내서메시지 관련 할당량을 참조하세요. Amazon SQS SetQueueAttributes API 작업을 사용하여 메시지 보존 기간을 변경할 수 있습니다. 애플리케이션의 복원력을 높이려면 배달 못한 편지 대기열의 최대 보존 기간을 14일로 설정하는 것이 좋습니다.

메시지가 배달 못한 편지 대기열로 이동하는 방식

메시지는 리드라이브 정책을 사용하여 배달 못한 편지 대기열로 이동합니다. 리드라이브 정책은 데드 레터 대기열ARN의 를 참조하는 JSON 객체입니다. deadLetterTargetArn 속성은 를 지정합니다ARN. 는 Amazon SNS 구독과 동일한 AWS 계정 및 리전의 Amazon SQS 대기열을 가리켜ARN야 합니다. 자세한 내용은 구독에 대한 Amazon SNS 데드 레터 대기열 구성 단원을 참조하십시오.

다음 JSON 객체는 SNS 구독에 연결된 샘플 리드라이브 정책입니다.

{ "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue" }

배달 못한 편지 대기열로부터 메시지를 이동하는 방법

다음 두 가지 방법을 사용하여 메시지를 배달 못한 편지 대기열로부터 이동할 수 있습니다.

  • Amazon SQS 소비자 로직 작성 금지 - 데드 레터 대기열을 Lambda 함수의 이벤트 소스로 설정하여 데드 레터 대기열을 비웁니다.

  • Amazon SQS 소비자 로직 쓰기 - Amazon API AWS SDK, 또는 SQS AWS CLI 를 사용하여 데드 레터 대기열에서 메시지를 폴링, 처리 및 삭제하기 위한 사용자 지정 소비자 로직을 작성합니다.

배달 못한 편지 대기열을 모니터링 및 로깅하는 방법

Amazon CloudWatch 지표를 사용하여 Amazon SNS 구독과 연결된 데드 레터 대기열을 모니터링할 수 있습니다. 모든 Amazon SQS 대기열은 1분 간격으로 CloudWatch 지표를 내보냅니다. 자세한 내용은 Amazon Simple Queue Service 개발자 안내서의 Amazon에 사용 가능한 CloudWatch 지표SQS를 참조하세요. 데드 레터 대기열이 있는 모든 Amazon SNS 구독도 CloudWatch 지표를 내보냅니다. 자세한 내용은 를 사용하여 Amazon SNS 주제 모니터링 CloudWatch 단원을 참조하십시오.

데드 레터 대기열의 활동에 대한 알림을 받으려면 CloudWatch 지표와 경보를 사용할 수 있습니다. 이 지표는 처리 시도 실패DLQ로 인해 NumberOfMessagesSent 로 전송된 메시지를 캡처하지 않으므로 지표에 대한 경보를 설정하는 것은 적합하지 않습니다. 대신 처리 실패로 인해 이동한 메시지를 DLQ포함하여 현재 에서 사용할 수 있는 모든 메시지를 캡처하는 ApproximateNumberOfMessagesVisible 지표를 사용합니다.

CloudWatch 경보 설정 예
  1. ApproximateNumberOfMessagesVisible 지표에 대한 CloudWatch 경보를 생성합니다.

  2. 경보 임계값을 1(또는 예상 및 DLQ 트래픽에 따라 다른 적절한 값)로 설정합니다.

  3. 경보가 꺼질 때 알림을 받을 Amazon SNS 주제를 지정합니다. 이 Amazon SNS 주제는 모든 엔드포인트 유형(예: 이메일 주소, 전화번호 또는 모바일 호출기 앱)에 경보 알림을 전달할 수 있습니다.

CloudWatch 로그를 사용하여 Amazon SNS 전송이 실패하고 메시지가 데드 레터 대기열로 전송되는 예외를 조사할 수 있습니다. AmazonSNS은 에서 성공 및 실패한 전송을 모두 기록할 수 있습니다 CloudWatch. 자세한 내용은 Amazon SNS 모바일 앱 속성 단원을 참조하십시오.