Zastanawiałem się, czy mogę wysłać wiadomość do kolejki SQS i zasubskrybować w niej temat SNS, aby uruchomić lambda do wysłania wiadomości e-mail.
SQS -> SNS -> (Lambda) -> SES
Wiem, że komunikaty SNS mogą być wysyłane do SQS, ale jestem ciekawy, czy możliwe jest odwrócenie tego
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.
źródło
SQS
kolejka może być subskrybowana doSNS
tematu, aby przetwarzać otrzymaneSNS
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 koduSQS
przetwarzania kolejek:SQS
kolejek, a następnie do wyzwalaniaLambda
zdarzeń SQSźródło
To 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:
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. = :)
źródło