Konfigurowanie funkcji Lambda

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Dlaczego konfiguracja ma znaczenie

  • Ten sam kod może działać zupełnie inaczej przy różnych ustawieniach.
  • Konfiguracja wpływa na wydajność, koszty i bezpieczeństwo.
  • Celem jest przewidywalne działanie w środowiskach dev i prod.

Ten sam kod, różne ustawienia

Serverless Applications with AWS Lambda

Kod a konfiguracja

Pakiet kodu

  • Pakiet kodu
  • Logika handlera i zależności.
  • Zmiany wymagają wdrożenia.

Konfiguracja funkcji

  • Konfiguracja funkcji
  • Pamięć, limit czasu, zmienne środowiskowe.
  • Rola wykonawcza i warstwy.
Serverless Applications with AWS Lambda

Co możesz konfigurować

  • Środowisko uruchomieniowe i handler: jaki kod uruchamia Lambda.
  • Pamięć i limit czasu: wydajność, koszty, bezpieczeństwo.
  • Zmienne środowiskowe: konfiguracja bez hardkodowania.
  • Rola wykonawcza: uprawnienia do API AWS.
  • Warstwy: współdzielone zależności między funkcjami.

Parametry konfiguracji Lambda

Serverless Applications with AWS Lambda

Środowisko uruchomieniowe i handler

  • Środowisko uruchomieniowe = środowisko językowe (np. Python).
  • Handler = punkt wejścia wywoływany przez Lambda.
  • Format handlera: plik.funkcja.
  • Przykład: lambda_function.lambda_handler.

Budowa ciągu handlera

Serverless Applications with AWS Lambda

Ciąg handlera — co może pójść nie tak

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

Import, a potem wywołanie handlera

Serverless Applications with AWS Lambda

Rola wykonawcza (IAM)

  • IAM = Identity and Access Management (zarządzanie uprawnieniami).
  • Rola wykonawcza określa, co twoja funkcja może robić.
  • Kontroluje, które API AWS może wywoływać twój kod.

Rola wykonawcza jako przepustka

Serverless Applications with AWS Lambda

Czym jest warstwa Lambda?

  • Warstwa to plik ZIP dołączany do funkcji.
  • Lambda udostępnia pliki warstwy w czasie wykonania pod ścieżką /opt.
  • Używaj warstw do współdzielonych bibliotek i narzędzi.
  • Zaktualizuj warstwę raz — korzysta z niej wiele funkcji.

Warstwa zamontowana pod /opt

Serverless Applications with AWS Lambda

Gdzie warstwy pojawiają się w czasie wykonania

  • Kod funkcji jest montowany pod /var/task.
  • Dołączone warstwy są montowane pod /opt.
  • Lambda udostępnia też folder tymczasowy /tmp.

Foldery środowiska: /var/task, /opt, /tmp

Serverless Applications with AWS Lambda

Pamięć a CPU

  • Więcej pamięci -> więcej CPU.
  • Może skrócić czas wykonania zadań intensywnych obliczeniowo.
  • Całkowity koszt zależy od czasu trwania i pamięci.

Pamięć zwiększa dostępność CPU

Serverless Applications with AWS Lambda

Dostrajaj pamięć na podstawie pomiarów

  • Zacznij od rozsądnej wartości domyślnej (np. 256 MB).
  • Testuj z realistycznymi zdarzeniami.
  • Porównaj czas wykonania i koszty dla różnych rozmiarów pamięci.

Testowanie pamięci: pomiar czasu i kosztów

Serverless Applications with AWS Lambda

Limity czasu i bezpieczne wykonanie

  • Limit czasu zatrzymuje niekończące się wykonania.
  • Sprawdzaj pozostały czas przed długimi operacjami.
  • W razie potrzeby szybko zgłaszaj błąd i ponawiaj próbę.

Limit czasu jako zabezpieczenie

Serverless Applications with AWS Lambda

Przykład: sprawdzanie pozostałego czasu

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}

Zabezpieczenie przez sprawdzenie pozostałego czasu

Serverless Applications with AWS Lambda

Zmienne środowiskowe

  • Trzymaj konfigurację poza kodem.
  • Rozdziel ustawienia dla dev/test/prod.
  • Do wrażliwych wartości używaj Secrets Manager.

Zmienne środowiskowe sterują zachowaniem

Serverless Applications with AWS Lambda

Przykład: odczytywanie zmiennych środowiskowych

import os

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

Wartości domyślne ułatwiają lokalne testy

  • Zaimportuj os, aby uzyskać dostęp do zmiennych środowiskowych.
  • os.getenv zwraca wartość zmiennej lub wartość domyślną.
Serverless Applications with AWS Lambda

Typowe błędy w konfiguracji

  • Hardkodowanie wartości środowiska w kodzie.
  • Zbyt krótki limit czasu lub brakujące uprawnienia IAM.
  • Sekrety przechowywane w zwykłych zmiennych środowiskowych.

Typowe błędy i dobre praktyki

Serverless Applications with AWS Lambda

Czas na praktykę!

Serverless Applications with AWS Lambda

Preparing Video For Download...