Jak změnit časový limit v AWS Lambda

Pokud chcete v AWS vybudovat bezserverovou architekturu nebo alespoň její část, pak bude služba AWS Lambda tou nejdůležitější součástí.

Jedná se o bezserverovou výpočetní funkci (obvykle napsanou v programovacím jazyce Node.JS nebo Python), kterou můžete vyvinout a spustit bez spouštění jakýchkoli backendových clusterů nebo serverů. Můžete propojit více funkcí AWS Lambda a vytvořit tak složitější procesy.

Důležitou vlastností funkce Lambda je však její omezení z hlediska doby trvání zpracování. To v konečném důsledku definuje, kdy je správný účel použití funkce AWS Lambda.

Zdroj: aws.amazon.com

Jaký je časový limit?

Funkce časového limitu funkce AWS Lambda je nastavení, které definuje maximální dobu, po kterou může funkce běžet, než bude ukončena.

Funkce lambda jsou navrženy tak, aby byly krátkodobé a bezstavové, a tak by se měly používat. Není vzácnou výjimkou vidět, jak se týmy snaží využít funkci Lambda pro dlouhotrvající procesy. Dělají to jen proto, že chtějí využít výhod bezserverové povahy AWS Lambda. Vždy je mnohem levnější spustit kód bez nutnosti spouštění serveru se specifickou konfigurací CPU a paměti. Takže záměr je snadno pochopitelný.

Pokud však funkce běží příliš dlouho, může způsobit problémy s využitím prostředků a výkonem. Riskujete zablokování zdrojů, a protože máte výhodu dlouhotrvajícího procesu, s největší pravděpodobností se o optimalizaci kroků uvnitř procesů opravdu nestaráte. Najednou není čekací doba pět minut velký problém. Můžete si dovolit nechat ji přítomnou, i když by to pro samotný proces mohlo být zbytečné.

Ve výchozím nastavení je časový limit pro funkci Lambda nastaven na pouhé 3 sekundy. V takovém případě byste museli počítat s tím, že jakýkoli kód, který spustíte uvnitř funkce Lambda, musí skončit do tří sekund. To je skvělé, pokud chcete vybudovat architekturu s opravdu rychlou komunikací a dobou odezvy, potenciálně s miliony transakcí ve velmi krátkém čase. To by ale dost výrazně omezilo použitelné případy použití funkce Lambda, takže tento limit můžete navýšit maximálně na 900 sekund (15 minut). Po dosažení tohoto časového limitu Lambda ukončí funkci a vrátí chybový kód.

  Co je VBScript a proč jej Microsoft právě zabil?

Jak nastavit funkci časového limitu?

Zdroj: aws.amazon.com

Časový limit pro funkci Lambda můžete nastavit pomocí AWS Management Console, AWS CLI nebo AWS SDK.

