3

응용 프로그램에서 문제가 발생하면 관리자에게 전자 메일을 보내야하는 웹 응용 프로그램이 있습니다. 예를 들어, 새로운 사용자가 등록됩니다.SQS 또는 SNS를 사용하여 전자 메일 보내기

응용 프로그램 내부에서 전자 메일을 작성/전송하는 논리는 피하고 싶습니다. 차라리 응용 프로그램이 대기열에 메시지를 게시 한 다음 전자 메일을 보내기 위해 제대로 응답하고 응답하는 다른 시스템이있는 것을 선호합니다.

흐름이 비슷할 것입니다.

  • 애플리케이션 큐 (SQS 또는 SNS ??)
  • 람다 함수 인 트리거에 메시지를 발행한다. 람다는 메시지를 읽고 SES를 호출합니다. 즉,이 일을하는 가장 좋은 방법 인 경우
  • SES는 잘 모르겠어요 이메일

를 보냅니다. 나는 SQS와 람다 사이에 차이가 있음을 읽었다. SNS가 더 좋을까요?

적절한 흐름은 무엇입니까?

응용 프로그램 -> SQS -> 람다 -> SES

또는

응용 프로그램 -> SNS -> 람다 -> 다른 어쩌면 뭔가 SES

?

아이디어는 항상 모든 논리에서 웹 응용 프로그램을 추상화하는 것을 고려하십시오. 웹 응용 프로그램은 어딘가에 만 메시지를 게시합니다. 그런 다음 마술이 백그라운드에서 발생합니다.

답변

1

알림을 수신하기 위해 토픽 구독자 여야하므로 이메일에 대한 SNS를 이메일에서 빼십시오. AWS 관련 이벤트 알림을위한 것입니다.

SQS를 사용하면 Limits Related to Messages을 처리해야합니다. 기본 최대 메시지 크기는 256KB입니다. 특별한 SDK를 사용하지 않으면 2GB입니다.

세 번째 옵션을 고려하십시오. App -> DB -> Lambda -> SES

DB에있는 메일 대기열은 쉬운 테이블 구조이며, Lambda는 예약 또는 이벤트 기반 방식으로 스캔하여 SES를 통해 메일을 처리합니다. 이렇게하면 SQS 메시지 제한이 없습니다.

App -> SQS -> Lambda -> SES

난 그냥 응용 프로그램에서 Lambda 기능을 실행하거나 근로자로 주기적으로 실행하는 크론를 사용하는 SNS을 사용하십시오 : 당신의 설명을 바탕으로

+0

메시지 제한에 대해 걱정할 필요가 없습니다 (여전히 알아두면 좋음).앱이 사용자를 나타내는 ID 또는 토큰을 메시지로 게시하기 때문입니다. 전자 메일의 내용은 다른 곳에있는 템플리트에 있습니다. 당신은 이것을 알고 나서 당신의 추천에 충실합니까?. 감사합니다. – osotorrio

+1

SNS를 너무 빨리 생략하지 않겠습니다. AWS 관련 알림뿐만 아니라 모든 알림을 전송하기 위해 만들어졌습니다. 이벤트는 SQS 대기열로 이동할 수 있으며 각 대기열에서 SNS 알림이 트리거됩니다. SES 대신 SNS를 직접 사용하면 알림 배달을보다 효율적으로 제어 할 수 있습니다. 예를 들어, 시간이나 주제에 따라 알림 규칙이있는 경우 논리에서 SNS 주제를 선택할 수 있으며 각 SNS 주제에는 구독 된 적절한 이메일 주소가 있습니다. – jbird

+0

질문은 전자 메일을 직접 보내지 않고 SNS를 사용하여 람다 (Lambda) 기능을 시작하는 것에 관한 것입니다. 이 시나리오에서는 SNS 해고가 부당합니다. 사실 나는 SNS-> Lambda-> SES가 질문받는 질문에 대한 가장 우아하고 어리석은 해결책이라고 생각하며 일정에 따라 실행되는 Lambda에 의존하지 않는 유일한 해결책을 제안합니다. –

1

, 나는 다음과 같은 구조를 제안 할 것 대기열에 있습니다. SNS은 메시지를 지속하지 않는 pub/sub 서비스입니다.

이 아키텍처는 메일 서비스에서 응용 프로그램을 분리하고 비동기 호출 및 대기열을 제공합니다. 더 큰 페이로드를 보내야하는 경우 S3을 사용하여 이러한 개체를 저장하고 SQS 키의 키를 Lambda에 전달하면됩니다.

관련 문제