답변:
내가 한 일은 SQS 대기열에 대해 CloudWatch 경보를 생성 ApproximateNumberOfMessagesVisible
( >= 1 for 5 minutes
)하는 것입니다. 알람은 람다 기능을 트리거하는 SNS 주제에 게시합니다. 람다 함수는 큐를 지울 때까지 반복됩니다.
알람을 트리거하는 데 최대 5 분이 소요될 수 있지만 대기열을 폴링 할 필요없이 배치 예약 작업에 환상적인 효과를 발휘합니다. 활성 큐의 경우 알람 세분성은 5 분입니다.
당신은 갈 수 없습니다 SQS -> SNS
만 SNS -> SQS
.
Lambda는 이제 스케줄링을 지원 하므로 하나의 옵션은 Lambda 함수에서 SQS 폴러를 구현하고 자주 실행하는 것입니다.
고려해야 할 또 다른 옵션은 실제로 대기열이 필요한지 여부입니다. Lambda는 이벤트 처리 모드를 통한 비동기 처리를 지원하며 병렬 호출을 처리하기 위해 수평으로 투명하게 확장해야합니다. 람다 함수에 병렬 실행을 제한 할 수있는 중앙 상태 저장소에 대한 액세스가 필요하지 않은 경우 모든 호출을 병렬로 실행할 수 있습니다. 계정 당 100 개의 동시 실행 제한이 있다고 생각하므로 메시지를 일괄 처리해야 할 수도 있습니다.
SQS
대기열은 SNS
주제를 구독하여 수신 된 SNS
메시지 를 처리 할 수 있습니다 . 현재 추가 코딩 없이는 다른 방향으로는 할 수 없습니다 (예 : Lambda
FAQ 참조 ).
어떻게해야하는지 몇 가지 옵션이 있지만 더 일반적인 이벤트 중심 시스템을 사용하는 것만 큼 우아하지는 않습니다 AWS event->SQS->Lambda
. 그렇지 않으면 SQS
큐가 처리되는 방식으로 코드를 사용자 정의 / 구현해야 할 수도 있습니다 .
SQS
Lambda
이것은 얼마 전에 묻고 대답했지만 방금 이것에 대해 생각한 후에 접근 방식을 추가 할 것이라고 생각했습니다.
언급했듯이 이벤트 소스 가 가장 좋습니다. 대안으로, 나는 이것을 테스트하지 않았고 이것을 통해 생각했지만 (이것은 학문적입니다), 다음과 같이 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에서 어떻게 작동하는지 모르겠다. = :)