Jak zmienić limit czasu w AWS Lambda

Jeśli chcesz zbudować architekturę bezserwerową w AWS lub chociaż jej część, to usługa AWS Lambda będzie tego najważniejszą częścią.

Jest to funkcja obliczeniowa bezserwerowa (zwykle napisana w języku programowania Node.JS lub Python), którą można rozwijać i uruchamiać bez uruchamiania jakichkolwiek klastrów lub serwerów zaplecza. Możesz połączyć wiele funkcji AWS Lambda, tworząc bardziej złożone procesy.

Jednakże ważną właściwością funkcji Lambda jest jej ograniczenie w zakresie czasu trwania przetwarzania. To ostatecznie określa, kiedy użycie funkcji AWS Lambda jest właściwym celem.

Źródło: aws.amazon.com

Jaki jest limit czasu?

Funkcja limitu czasu funkcji AWS Lambda to ustawienie określające maksymalny czas, przez który funkcja może działać, zanim zostanie zakończona.

Funkcje lambda są zaprojektowane tak, aby były krótkotrwałe i bezstanowe i tak należy ich używać. Nierzadko można zobaczyć, jak zespoły próbują wykorzystać funkcję Lambda w długotrwałych procesach. Robią to tylko dlatego, że chcą wykorzystać zalety bezserwerowego charakteru AWS Lambda. Zawsze dużo taniej jest uruchomić kod bez konieczności uruchamiania serwera z określoną konfiguracją procesora i pamięci. Zatem intencja jest łatwa do zrozumienia.

Jeśli jednak funkcja działa zbyt długo, może to powodować problemy z wykorzystaniem zasobów i wydajnością. Ryzykujesz zablokowaniem zasobów, a ponieważ korzystasz z długotrwałego procesu, najprawdopodobniej nie przejmujesz się optymalizacją kroków wewnątrz procesów. Nagle czas oczekiwania wynoszący pięć minut nie stanowi większego problemu. Możesz sobie pozwolić na pozostawienie go obecnego, nawet jeśli dla samego procesu może to być bezużyteczne.

Domyślnie limit czasu dla funkcji Lambda jest ustawiony na zaledwie 3 sekundy. W takim przypadku musiałbyś liczyć na to, że dowolny kod wykonany w funkcji Lambda musi zakończyć się w ciągu trzech sekund. Jest to świetne rozwiązanie, jeśli chcesz zbudować architekturę zapewniającą naprawdę szybką komunikację i czasy reakcji, potencjalnie obejmującą miliony transakcji w bardzo krótkim czasie. Ale to znacznie ograniczyłoby użyteczne przypadki użycia funkcji Lambda, więc możesz zwiększyć ten limit maksymalnie do 900 sekund (15 minut). Po osiągnięciu tego limitu czasu Lambda zakończy funkcję i zwróci kod błędu.

Jak skonfigurować funkcję limitu czasu?

Źródło: aws.amazon.com

Możesz ustawić limit czasu dla funkcji Lambda za pomocą konsoli zarządzania AWS, interfejsu CLI AWS lub zestawów SDK AWS.