Zde jsou konkrétní kroky, jak toho dosáhnout:

  • Otevřete AWS Management Console a přejděte do služby Lambda.
  • Vyberte funkci Lambda, kterou chcete upravit.
  • Na kartě „Konfigurace“ přejděte dolů do části „Obecná konfigurace“ a vyhledejte nastavení „Časový limit“.
  • Klikněte na tlačítko „Upravit“ vedle něj.
  • Zadejte novou hodnotu časového limitu v sekundách (mezi 1 a 900) a klikněte na tlačítko „Uložit“.
  • Kliknutím na tlačítko „Uložit“ v horní části stránky uložíte změny funkce Lambda.
  • K aktualizaci časového limitu funkce Lambda můžete také použít příkazový řádek AWS CLI. Zde je příklad příkazu:

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

    Tento příkaz nastavuje časový limit pro [My_Lambda_Function_Name] do 15 minut. Stačí tam zadat své skutečné jméno funkce a požadovanou hodnotu časového limitu v sekundách.

    Některé úvahy

    Nastavení časového limitu platí pro celou funkci, nejen pro jednotlivé bloky kódu nebo operace v rámci funkce. Pokud tedy vaše funkce provádí dlouhotrvající operaci, jako je zpracování velkého souboru nebo odesílání síťového požadavku, budete muset zajistit, aby časový limit byl stále dostatečný k dokončení operace, a to i v nejhorším případě. .

    Stojí za zmínku, že funkce Lambda jsou navrženy tak, aby byly krátkodobé a bezestavové. Jsou určeny k provádění malých, diskrétních úkolů. Pokud zjistíte, že dokončení vaší funkce Lambda trvá dlouho, může být dobré zvážit její rozdělení na několik menších funkcí. Pak je můžete volat jeden po druhém pomocí spouště. Například pokud je výstup předchozí funkce Lambda uložen na konkrétním kbelíku S3.

    Navíc, pokud potřebujete spustit dlouhotrvající proces, který přesahuje 15minutový limit, můžete zvážit použití AWS Step Functions k orchestraci řady funkcí Lambda nebo jiných služeb AWS, abyste dosáhli požadovaného výsledku.

    Osvědčené postupy

    Pracovní interval samotného timeoutu se nezdá být dostatečně velký pro nějaké rozsáhlé rozhovory. Ve většině případů to vývojáři nakonec nastaví přímo na 15 minut pro všechny funkce Lambda. I když funkce skončí mnohem dříve, nemá to žádný negativní vedlejší efekt.

    Přesto stále existuje několik osvědčených postupů, které je třeba poznamenat.

      Jak vymazat data procházení Safari pomocí klávesové zkratky

    #1. Definujte vhodnou hodnotu

    Hodnotu časového limitu byste měli nastavit na základě očekávané doby provedení funkce. To v podstatě znamená nastavit hodnotu, která není příliš krátká, ale ani zbytečně dlouhá.

    Možná se budete chtít ujistit, že celkový čas jedné funkce Lambda není delší než tři minuty, například jen z důvodu architektonických nebo celkového výkonu vaší aplikace.

    Podobně se můžete ujistit, že funkce Lambda nebude ukončena dříve než, řekněme, za tři minuty. Jedním z důvodů může být, že chcete v kódu Lambda vyplnit určitý počet opakování. Například v případě, že některé zdroje potřebné k dokončení kódu jsou zaneprázdněné nebo uzamčené.

    Než tedy budete pokračovat a nastavíte časový limit na 15 minut, zamyslete se nad tím, jaká by mohla být optimální hodnota doby provedení. Definování přesnějších hodnot je jen dalším nástrojem, jak dát celému vývojovému týmu určité hranice.

    #2. Sledování v průběhu času

    Jakmile nastavíte limity časového limitu, snažte se sledovat dobu provádění funkcí Lambda. Získáte tak důležité informace o tom, zda bylo původní rozhodnutí správné, nebo zda potřebuje nějaké úpravy.

    Ke sledování doby provádění funkcí můžete použít metriky a protokoly CloudWatch. Poté identifikujte ty, které trvají déle, než se očekávalo, a také ty, jejichž dokončení je mnohem rychlejší, než se očekávalo.

    #3. Asynchronní vyvolání

    Pokud je vaše funkce Lambda spuštěna událostí, která nevyžaduje okamžitou odezvu, například odesláním souboru nebo zprávou z fronty, použijte asynchronní vyvolání ke snížení rizika vypršení časového limitu. Díky tomu bude funkce běžet na pozadí bez čekání na odpověď. To může samozřejmě vést ke snížení počtu časových limitů. Je to jednoduše proto, že do celkové doby provádění Lambda nemusíte započítávat čekací dobu, kterou funkce potřebuje pro daný zdroj.

    #4. Používejte krokové funkce pro složité procesy

    Pokud potřebujete spustit dlouhotrvající proces, který přesahuje 15minutový limit, můžete k dosažení tohoto výsledku použít funkce AWS Step Functions k orchestraci řady funkcí Lambda nebo jiných služeb AWS. Funkce Step rozdělí proces na menší, lépe ovladatelné úlohy, které můžete provést v rámci časového limitu.

    V rámci krokové funkce můžete dokonce paralelně spouštět několik funkcí lambda. Poté nechejte funkci krok počkat na všechny paralelní funkce lambda, než budete pokračovat dále. Jedná se o formu horizontálního škálování, kdy několik funkcí lambda může rozdělit jeden problém a částečně jej vyřešit společně.

      Jak dlouho MoneyGram drží peníze

    Nakonec stačí sesbírat dílčí výsledky a sestavit konečné rozlišení, pro které může stačit sledování samostatné funkce lambda.

    #5. Optimalizujte kód

    Kód funkce Lambda můžete optimalizovat, abyste zkrátili dobu provádění a zlepšili výkon. To je užitečné, pokud interval timeoutu nestačí jen občas. V takovém případě by možná stálo za to hledat optimalizaci kódu pro odstranění takových případů selhání.

    Jak časový limit ovlivní fakturaci?

    Zdroj: aws.amazon.com

    Nastavení časového limitu pro funkci AWS Lambda nemá přímý vliv na účtování funkce. AWS Lambda účtuje na základě počtu požadavků a doby trvání funkce.

    Pokud zvýšíte nastavení časového limitu pro funkci Lambda, může to mít za následek delší dobu provádění. Ale pouze v případě, že funkce skutečně potřebuje tento dodatečný čas. Pokud to zkombinujete s vyšší frekvencí funkce, jejíž provedení trvá déle, pak ano, můžete očekávat vyšší náklady.

    Pokud se však funkce nevyvolává často nebo pokud dokončí proces dříve, než je dosaženo hodnoty časového limitu, může být dopad na účtování minimální.

    To je důvod, proč nastavení všech funkcí Lambda ve výchozím nastavení na časový limit 15 minut nemusí být hlavním důvodem zvýšení nákladů na vaše celkové zpracování.

    Určitě to však vede k nepřímému zvýšení celkových nákladů. Vývojáři budou mít pocit, že mají určitou rezervu k použití, a nemuseli by optimalizovat kód do takové míry, jako by to pravděpodobně udělali, kdyby byly časové limity restriktivnější, ale stále realistické.

    Další věcí je, že AWS Lambda poskytuje bezplatnou vrstvu, která zahrnuje 1 milion bezplatných požadavků a 400 000 GB sekund výpočetního času za měsíc. Pokud vaše využití funkce Lambda spadá do limitů bezplatné úrovně, nebudete platit za dobu provedení funkce bez ohledu na nastavení časového limitu.

    Závěrečná slova

    Funkce AWS Lambda je výkonný nástroj, zejména pro bezserverové zpracování v cloudu AWS. Má svůj účel a limity, kterých bychom si měli být vědomi. Nesnažme se jej používat pro případy použití, pro které nebyl navržen.

    Je ideální pro jednoduché, asynchronní a ideálně spouštěné akce, které nevyžadují dobu provádění delší než 15 minut. Pokud potřebujete něco složitějšího, použijte AWS Step Functions ke spojení několika funkcí Lambda do jediného uspořádaného procesu. Nebo se vzdejte levnějšího zpracování bez serveru a použijte ke splnění svého úkolu servery s vhodnou konfigurací a výpočetním výkonem.

    Dále se podívejte na úvod do AWS Lambda pro začátečníky.