Hur man ändrar timeout i AWS Lambda

Spread the love

Om du vill bygga en serverlös arkitektur i AWS, eller åtminstone en del av det, så kommer AWS Lambda-tjänsten att vara den viktigaste delen av det.

Det är en serverlös datorfunktion (vanligen skriven i programmeringsspråket Node.JS eller Python) som du kan utveckla och köra utan att starta några backend-kluster eller servrar. Du kan ansluta flera AWS Lambda-funktioner för att bilda mer komplexa processer.

En viktig egenskap hos Lambda-funktionen är dock dess begränsning när det gäller behandlingstid. Detta definierar i slutändan när det är rätt syfte att använda AWS Lambda-funktionen.

Källa: aws.amazon.com

Vad är timeoutintervallet?

Timeout-funktionen för AWS Lambda-funktionen är en inställning som definierar den maximala tid som en funktion kan köras innan den avslutas.

Lambdafunktioner är designade för att vara kortlivade och statslösa, och det är så de ska användas. Det är inte ett sällsynt undantag att se hur team försöker använda Lambda-funktionen för långvariga processer. De gör det bara för att de vill utnyttja fördelarna med AWS Lambdas serverlösa karaktär. Det är alltid mycket billigare att köra en kod utan att behöva starta en server med en specifik CPU och minneskonfiguration. Så avsikten är lätt att förstå.

Men om en funktion körs för länge kan det orsaka resursutnyttjande och prestandaproblem. Du riskerar att resurserna låser sig, och eftersom du har fördelen av en långvarig process, bryr du dig med största sannolikhet inte riktigt om optimeringen av stegen inne i processerna. Plötsligt är en väntetid på fem minuter inte så stor fråga. Du har råd att lämna den närvarande även om den, för själva processen, kan vara värdelös.

Som standard är timeouten för en lambdafunktion inställd på bara 3 sekunder. I så fall skulle du behöva räkna med att vilken kod du än kör i en Lambda-funktion måste avslutas inom tre sekunder. Det här är bra om du vill bygga en arkitektur med riktigt snabb kommunikation och svarstider, potentiellt med miljontals transaktioner på mycket kort tid. Men det skulle begränsa de användbara användningsfallen för Lambda-funktionen ganska avsevärt, så du kan öka denna gräns upp till maximalt 900 sekunder (15 minuter). När denna timeout uppnås kommer Lambda att avsluta funktionen och returnera en felkod.

  Hur man installerar tredjepartsmoduler på Webmin

Hur ställer jag in Timeout-funktionen?

Källa: aws.amazon.com

Du kan ställa in timeout för en Lambda-funktion med hjälp av AWS Management Console, AWS CLI eller AWS SDK:er.

