AWS Lambda Tidsavbrudd: Optimaliser og Spar Penger!

Introduksjon til AWS Lambda Timeout

Dersom du planlegger å implementere en serverløs arkitektur i AWS, eller deler av den, vil AWS Lambda-tjenesten være en sentral komponent. Det er en serverløs databehandlingsfunksjon, typisk utviklet i Node.JS eller Python, som lar deg kjøre kode uten å administrere backend-klynger eller servere. Du kan koble sammen flere AWS Lambda-funksjoner for å skape komplekse arbeidsflyter.

En viktig egenskap ved Lambda-funksjoner er imidlertid den begrensede behandlingstiden. Dette tidsavbruddet er avgjørende for å definere når det er hensiktsmessig å bruke AWS Lambda. Det dikterer i stor grad hvorvidt tjenesten er egnet for dine spesifikke behov.

Kilde: aws.amazon.com

Hva betyr Tidsavbruddsintervallet?

Tidsavbruddsfunksjonen i AWS Lambda definerer den maksimale tiden en funksjon kan kjøre før den automatisk avsluttes. Lambda-funksjoner er designet for å være kortvarige og tilstandsløse, noe som er grunnleggende for deres effektivitet. Det hender at team forsøker å bruke Lambda for langvarige prosesser, hovedsakelig for å utnytte fordelene med den serverløse infrastrukturen. Det er kostnadseffektivt å kjøre kode uten å måtte starte en server med dedikert CPU og minne. Derfor er intensjonen lett å forstå.

Men hvis en funksjon kjører for lenge, kan dette føre til overforbruk av ressurser og ytelsesproblemer. Du risikerer å låse ressurser, og siden du nyter fordelen av en langvarig prosess, er det mindre sannsynlig at du fokuserer på å optimalisere prosessens individuelle trinn. Plutselig er en ventetid på fem minutter ikke lenger et problem; du tillater det selv om det kan være unødvendig for selve prosessen.

Som standard er tidsavbruddet for Lambda satt til 3 sekunder. Koden din må altså fullføres innen denne tidsrammen. Dette er ideelt for å bygge arkitekturer med rask kommunikasjon og responstider, potensielt håndterende millioner av transaksjoner på kort tid. Men det begrenser også bruksområdene for Lambda betraktelig. Heldigvis kan denne grensen økes opp til maksimalt 900 sekunder (15 minutter). Når dette tidsavbruddet er nådd, vil Lambda avslutte funksjonen og returnere en feilmelding.

Hvordan konfigurere tidsavbruddsfunksjonen?

Kilde: aws.amazon.com

Du kan justere tidsavbruddet for Lambda-funksjoner ved hjelp av AWS Management Console, AWS CLI, eller AWS SDK. Her er de spesifikke trinnene:

1. Åpne AWS Management Console og naviger til Lambda-tjenesten.
2. Velg den Lambda-funksjonen du vil endre.
3. Under «Konfigurasjon»-fanen, finn «Generell konfigurasjon» og deretter «Tidsavbrudd»-innstillingen.
4. Klikk «Rediger» ved siden av tidsavbruddet.
5. Skriv inn ønsket tidsavbruddsverdi i sekunder (mellom 1 og 900), og klikk «Lagre».
6. Klikk «Lagre» øverst på siden for å lagre endringene.

Du kan også bruke AWS CLI til å oppdatere tidsavbruddet. Her er et eksempel:

aws lambda update-function-configuration --function-name [Navn_På_Lambda_Funksjon] --timeout 900

Denne kommandoen setter tidsavbruddet til 15 minutter for den angitte funksjonen. Erstatt «[Navn_På_Lambda_Funksjon]» med det faktiske navnet på din funksjon, og 900 med ønsket tidsavbruddsverdi i sekunder.

Viktige Betraktninger

Tidsavbruddsinnstillingen gjelder for hele funksjonen, ikke bare spesifikke kodeblokker. Hvis funksjonen din utfører en langvarig operasjon, som å behandle en stor fil eller gjøre en nettverksforespørsel, må du sørge for at tidsavbruddet er tilstrekkelig, selv i verste fall.

Lambda er laget for å være kortvarige og tilstandsløse, designet for små oppgaver. Hvis funksjonen din bruker for lang tid, vurder å dele den opp i flere mindre funksjoner som kan utløses sekvensielt. For eksempel kan resultatet av en Lambda-funksjon lagres i en S3-bøtte som utløser neste funksjon.

Hvis du trenger å kjøre en prosess som overskrider 15-minutters grensen, bør du vurdere å bruke AWS Step Functions for å orkestrere en serie Lambda-funksjoner eller andre AWS-tjenester for å oppnå ønsket resultat.

Anbefalte Fremgangsmåter

