Förstå Lambdas exekveringsmodell

Serverlösa applikationer med AWS Lambda

Claudio Canales

Senior DevOps Engineer

Automatisk exekvering

Händelsestyrd AWS

  • Lambda kör kod när en händelse inträffar.
  • Exempel: S3-uppladdning -> ändra bildstorlek.
  • Olika triggers, samma mönster.
Serverlösa applikationer med AWS Lambda

Inaktivt tills det triggas

Inaktiv -> händelse -> kör -> stopp

  • Inaktiv: ingenting körs.
  • Händelse: hanteraren körs och stannar sedan.

Rörelseljus-analogi för Lambda

  • Som ett rörelseljus: inaktivt tills det triggas.
  • Triggern slår om "av" till "på".
Serverlösa applikationer med AWS Lambda

Vad är AWS Lambda?

AWS Lambda i korthet

  • Händelsestyrd beräkningstjänst.
  • Skalas automatiskt efter behov.
  • Betala bara för faktisk körtid.
Serverlösa applikationer med AWS Lambda

Hur Lambda kör din kod

Lambdas exekveringsflöde

  • En händelsekälla triggar Lambda.
  • Lambda skickar ett händelseobjekt till din hanterare.
  • Din hanterare returnerar ett resultat.
Serverlösa applikationer med AWS Lambda

Skalning efter behov

Skalning skapar fler miljöer

  • Fler händelser: fler parallella anrop.
  • Lambda startar fler exekveringsmiljöer.
  • Kallstarter kan inträffa per ny miljö.
Serverlösa applikationer med AWS Lambda

Hanterarfunktionen

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: inkommande data (JSON).
  • context: körningsmetadata.
  • return: utdata (eller lyckad/misslyckad).

Hanteraren tar emot event och context

Serverlösa applikationer med AWS Lambda

Händelseobjektet

Händelseobjekt för objektlagring

S3-händelse: bucket + objektnyckel.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Samma uppgift: extrahera det du behöver.

Händelseobjekt för HTTP-förfrågan

API-händelse: metod, sökväg, body.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Olika triggers, olika JSON.
Serverlösa applikationer med AWS Lambda

Kontextobjektet

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Återstående tid före timeout.
  • aws_request_id Begärans-ID för loggspårning.
Serverlösa applikationer med AWS Lambda

Tillståndslös exekvering

Återanvändning kontra återställning vid varm start

  • Varje anrop är oberoende.
  • Återanvändning är möjlig, inte garanterad.
  • Lagra tillstånd utanför Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Serverlösa applikationer med AWS Lambda

Kallstarter

Tidslinje för kallstart

  • Ny exekveringsmiljö.
  • Ladda kod och beroenden.
  • Kör initiering, sedan hanteraren.
Serverlösa applikationer med AWS Lambda

Varma starter

Tidslinje för varm start

  • Återanvänd befintlig miljö.
  • Hoppa över det mesta av initieringen.
  • Hanteraren körs snabbare.
Serverlösa applikationer med AWS Lambda

Init, anrop, frysning

Livscykeln för exekveringsmiljön

  • Init körs en gång per miljö.
  • Hanteraren körs per anrop.
  • Mellan körningar kan miljön frysa.
Serverlösa applikationer med AWS Lambda

Optimera för kallstarter

# init (once per env)
import boto3
s3 = boto3.client('s3')
# handler (every invocation)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init en gång kontra hanteraren per anrop

  • Placera importer och SDK-klienter utanför hanteraren.
Serverlösa applikationer med AWS Lambda

Nu kör vi en övning!

Serverlösa applikationer med AWS Lambda

Preparing Video For Download...