Model wykonania Lambda

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Automatyczne uruchamianie

Sterowane zdarzeniami AWS

  • Lambda uruchamia kod, gdy zajdzie zdarzenie.
  • Przykład: przesłanie do S3 -> zmiana rozmiaru obrazu.
  • Różne wyzwalacze, ten sam schemat.
Serverless Applications with AWS Lambda

Bezczynność do momentu wyzwolenia

Oś czasu: bezczynność -> zdarzenie -> uruchomienie -> zatrzymanie

  • Bezczynność: kod nie działa.
  • Zdarzenie: handler działa, potem się zatrzymuje.

Analogia do czujnika ruchu

  • Jak czujnik ruchu: czeka, aż coś się wydarzy.
  • Wyzwalacz przełącza stan z „wyłączone" na „włączone".
Serverless Applications with AWS Lambda

Czym jest AWS Lambda?

AWS Lambda w skrócie

  • Usługa obliczeniowa sterowana zdarzeniami.
  • Skaluje się automatycznie wraz z obciążeniem.
  • Płacisz tylko za czas działania kodu.
Serverless Applications with AWS Lambda

Jak Lambda wykonuje kod

Przepływ wykonania Lambda

  • Źródło zdarzenia wyzwala Lambda.
  • Lambda przekazuje ładunek zdarzenia do handlera.
  • Handler zwraca wynik.
Serverless Applications with AWS Lambda

Skalowanie wraz z obciążeniem

Skalowanie tworzy nowe środowiska

  • Więcej zdarzeń: więcej równoległych wywołań.
  • Lambda uruchamia dodatkowe środowiska.
  • Każde nowe środowisko może powodować zimny start.
Serverless Applications with AWS Lambda

Funkcja handler

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: ładunek wejściowy (JSON).
  • context: metadane środowiska uruchomieniowego.
  • return: wynik (lub informacja o sukcesie/błędzie).

Handler odbiera zdarzenie i kontekst

Serverless Applications with AWS Lambda

Obiekt zdarzenia

Ładunek zdarzenia magazynu obiektów

Zdarzenie S3: nazwa zasobnika + klucz obiektu.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Zadanie jest jedno: wyodrębnij to, czego potrzebujesz.

Ładunek zdarzenia żądania HTTP

Zdarzenie API: metoda, ścieżka, treść.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Różne wyzwalacze, różny JSON.
Serverless Applications with AWS Lambda

Obiekt kontekstu

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Czas pozostały do przekroczenia limitu.
  • aws_request_id ID żądania do śledzenia w logach.
Serverless Applications with AWS Lambda

Bezstanowe wykonanie

Ponowne użycie vs. reset przy ciepłym starcie

  • Każde wywołanie jest niezależne.
  • Ponowne użycie środowiska jest możliwe, ale nie gwarantowane.
  • Stan przechowuj poza Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Serverless Applications with AWS Lambda

Zimne starty

Oś czasu zimnego startu

  • Nowe środowisko wykonania.
  • Ładowanie kodu i zależności.
  • Inicjalizacja, a potem uruchomienie handlera.
Serverless Applications with AWS Lambda

Ciepłe starty

Oś czasu ciepłego startu

  • Ponowne użycie istniejącego środowiska.
  • Większość inicjalizacji jest pomijana.
  • Handler startuje szybciej.
Serverless Applications with AWS Lambda

Init, wywołanie, zamrożenie

Cykl życia środowiska wykonania

  • Init działa raz na środowisko.
  • Handler działa przy każdym wywołaniu.
  • Między wywołaniami środowisko może zostać zamrożone.
Serverless Applications with AWS Lambda

Optymalizacja pod kątem zimnych startów

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

Init raz vs. handler przy każdym wywołaniu

  • Importy i klientów SDK umieszczaj poza handlerem.
Serverless Applications with AWS Lambda

Czas na praktykę!

Serverless Applications with AWS Lambda

Preparing Video For Download...