Oto konkretne kroki, jak to osiągnąć:

  • Otwórz konsolę zarządzającą AWS i przejdź do usługi Lambda.
  • Wybierz funkcję Lambda, którą chcesz zmodyfikować.
  • Na karcie „Konfiguracja” przewiń w dół do sekcji „Konfiguracja ogólna” i znajdź ustawienie „Limit czasu”.
  • Kliknij przycisk „Edytuj” obok niego.
  • Wprowadź nową wartość limitu czasu w sekundach (od 1 do 900) i kliknij przycisk „Zapisz”.
  • Kliknij przycisk „Zapisz” u góry strony, aby zapisać zmiany w funkcji Lambda.
  • Możesz także użyć wiersza poleceń AWS CLI, aby zaktualizować limit czasu funkcji Lambda. Oto przykładowe polecenie:

    <code>aws lambda update-function-configuration --function-name [My_Lambda_Function_Name] --timeout 900

    To polecenie ustawia limit czasu dla [My_Lambda_Function_Name] do 15 minut. Po prostu wpisz tam swoją prawdziwą nazwę funkcji i żądaną wartość limitu czasu w sekundach.

    Kilka rozważań

    Ustawienie limitu czasu dotyczy całej funkcji, a nie tylko poszczególnych bloków kodu lub operacji w ramach funkcji. Jeśli więc Twoja funkcja wykonuje długotrwałą operację, taką jak przetwarzanie dużego pliku lub wysyłanie żądania sieciowego, musisz upewnić się, że limit czasu jest wystarczający do zakończenia operacji, nawet w najgorszym przypadku .

    Warto zauważyć, że funkcje Lambda są zaprojektowane tak, aby były krótkotrwałe i bezstanowe. Przeznaczone są do wykonywania małych, dyskretnych zadań. Jeśli okaże się, że wykonanie funkcji Lambda zajmuje dużo czasu, warto rozważyć podzielenie jej na kilka mniejszych funkcji. Następnie możesz wywoływać je jeden po drugim za pomocą wyzwalacza. Na przykład, jeśli dane wyjściowe poprzedniej funkcji Lambda są przechowywane w określonym segmencie S3.

    Dodatkowo, jeśli chcesz uruchomić długotrwały proces, który przekracza limit 15 minut, możesz rozważyć użycie AWS Step Functions do zaaranżowania szeregu funkcji Lambda lub innych usług AWS, aby osiągnąć pożądany rezultat.

    Najlepsze praktyki

    Sam odstęp czasu pracy nie wydaje się być na tyle duży, aby można było przeprowadzić jakieś obszerne rozmowy. W większości przypadków programiści ustawiają go bezpośrednio na 15 minut dla wszystkich funkcji Lambda. Nawet jeśli funkcja zakończy się znacznie wcześniej, nie ma z tego żadnych negatywnych skutków ubocznych.

    Niemniej jednak nadal istnieje kilka najlepszych praktyk, na które warto zwrócić uwagę.

    #1. Zdefiniuj odpowiednią wartość

    Wartość limitu czasu należy ustawić na podstawie oczekiwanego czasu wykonania funkcji. Zasadniczo oznacza to ustawienie wartości, która nie jest zbyt krótka, ale także niepotrzebnie długa.

    Możesz się upewnić, że całkowity czas pojedynczej funkcji Lambda nie przekracza na przykład trzech minut, tylko ze względu na architekturę lub ogólną wydajność aplikacji.

    Podobnie możesz chcieć się upewnić, że funkcja Lambda nie zakończy się wcześniej niż, powiedzmy, trzy minuty. Jednym z powodów może być chęć wykonania pewnej liczby ponownych prób w kodzie Lambda. Na przykład w przypadku, gdy niektóre zasoby potrzebne do ukończenia kodu są zajęte lub zablokowane.

    Zanim więc ustawisz limit czasu na 15 minut, zastanów się, jaka może być optymalna wartość czasu wykonania. Definiowanie bardziej precyzyjnych wartości to tylko kolejne narzędzie wyznaczające granice całemu zespołowi programistów.

    #2. Monitorowanie w czasie

    Po ustawieniu limitów czasu spróbuj monitorować czas wykonywania funkcji Lambda. Dzięki temu uzyskasz ważne informacje na temat tego, czy pierwotna decyzja była słuszna, czy też wymaga pewnych korekt.

    Możesz używać metryk i dzienników CloudWatch do śledzenia czasu wykonywania funkcji. Następnie zidentyfikuj te, których ukończenie zajmuje więcej czasu, niż oczekiwano, oraz te, których ukończenie trwa znacznie szybciej, niż oczekiwano.

    #3. Wywołanie asynchroniczne

    Jeśli Twoja funkcja Lambda jest wyzwalana przez zdarzenie, które nie wymaga natychmiastowej reakcji, na przykład przesłanie pliku lub wiadomość z kolejki, użyj wywołania asynchronicznego, aby zmniejszyć ryzyko przekroczenia limitu czasu. Spowoduje to, że funkcja będzie działać w tle, bez czekania na odpowiedź. Może to oczywiście prowadzić do zmniejszenia liczby przekroczeń limitu czasu. Dzieje się tak po prostu dlatego, że nie trzeba uwzględniać w całkowitym czasie wykonania Lambdy czasu oczekiwania potrzebnego funkcji dla tego zasobu.

    #4. Użyj funkcji kroku dla złożonych procesów

    Jeśli chcesz uruchomić długotrwały proces, który przekracza limit 15 minut, możesz użyć AWS Step Functions do zorganizowania szeregu funkcji Lambda lub innych usług AWS, aby osiągnąć ten wynik. Funkcja kroku podzieli proces na mniejsze, łatwiejsze do wykonania zadania, które można wykonać w ramach limitu czasu.

    W ramach funkcji krokowej można nawet uruchomić kilka funkcji lambda równolegle. Następnie pozwól funkcji step poczekać na wszystkie równoległe funkcje lambda, zanim przejdziesz dalej. Jest to forma skalowania poziomego, w której kilka funkcji lambda może podzielić jeden problem i częściowo go rozwiązać razem.

    Na koniec wystarczy zebrać częściowe wyniki i opracować ostateczną rozdzielczość, do której wystarczy samodzielna funkcja lambda.

    #5. Zoptymalizuj kod

    Możesz zoptymalizować kod funkcji Lambda, aby skrócić czas wykonania i poprawić wydajność. Jest to przydatne, jeśli limit czasu nie jest wystarczający tylko sporadycznie. W takim przypadku warto poszukać optymalizacji kodu, aby wyeliminować takie przypadki awarii.

    Jak przekroczenie limitu czasu wpływa na rozliczenia?

    Źródło: aws.amazon.com

    Ustawienie limitu czasu dla funkcji AWS Lambda nie ma bezpośredniego wpływu na rozliczenia za tę funkcję. AWS Lambda rozlicza się na podstawie liczby żądań i czasu wykonania funkcji.

    Jeśli zwiększysz ustawienie limitu czasu dla funkcji Lambda, może to spowodować wydłużenie czasu wykonania. Ale tylko wtedy, gdy funkcja naprawdę potrzebuje tego dodatkowego czasu. Jeśli połączysz to z większą częstotliwością wykonywania funkcji, której wykonanie zajmuje więcej czasu, to tak, możesz spodziewać się wyższych kosztów.

    Jeśli jednak funkcja nie jest często wywoływana lub kończy proces wcześniej niż upłynie limit czasu, wpływ na rozliczenia może być minimalny.

    Dlatego też ustawienie domyślnego limitu czasu wszystkich funkcji Lambda na 15 minut może nie być główną przyczyną wzrostu kosztów ogólnego przetwarzania.

    Z pewnością jednak prowadzi to do pośredniego wzrostu kosztów ogólnych. Programiści poczują, że mają pewną rezerwę do wykorzystania i mogą nie zoptymalizować kodu w takim stopniu, w jakim prawdopodobnie by to zrobili, gdyby limity czasu były bardziej restrykcyjne, ale nadal realistyczne.

    Inną rzeczą jest to, że AWS Lambda zapewnia warstwę bezpłatną, która obejmuje 1 milion bezpłatnych żądań i 400 000 GB-sekund czasu obliczeniowego miesięcznie. Jeśli wykorzystanie funkcji Lambda mieści się w limitach bezpłatnego poziomu, nie zapłacisz za czas wykonania funkcji niezależnie od ustawienia limitu czasu.

    Ostatnie słowa

    Funkcja AWS Lambda to potężne narzędzie, zwłaszcza do przetwarzania bezserwerowego w chmurze AWS. Ma swój cel i ograniczenia, których powinniśmy być świadomi. Nie próbujmy używać go do celów, do których nie został zaprojektowany.

    Jest idealny do prostych, asynchronicznych i idealnie wyzwalanych akcji, które nie wymagają czasu wykonania dłuższego niż 15 minut. Jeśli potrzebujesz czegoś bardziej złożonego, użyj funkcji krokowych AWS, aby połączyć kilka funkcji Lambda w jeden zorganizowany proces. Lub zrezygnuj z tańszego przetwarzania bezserwerowego i korzystaj z serwerów o odpowiedniej konfiguracji i mocy obliczeniowej, aby wykonać swoje zadanie.

    Następnie zapoznaj się z wprowadzeniem do AWS Lambda dla początkujących.