Konfigurace Lambda funkcí

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Proč na konfiguraci záleží

  • Stejný kód se může chovat velmi odlišně při různých nastaveních.
  • Konfigurace ovlivňuje výkon, náklady i bezpečnost.
  • Cílem je předvídatelné chování v dev i prod.

Stejný kód, různá nastavení

Serverless Applications with AWS Lambda

Kód vs. konfigurace

Balíček kódu

  • Balíček kódu
  • Logika handleru + závislosti.
  • Změny vyžadují nasazení.

Konfigurace funkce

  • Konfigurace funkce
  • Paměť, timeout, proměnné prostředí.
  • Role pro spuštění + vrstvy.
Serverless Applications with AWS Lambda

Co můžeš nastavit

  • Runtime + handler: jaký kód Lambda spouští.
  • Paměť + timeout: výkon, náklady, bezpečnost.
  • Proměnné prostředí: konfigurace bez hardcodování.
  • Role pro spuštění: oprávnění pro AWS API.
  • Vrstvy: sdílené závislosti napříč funkcemi.

Nastavitelné parametry Lambda

Serverless Applications with AWS Lambda

Základy runtimeu a handleru

  • Runtime = jazykové prostředí (například Python).
  • Handler = vstupní bod, který Lambda volá.
  • Formát handleru: file.function.
  • Příklad: lambda_function.lambda_handler.

Rozbor řetězce handleru

Serverless Applications with AWS Lambda

Řetězec handleru: co se může pokazit

# lambda_function.py
def lambda_handler(event, context):
    return {"statusCode": 200}

Import a následné volání handleru

Serverless Applications with AWS Lambda

Role pro spuštění (IAM)

  • IAM = Identity and Access Management (oprávnění).
  • Role pro spuštění určuje, co smí tvoje funkce dělat.
  • Řídí, která AWS API může tvůj kód volat.

Role pro spuštění jako přístupová karta

Serverless Applications with AWS Lambda

Co je Lambda vrstva?

  • Vrstva je ZIP soubor připojený k funkci.
  • Lambda zpřístupní soubory vrstvy za běhu pod /opt.
  • Vrstvy využij pro sdílené knihovny a společné nástroje.
  • Aktualizuj vrstvu jednou; může ji sdílet více funkcí.

Vrstva připojená pod /opt

Serverless Applications with AWS Lambda

Kde se vrstvy za běhu objeví

  • Kód funkce je připojen pod /var/task.
  • Připojené vrstvy jsou dostupné pod /opt.
  • Lambda také poskytuje dočasnou složku /tmp.

Složky za běhu: /var/task, /opt, /tmp

Serverless Applications with AWS Lambda

Paměť ovlivňuje i CPU

  • Více paměti -> více CPU.
  • Může zkrátit dobu běhu u úloh náročných na CPU.
  • Celkové náklady závisí na době běhu i paměti.

Paměť zvyšuje výkon CPU

Serverless Applications with AWS Lambda

Ladění paměti pomocí měření

  • Začni s rozumnou výchozí hodnotou (například 256 MB).
  • Testuj s realistickými událostmi.
  • Porovnej dobu běhu a náklady pro různé velikosti paměti.

Sweep paměti: měření doby běhu a nákladů

Serverless Applications with AWS Lambda

Timeout a bezpečné spuštění

  • Timeout zastaví nekontrolované běhy.
  • Před delší operací zkontroluj zbývající čas.
  • Selhej rychle a v případě potřeby zopakuj pokus.

Timeout jako bezpečnostní časovač

Serverless Applications with AWS Lambda

Ukázka: kontrola zbývajícího času

def lambda_handler(event, context):
    time_left = context.get_remaining_time_in_millis()
    if time_left < 500:
        raise TimeoutError("Not enough time left")
    return {"statusCode": 200}

Ochrana pomocí odpočítávání v kontextu

Serverless Applications with AWS Lambda

Proměnné prostředí

  • Konfigurace nepatří do kódu.
  • Odděluj nastavení pro dev, test a prod.
  • Pro citlivé hodnoty použij Secrets Manager.

Proměnné prostředí řídí chování

Serverless Applications with AWS Lambda

Ukázka: čtení proměnných prostředí

import os

STAGE = os.getenv("STAGE", "dev")
LOG_LEVEL = os.getenv(
    "LOG_LEVEL", "INFO"
)

Výchozí hodnoty zjednodušují lokální testování

  • Importuj os pro přístup k proměnným prostředí.
  • os.getenv vrátí hodnotu nebo výchozí hodnotu.
Serverless Applications with AWS Lambda

Časté chyby v konfiguraci

  • Hardcodované hodnoty prostředí přímo v kódu.
  • Příliš nízký timeout nebo chybějící IAM oprávnění.
  • Tajné hodnoty v běžných proměnných prostředí.

Časté chyby a zásady

Serverless Applications with AWS Lambda

Pojďme cvičit!

Serverless Applications with AWS Lambda

Preparing Video For Download...