Här är de konkreta stegen för att uppnå detta:

  • Öppna AWS Management Console och gå till Lambda-tjänsten.
  • Välj den lambdafunktion som du vill ändra.
  • På fliken ”Konfiguration”, scrolla ner till avsnittet ”Allmän konfiguration” och leta upp inställningen ”Timeout”.
  • Klicka på knappen ”Redigera” bredvid den.
  • Ange det nya timeoutvärdet i sekunder (mellan 1 och 900) och klicka på knappen ”Spara”.
  • Klicka på ”Spara”-knappen längst upp på sidan för att spara ändringarna av Lambda-funktionen.
  • Du kan också använda AWS CLI-kommandoraden för att uppdatera timeout för en Lambda-funktion. Här är ett exempel på kommando:

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

    Detta kommando ställer in timeout för [My_Lambda_Function_Name] till 15 minuter. Ange bara ditt riktiga namn på funktionen och det önskade timeoutvärdet i sekunder.

    Några överväganden

    Timeout-inställningen gäller för hela funktionen, inte bara enskilda kodblock eller operationer inom funktionen. Så om din funktion utför en långvarig operation, som att bearbeta en stor fil eller göra en nätverksbegäran, måste du se till att timeouten fortfarande är tillräckligt för att operationen ska slutföras, även i det värsta scenariot .

    Det är värt att notera att Lambda-funktionerna är designade för att vara kortlivade och statslösa. De är avsedda att utföra små, diskreta uppgifter. Om du upptäcker att din Lambdafunktion tar lång tid att slutföra kan det vara bra att överväga att dela upp den i flera mindre funktioner. Du kan sedan ringa dem en efter en med en avtryckare. Till exempel, om resultatet från den tidigare Lambda-funktionen lagras på en specifik S3-skopa.

    Dessutom, om du behöver köra en långvarig process som överskrider gränsen på 15 minuter, kan du överväga att använda AWS Step Functions för att orkestrera en serie Lambda-funktioner eller andra AWS-tjänster för att uppnå ditt önskade resultat.

    Bästa metoder

    Arbetsintervallet för själva timeouten verkar inte vara tillräckligt stort för en del omfattande samtal. För det mesta slutar utvecklare med att ställa in den direkt till 15 minuter för alla Lambda-funktioner. Även om funktionen kommer att sluta mycket tidigare så finns det ingen negativ bieffekt av det.

    Ändå finns det fortfarande några bästa praxis att notera.

    #1. Definiera lämpligt värde

    Du bör ställa in timeout-värdet baserat på den förväntade exekveringstiden för funktionen. Detta innebär i princip att ställa in ett värde som inte är för kort men inte heller onödigt långt.

      Så här fixar du Xbox One Controller Drift

    Du kanske vill se till att den totala tiden för en enskild Lambda-funktion inte är mer än tre minuter, till exempel bara på grund av arkitektoniska eller övergripande prestandaskäl för din applikation.

    På samma sätt kanske du vill se till att Lambda-funktionen inte avslutas tidigare än, låt oss säga, tre minuter. En av anledningarna kan vara att du vill fylla i ett antal försök i Lambdakoden. Till exempel om några av resurserna som behövs för att slutföra koden är upptagna eller låsta.

    Så innan du går vidare och ställer in timeouten till 15 minuter, fundera lite över vad som kan vara det optimala värdet av exekveringstid. Att definiera mer exakta värden är bara ytterligare ett verktyg för att ge gränser för hela utvecklingsteamet.

    #2. Övervakning över tid

    När du har ställt in timeout-gränserna, gör ett försök att övervaka exekveringstiden för dina Lambda-funktioner. Detta kommer att ge dig viktiga insikter om huruvida det ursprungliga beslutet var rätt eller behöver vissa justeringar.

    Du kan använda CloudWatch-statistik och loggar för att spåra exekveringstiden för funktionerna. Identifiera sedan de som tar längre tid än förväntat och de som är mycket snabbare att slutföra än förväntat.

    #3. Asynkron anrop

    Om din Lambda-funktion utlöses av en händelse som inte kräver ett omedelbart svar, till exempel en filuppladdning eller ett meddelande från en kö, använd asynkron anrop för att minska risken för timeouts. Detta gör att funktionen körs i bakgrunden utan att vänta på ett svar. Detta kan givetvis leda till minskat antal timeouts. Detta beror helt enkelt på att du inte behöver inkludera i den totala körtiden för Lambda den väntetid som funktionen behöver för den resursen.

    #4. Använd stegfunktioner för komplexa processer

    Om du behöver köra en långvarig process som överskrider gränsen på 15 minuter, kan du använda AWS Step Functions för att orkestrera en serie Lambda-funktioner eller andra AWS-tjänster för att uppnå det resultatet. Step Function kommer att dela upp processen i mindre, mer hanterbara uppgifter som du kan utföra inom tidsgränsen.

    Du kan till och med köra flera lambdafunktioner parallellt inom en stegfunktion. Låt sedan stegfunktionen vänta på alla parallella lambdafunktioner innan du går vidare. Detta är en form av horisontell skalning där flera lambdafunktioner kan dela upp ett problem och delvis lösa det tillsammans.

      5 bästa infrastrukturautomationslösningar för medelstora till företag

    I slutändan behöver du bara samla in delresultaten och bygga upp den slutliga upplösningen, för vilken en efter den fristående lambdafunktionen kan räcka.

    #5. Optimera koden

    Du kan optimera din Lambda-funktionskod för att minska exekveringstiden och förbättra prestandan. Detta är användbart om timeout-intervallet inte är tillräckligt bara ibland. I så fall kan det vara värt att söka efter kodoptimering för att ta bort sådana felfall.

    Hur påverkar timeout på faktureringen?

    Källa: aws.amazon.com

    Timeout-inställningen för en AWS Lambda-funktion påverkar inte direkt faktureringen för funktionen. AWS Lambda fakturerar baserat på antalet förfrågningar och varaktigheten av funktionens exekveringstid.

    Om du ökar timeout-inställningen för en lambdafunktion kan det resultera i längre exekveringstider. Men bara om funktionen verkligen behöver den där extra tiden. Om du kombinerar det med en högre frekvens av en funktion som tar längre tid att köra, ja, du kan förvänta dig högre kostnader.

    Men om funktionen inte anropas ofta eller om den slutför processen tidigare än timeout-värdet uppnås, kan påverkan på faktureringen vara minimal.

    Detta är anledningen till att inställning av alla Lambda-funktioner till en timeout på 15 minuter som standard kanske inte är huvudorsaken till ökningen av kostnaden för din totala bearbetning.

    Men det leder säkert till en indirekt ökning av de totala kostnaderna. Utvecklare kommer att känna att de har en viss reserv att använda, och de kanske inte optimerar koden i en sådan utsträckning som de förmodligen skulle göra om tidsgränserna var mer restriktiva men ändå realistiska.

    En annan sak är att AWS Lambda tillhandahåller en gratis nivå som inkluderar 1 miljon gratisförfrågningar och 400 000 GB-sekunders beräkningstid per månad. Om din Lambda-funktionsanvändning faller inom de fria nivågränserna kommer du inte att betala för funktionens körningstid oavsett timeoutinställningen.

    Slutord

    AWS Lambda-funktion är ett kraftfullt verktyg, speciellt för serverlös bearbetning i AWS-molnet. Det har sitt syfte och sina gränser som vi bör vara medvetna om. Låt oss inte försöka använda den för användningsfall som den inte är designad för.

    Den är perfekt för enkla, asynkrona och idealiskt utlösta åtgärder som inte kräver en exekveringstid på mer än 15 minuter. Om du behöver något mer komplext, använd AWS Step Functions för att kombinera flera lambdafunktioner till en enda orkestrerad process. Eller ge upp billigare serverlös bearbetning och använd servrar med lämplig konfiguration och datorkraft för att utföra din uppgift.

    Kolla sedan in introduktionen till AWS Lambda för nybörjare.