Integracja Lambdy z usługami AWS

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Pętla integracji

  • Zdarzenie wchodzi.
  • Logika handlera.
  • Wywołanie SDK.

Pętla: zdarzenie -> handler -> SDK

Serverless Applications with AWS Lambda

Triggery a wywołania SDK

Trigger

  • Decyduje, kiedy Lambda się uruchamia.

Wywołanie SDK (wewnątrz handlera)

  • Odczytuje i zapisuje dane w usługach takich jak DynamoDB i S3.

Trigger a wywołanie SDK

Serverless Applications with AWS Lambda

Konkretny przykład

  • Plik trafia do S3.
  • Lambda się uruchamia.
  • Zapisanie krótkiego rekordu w DynamoDB.

Przesłanie do S3 -> Lambda -> DynamoDB

Serverless Applications with AWS Lambda

Payload zdarzenia: znajdź to, czego potrzebujesz

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

Opisy struktury zdarzenia S3

Serverless Applications with AWS Lambda

Gdzie pasuje AWS SDK

  • Twój kod wywołuje SDK (boto3).
  • SDK wywołuje API AWS.
  • IAM pełni rolę strażnika.

Handler -> SDK -> API AWS

Serverless Applications with AWS Lambda

Rola wykonawcza = dane uwierzytelniające

  • Tymczasowe dane uwierzytelniające z roli wykonawczej.
  • Żadnych kluczy dostępu w kodzie.
  • Jeśli rola nie może wywołać API, wywołanie SDK kończy się błędem.

Rola wykonawcza dostarcza dane uwierzytelniające

Serverless Applications with AWS Lambda

Zasada najmniejszych uprawnień: ogranicz działania i zasoby

  • Ogranicza zasięg potencjalnych szkód.
  • Przyznawaj tylko niezbędne działania i zasoby.
  • Unikaj symboli wieloznacznych, jeśli naprawdę nie są potrzebne.

Zasada najmniejszych uprawnień: działania i zasoby

Serverless Applications with AWS Lambda

DynamoDB: wybierz właściwą operację

  • PutItem zapisuje.
  • GetItem odczytuje według klucza.
  • Query wyszukuje powiązane elementy.
  • Wybieraj precyzyjne operacje zamiast szerokiego skanowania.

Operacje DynamoDB

Serverless Applications with AWS Lambda

S3: praca z bucket + klucz

  • Obiekty są przechowywane w bucket + klucz.
  • GetObject pobiera zawartość.
  • PutObject zapisuje nowy plik pochodny.

Bucket i klucz S3

Serverless Applications with AWS Lambda

Przechowuj konfigurację w zmiennych środowiskowych

  • Wpisywanie nazw zasobów na stałe jest kruche.
  • Używaj zmiennych środowiskowych.
  • Ten sam kod wdrażaj na dev i prod.

Konfiguracja przez zmienne środowiskowe

Serverless Applications with AWS Lambda

Kod SDK: zachowaj prostotę i testowalność

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Waliduj dane wejściowe, wywołaj SDK, zwróć wynik.
  • Testuj jednostkowo czystą logikę.

Mały handler z wywołaniem SDK

Serverless Applications with AWS Lambda

Obsługuj błędy SDK świadomie

  • Błędy uprawnień są częste na początku.
  • Gdy wywołanie się nie powiedzie, pokaż wyraźnie, dlaczego.
  • Dobre logi ułatwiają debugowanie.

Ścieżki sukcesu i błędu

Serverless Applications with AWS Lambda

Gdy IAM jest źle skonfigurowany, kod wygląda poprawnie

AccessDeniedException
required action denied
  • Najpierw popraw IAM, potem logikę handlera.

Odmowa dostępu

Serverless Applications with AWS Lambda

Idempotentność: bezpieczne ponawianie i duplikaty

  • To samo zdarzenie może pojawić się dwukrotnie.
  • Klucze idempotentności zapobiegają podwójnemu przetwarzaniu.
  • Warunkowe zapisy sprawiają, że powtórzenia są bezpieczne.

Wzorzec klucza idempotentności

Serverless Applications with AWS Lambda

Całość od początku do końca

  • Zdarzenie S3 dostarcza bucket i klucz.
  • Handler je przetwarza.
  • PutItem zapisuje metadane do DynamoDB.
  • CloudWatch Logs pokazuje, co się stało.

Podsumowanie integracji end-to-end

Serverless Applications with AWS Lambda

Najważniejsze wnioski

  • Oddzielaj triggery od wywołań SDK.
  • Ograniczaj uprawnienia przez rolę wykonawczą.
  • Przenoś konfigurację między środowiskami dzięki zmiennym środowiskowym.

Najważniejsze wnioski z integracji

Serverless Applications with AWS Lambda

Czas na praktykę!

Serverless Applications with AWS Lambda

Preparing Video For Download...