Amazon SNS 배달 못한 편지 대기열(DLQ) - Amazon Simple Notification Service

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

Amazon SNS 배달 못한 편지 대기열(DLQ)

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

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

  • FIFO 주제의 경우 Amazon SQS 대기열을 Amazon SNS 구독에 대한 DLQ(Dead Letter Queue)로 사용할 수 있습니다. FIFO 주제 구독은 FIFO 대기열을 사용하고, 표준 주제 구독은 표준 대기열을 사용합니다.

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

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

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

클라이언트 측 오류

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

서버 측 오류

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

고객 관리형 엔드포인트(예: HTTP, SMTP, SMS 또는 모바일 푸시)도 서버 측 오류가 발생하는 원인이 될 수 있습니다. Amazon SNS는 이러한 유형의 엔드포인트로 전송 역시 재시도합니다. HTTP 엔드포인트에서 고객이 정의하는 재시도 정책이 지원되지만 Amazon SNS는 SMTP, SMS 및 모바일 푸시 엔드포인트에 대해 내부 전송 재시도 정책을 6시간 동안 50회로 설정합니다.

배달 못한 편지 대기열의 작동 방식

메시지 전송은 구독 수준에서 이루어지기 때문에 배달 못한 편지 대기열은 주제가 아닌 Amazon SNS 구독에 연결됩니다. 이를 통해 각 메시지의 원래 대상 엔드포인트를 보다 쉽게 식별할 수 있습니다.

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

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

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

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

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

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

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

  • Amazon SQS 소비자 로직 작성 방지 – 배달 못한 편지 대기열을 Lambda 함수에 대한 이벤트 소스로 설정하여 배달 못한 편지 대기열을 비웁니다.

  • Amazon SQS 소비자 로직 작성 – Amazon SQS API, AWS SDK 또는 AWS CLI를 사용하여 사용자 지정 소비자 로직을 작성함으로써 배달 못한 편지 대기열의 메시지를 폴링, 처리 및 삭제합니다.

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

Amazon CloudWatch 지표를 사용하여 Amazon SNS 구독에 연결된 배달 못한 편지 대기열을 모니터링할 수 있습니다. 모든 Amazon SQS 대기열은 1분 간격으로 CloudWatch 지표를 보냅니다. 자세한 정보는 Amazon Simple Queue Service 개발자 안내서Amazon SQS에 사용 가능한 CloudWatch 지표를 참조하세요. 배달 못한 편지 대기열이 있는 모든 Amazon SNS 구독에서도 CloudWatch 지표를 내보냅니다. 자세한 내용은 CloudWatch를 사용하여 Amazon SNS 주제 모니터링 섹션을 참조하세요.

배달 못한 편지 대기열의 활동에 대한 알림을 받으려면 CloudWatch 지표와 경보를 사용할 수 있습니다. 예를 들어 배달 못한 편지 대기열이 항상 비어 있기를 원하는 경우 NumberOfMessagesSent 지표에 대한 CloudWatch 경보를 생성할 수 있습니다. 경보 임계값을 0으로 설정하고 경보가 울릴 때 알림을 받을 Amazon SNS 주제를 지정할 수 있습니다. 이 Amazon SNS 주제는 모든 엔드포인트 유형(예: 이메일 주소, 전화번호 또는 모바일 호출기 앱)에 경보 알림을 전송할 수 있습니다.

CloudWatch Logs를 사용하면 Amazon SNS 전송이 실패하고 메시지가 배달 못한 편지 대기열로 이동한 원인이 되는 예외적인 상황을 조사할 수 있습니다. Amazon SNS는 CloudWatch에 성공한 전송과 실패한 전송을 모두 로그할 수 있습니다. 자세한 내용은 Amazon SNS 메시지 전송 상태 섹션을 참조하세요.