Odpowiedzi:
Jedną rzeczą, którą zrobiłem, było stworzenie alarmu CloudWatch on ApproximateNumberOfMessagesVisible
( >= 1 for 5 minutes
) dla kolejki SQS. Alarm publikuje w temacie SNS, który uruchamia funkcję lambda. Funkcja lambda zapętla się, dopóki nie wyczyści kolejki.
Wywołanie alarmu może potrwać do 5 minut, ale działa fantastycznie w przypadku zadań zaplanowanych wsadowo bez potrzeby sprawdzania kolejki. (Granulacja alarmu wynosi 5 minut dla aktywnych kolejek).
SQS -> SNS
Tylko nie możesz iść SNS -> SQS
.
Lambda obsługuje teraz planowanie, więc jedną z opcji jest zaimplementowanie odpylacza SQS w funkcji Lambda i częste jego uruchamianie.
Inną opcją do rozważenia jest to, czy rzeczywiście potrzebujesz kolejki. Lambda obsługuje przetwarzanie asynchroniczne (poprzez tryb wywoływania zdarzeń) i powinna przezroczyście skalować się w poziomie, aby obsługiwać równoległe wywołania. Jeśli twoja funkcja lambda nie wymaga dostępu do centralnego magazynu stanów, co może ograniczać równoległe wykonywanie, prawdopodobnie możesz po prostu uruchomić wszystkie swoje wywołania równolegle. Uważam jednak, że istnieje 100 równoczesnych limitów wykonania na konto, więc być może będziesz musiał pogrupować swoje wiadomości, aby pozostać na tym poziomie.
SQS
kolejka może być subskrybowana do SNS
tematu, aby przetwarzać otrzymane SNS
wiadomości Obecnie nie można tego zrobić w innym kierunku bez dodatkowego kodowania (patrz np. Lambda
FAQ ).
Powiedziałbym, że jest kilka opcji, jak to zrobić, ale nie jest tak elegancki, jak w przypadku bardziej powszechnego systemu sterowanego zdarzeniami AWS event->SQS->Lambda
. W przeciwnym razie może być konieczne dostosowanie / wdrożenie kodu SQS
przetwarzania kolejek:
SQS
kolejek, a następnie do wyzwalania Lambda
zdarzeń SQSTo pytanie zostało zadane i udzielono odpowiedzi jakiś czas temu, ale właśnie o tym pomyślałem, pomyślałem, że dodam podejście.
Jak wspomniano, źródła zdarzeń mogą być tutaj najlepszym wyborem. Alternatywnie i nie przetestowałem tego ani nie przemyślałem (więc jest to rodzaj akademicki), ale może być to możliwe poprzez wzorzec Fan-Out z SNS w następujący sposób:
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
Przy użyciu tej konfiguracji przesłanie komunikatu do tematu SNS spowoduje umieszczenie go w kolejce SQS, jednocześnie wyzwalając towarzyszącą funkcję Lambda. Ta funkcja Lambda zostałaby napisana, aby odczytać tę samą kolejkę SQS, ale z włączonym długim odpytywaniem (do 20 sekund), aby nie czytała kolejki przed zakończeniem kolejki (tj. Warunkiem wyścigu).
Zasadniczo ten schemat just-in-time wywołuje jedną funkcję Lambda dla każdej kolejkowanej wiadomości SQS. Nie wiem, jak jednoczesne czytniki Long Poll działają na SQS (... czy ktoś się upuszcza?), Ale to tylko kolejny sposób na rozważenie rozwiązania tego problemu. = :)