AWS SQS + SNS + 람다


11

SQS 대기열에 메시지를 보내고 SNS 주제를 구독하여 이메일을 보내기위한 람다를 트리거 할 수 있는지 궁금합니다.

SQS-> SNS-> (람다)-> SES

SNS 메시지를 SQS로 보낼 수 있다는 것을 알고 있지만 다른 방법으로 가능하다면 궁금합니다.

답변:


11

내가 한 일은 SQS 대기열에 대해 CloudWatch 경보를 생성 ApproximateNumberOfMessagesVisible( >= 1 for 5 minutes)하는 것입니다. 알람은 람다 기능을 트리거하는 SNS 주제에 게시합니다. 람다 함수는 큐를 지울 때까지 반복됩니다.

알람을 트리거하는 데 최대 5 분이 소요될 수 있지만 대기열을 폴링 할 필요없이 배치 예약 작업에 환상적인 효과를 발휘합니다. 활성 큐의 경우 알람 세분성은 5 분입니다.


나는 똑같은 일을 할 생각입니다. 클라우드 워치가 대기열을 확인할 때마다 요금이 청구되는지 알고 있습니까? 우리가 실제로 이런 종류의 것에 대해 더 많은 호기심을 갖고 말하는 것은 아닙니다.
Brian F Leighty

또한, 나는 당신이 말하는 알람에서 알람의 SNS를 계속해서 보내고 있다고 가정합니다. 람다 함수의 시간 초과는 무엇으로 설정되어 있습니까?
Brian F Leighty

다른 것. 모든 의견에 대해 죄송합니다. 나는 "대략적인"부분에 대해 조금 걱정했다. 거기에 1 개의 아이템 대신에 단지 0 개의 아이템 만이 있다고 생각했기 때문에 처리되지 않은 메시지가있는 시간이 있었습니까?
Brian F Leighty

@BrianFLeighty 수표는 무료입니다. 그러나 지속적으로 경보하지는 않습니다. 대기열에 앉아있는 메시지 (람다 실행 완료와 다음 경보 사이에 추가됨)에 대해 두 번째 경보가 필요할 수 있습니다. 폴링이 더 나은 솔루션 일 수 있습니다. 광산은 일반적으로 매우 조용한 대기열에서 작동합니다 (따라서 투표 할 가치가 없습니다.)
오징어

"대략적인"주석이 없습니다. 잘 작동하는 것 같지만 ymmv
squidpickles

7

당신은 갈 수 없습니다 SQS -> SNSSNS -> SQS.

Lambda는 이제 스케줄링을 지원 하므로 하나의 옵션은 Lambda 함수에서 SQS 폴러를 구현하고 자주 실행하는 것입니다.

고려해야 할 또 다른 옵션은 실제로 대기열이 필요한지 여부입니다. Lambda는 이벤트 처리 모드를 통한 비동기 처리를 지원하며 병렬 호출을 처리하기 위해 수평으로 투명하게 확장해야합니다. 람다 함수에 병렬 실행을 제한 할 수있는 중앙 상태 저장소에 대한 액세스가 필요하지 않은 경우 모든 호출을 병렬로 실행할 수 있습니다. 계정 당 100 개의 동시 실행 제한이 있다고 생각하므로 메시지를 일괄 처리해야 할 수도 있습니다.


3
람다와 함께 전통적인 큐 폴러 트릭을 사용하는데도 아무런 문제가 없습니다. 그렇지 않으면 다음에 예정대로 실행하십시오
nik.shornikov

1

SQS대기열은 SNS주제를 구독하여 수신 된 SNS메시지 를 처리 할 수 있습니다 . 현재 추가 코딩 없이는 다른 방향으로는 할 수 없습니다 (예 : LambdaFAQ 참조 ).

어떻게해야하는지 몇 가지 옵션이 있지만 더 일반적인 이벤트 중심 시스템을 사용하는 것만 큼 우아하지는 않습니다 AWS event->SQS->Lambda. 그렇지 않으면 SQS큐가 처리되는 방식으로 코드를 사용자 정의 / 구현해야 할 수도 있습니다 .

  1. 당신은 당신 의 자신의 이벤트 소스를 구현할 수 있습니다
  2. 대기열 을 듣고 SQS 이벤트 를 트리거 하기 위해 중간 EC2 인스턴스 를 가질 수 있습니다.SQSLambda

0

이것은 얼마 전에 묻고 대답했지만 방금 이것에 대해 생각한 후에 접근 방식을 추가 할 것이라고 생각했습니다.

언급했듯이 이벤트 소스 가 가장 좋습니다. 대안으로, 나는 이것을 테스트하지 않았고 이것을 통해 생각했지만 (이것은 학문적입니다), 다음과 같이 SNS가있는 팬 아웃 패턴을 통해 이것을 달성 할 수 있습니다.

 1. Create a SNS topic.............................: SNS-topic-01
 2. Subscribe a SQS queue to that topic............: SQS-queue-01
 3. Subscribe a Lambda Function to that topic......: LAMBDA-func-01

이 구성을 사용하여 SNS 주제에 메시지를 제출하면 동시에 동반 Lambda 함수를 트리거하면서 SQS 대기열에 메시지를 대기열에 추가합니다. 해당 Lambda 함수는 매우 동일한 SQS 대기열을 읽지 만 Long Polling을 사용하도록 설정하여 (최대 20 초) 대기열에 들어가기 전에 대기열을 읽지 않습니다 (예 : 경쟁 조건).

본질적으로이 적시 계획은 대기열에있는 각 SQS 메시지에 대해 하나의 Lambda 함수를 호출합니다. 나는 Long Poll 독자들이 SQS에서 어떻게 작동하는지 모르겠다. = :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.