2016-11-06 44 views
5

Czy ktoś jeszcze rozwiązał następujący problem?
Mam SNS temat wypełniony wydarzeniami z S3 i jest Lambda funkcja który jest zapisany na ten temat i po tysiąc wydarzeń są wprowadzane do tego tematu, funkcja lambda jest ograniczona z powodu przekroczenia limitu współbieżności .
Nie chcę żądać zwiększenia limitu dla równoczesnych wykonań, ale zmniejszyłbym jednoczesne zużycie z tematu, ale nie znalazłem informacji, jak to zrobić. Dzięki.Jak ograniczyć wskaźnik zużycia z tematu?

Odpowiedz

5

Kilka opcji dotyczących SNS:

1) SNS Maksymalna szybkość odbierania

Ustaw SNS Maximum Receive Rate. Spowoduje to zdławienie komunikatów SNS wysłanych do subskrybenta, ale może nie być świetną opcją, jeśli masz tyle wiadomości, że zostaną one odrzucone, zanim zostaną przetworzone. Z dokumentacji:

Można ustawić maksymalną liczbę wiadomości na sekundę, że Amazon SNS wysyła do subskrybowanego końcowego poprzez ustawienie maksymalnej otrzymać ustawionej szybkości. Amazon SNS przechowuje wiadomości, które oczekują na dostawę do godziny na godzinę. Wiadomości przechowywane przez ponad godzinę są odrzucane.

Jeśli otrzymujesz tylko tysiące wydarzeń w czasie, ustawienie Maximum Receive Rate Lambda default concurrent execution limit od „100” może być warto spróbować.

Jak zauważa @kndrk, to dławienie jest obecnie dostępne tylko dla subskrybentów HTTP/HTTPS w temacie SNS. Aby obejść ten problem, można expose your lambda function via AWS API Gateway i subskrybować ten punkt końcowy do tematu SNS, a nie bezpośrednio funkcję lambda.

2) Proces z SQS

Subscribe an SQS queue to the SNS topic i przetwarzania wiadomości z kolejki, a nie bezpośrednio od tematu SNS. Pojedyncze wywołanie SQS ReceiveMessage może obsłużyć tylko 10 komunikatów na raz, więc może być łatwiejsze dławienie.


Warto również zauważyć, że można opublikować S3 Events directly to AWS Lambda.

+0

Dzięki za szybką odpowiedź. Próbowałem rozwiązania, gdy wyzwalanie lambda było wyzwalane przez S3, ale wystąpił ten sam problem, dlatego postanowiłem spróbować kombinacji S3-> sns-> lambda. Mam zamiar wypróbować swoją pierwszą opcję, może być odpowiedni dla mnie. ** P.S. ** Chcę przetwarzać zdarzenia z S3 natychmiast, ponieważ w większości przypadków obciążenie nie jest tak wysokie, ale jeśli dobrze zrozumiałem, lambda nie może być wyzwalana przez zdarzenia z SQS. Jedynym sposobem jest zaplanowanie wykonywania funkcji lambda na potrzeby konsumowania z SQS – nikolayandr

+0

To prawda - w przypadku SQS zasadniczo pobierałoby SQS RecieveMessage z lambda zgodnie z harmonogramem, zamiast podłączania go do określonego wyzwalacza. Wygląda na to, że z SNS Maximum Receive Rate będzie pasować do twojego przypadku użycia. Mam nadzieję, że to działa dla Ciebie! –

+1

Niestety dotyczy to tylko punktów końcowych HTTP (s). Subskrybenci Lambda w ogóle nie są dławieni. – knrdk