Det tilgjengelige tidsavbruddsintervallet er ikke stort nok for komplekse oppgaver. Derfor setter mange utviklere det direkte til 15 minutter for alle Lambda-funksjoner, uten at det gir noen negative konsekvenser selv om funksjonen fullføres tidligere.

Likevel finnes det noen anbefalte fremgangsmåter å merke seg.

#1. Definer en Passende Verdi

Sett tidsavbruddsverdien basert på forventet utførelsestid for funksjonen. Velg en verdi som ikke er for kort, men heller ikke unødvendig lang.

Det kan være hensiktsmessig å begrense den totale tiden for en enkelt Lambda-funksjon til maks tre minutter av arkitektoniske eller ytelsesmessige årsaker. Samtidig må du sørge for at funksjonen ikke avsluttes for tidlig. En grunn kan være at du ønsker å implementere gjentatte forsøk i koden, for eksempel hvis ressurser er opptatte eller utilgjengelige.

Før du setter tidsavbruddet til 15 minutter, tenk over hva som er en optimal utførelsestid. Dette gir utviklingsteamet en klar ramme å jobbe innenfor.

#2. Overvåk Utførelsestiden

Etter at tidsavbrudd er definert, overvåk utførelsestiden til Lambda-funksjoner. Dette gir verdifull innsikt i om de opprinnelige verdiene er hensiktsmessige eller krever justeringer.

Bruk CloudWatch-metrikker og logger for å spore utførelsestiden. Identifiser funksjoner som tar lengre tid enn forventet, og de som fullføres mye raskere.

#3. Asynkron Påkalling

Hvis en Lambda-funksjon utløses av en hendelse som ikke krever umiddelbar respons, som filopplasting eller melding fra en kø, bruk asynkron påkalling. Dette gjør at funksjonen kjøres i bakgrunnen uten å vente på svar, noe som reduserer risikoen for tidsavbrudd. Dette eliminerer behovet for å inkludere ventetid i den totale utførelsestiden.

#4. Bruk Step Functions for Komplekse Prosesser

Hvis du har prosesser som overskrider 15-minutters grensen, bruk AWS Step Functions for å orkestrere en serie Lambda-funksjoner eller andre AWS-tjenester. Step Functions deler prosessen i mindre, håndterbare oppgaver som kan gjennomføres innenfor tidsavbruddsgrensen.

Du kan også kjøre flere Lambda-funksjoner parallelt innenfor en Step Function. La Step Function vente på at alle de parallelle funksjonene er ferdige før den fortsetter. Dette er en form for horisontal skalering hvor flere funksjoner samarbeider for å løse et problem.

Deretter må du samle inn delresultatene og bygge det endelige resultatet, som gjerne kan utføres i en frittstående Lambda-funksjon.

#5. Optimaliser Koden

Optimaliser Lambda-funksjonskoden for å redusere utførelsestiden og forbedre ytelsen. Dette er nyttig hvis tidsavbruddet bare er utilstrekkelig i enkelte tilfeller. Kodeoptimalisering kan eliminere disse feiltilfellene.

Hvordan påvirker Tidsavbrudd Fakturering?

Kilde: aws.amazon.com

Tidsavbruddsinnstillingen påvirker ikke faktureringen direkte. AWS Lambda fakturerer for antall forespørsler og varigheten av funksjonens utførelsestid.

Å øke tidsavbruddet kan føre til lengre utførelsestider, men bare hvis funksjonen faktisk trenger den ekstra tiden. Hvis dette kombineres med hyppigere bruk, kan det føre til høyere kostnader. Men hvis funksjonen ikke aktiveres ofte eller fullføres raskere enn tidsavbruddet, vil effekten på faktureringen være minimal.

Derfor er det ikke sikkert at det å sette alle tidsavbrudd til 15 minutter automatisk vil være hovedårsaken til økte kostnader.

Det kan imidlertid føre til en indirekte kostnadsøkning. Utviklere kan være mindre tilbøyelige til å optimalisere koden hvis de føler at de har mye tid til rådighet.

AWS Lambda tilbyr også et gratisnivå med 1 million gratis forespørsler og 400 000 GB-sekunder med beregningstid per måned. Hvis bruken din er innenfor disse grensene, vil du ikke betale for utførelsestiden, uavhengig av tidsavbruddsinnstillingen.

Konklusjon

AWS Lambda er et kraftfullt verktøy for serverløs prosessering i AWS-skyen. Det er viktig å være klar over både dets styrker og begrensninger. Unngå å bruke det for formål det ikke er designet for.

Lambda er ideelt for enkle, asynkrone og hendelsesdrevne oppgaver som ikke tar mer enn 15 minutter. For mer komplekse oppgaver, bruk AWS Step Functions for å orkestrere flere Lambda-funksjoner. Eventuelt kan du vurdere å bruke tradisjonelle servere med tilstrekkelig datakraft.

Sjekk gjerne ut en introduksjon til AWS Lambda for nybegynnere for mer informasjon.