Integrace Lambdy se službami AWS

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Integrační smyčka

  • Příchozí událost.
  • Logika handleru.
  • Volání SDK.

Smyčka Event -> handler -> SDK

Serverless Applications with AWS Lambda

Triggery vs. volání SDK

Trigger

  • Určuje, kdy se Lambda spustí.

Volání SDK (uvnitř handleru)

  • Čte a zapisuje do služeb jako DynamoDB a S3.

Trigger vs. volání SDK

Serverless Applications with AWS Lambda

Konkrétní příklad

  • Do S3 přijde soubor.
  • Spustí se Lambda.
  • Záznam se uloží do DynamoDB.

Nahrání do S3 -> Lambda -> DynamoDB

Serverless Applications with AWS Lambda

Payload události: najdi, co potřebuješ

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

Popis payload události S3

Serverless Applications with AWS Lambda

Kde se uplatní AWS SDK

  • Tvůj kód volá SDK (boto3).
  • SDK volá AWS API.
  • IAM funguje jako strážce.

Handler -> SDK -> AWS API

Serverless Applications with AWS Lambda

Exekuční role = přihlašovací údaje

  • Dočasné přihlašovací údaje z exekuční role.
  • Žádné přístupové klíče v kódu.
  • Pokud role nemá oprávnění, volání SDK selže.

Exekuční role poskytuje přihlašovací údaje

Serverless Applications with AWS Lambda

Minimální oprávnění: omez akce i prostředky

  • Omezuje dosah případného incidentu.
  • Povol jen nezbytné akce a prostředky.
  • Vyhýbej se zástupným znakům, pokud je nepotřebuješ.

Minimální oprávnění: akce a prostředky

Serverless Applications with AWS Lambda

DynamoDB: vyber správnou operaci

  • PutItem zapisuje.
  • GetItem čte podle klíče.
  • Query hledá související položky.
  • Preferuj cílené operace před plným prohledáváním.

Operace DynamoDB

Serverless Applications with AWS Lambda

S3: práce s bucketem a klíčem

  • Objekty jsou uloženy v bucketu pod klíčem.
  • GetObject načítá obsah.
  • PutObject zapíše nově odvozený soubor.

Bucket a klíč v S3

Serverless Applications with AWS Lambda

Konfiguraci dej do proměnných prostředí

  • Pevně zakódované názvy prostředků jsou křehké.
  • Používej proměnné prostředí.
  • Nasaď stejný kód do dev i prod.

Konfigurace přes proměnné prostředí

Serverless Applications with AWS Lambda

Kód SDK: krátký a testovatelný

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Ověř vstupy, zavolej SDK, vrať výsledek.
  • Čistou logiku pokryj jednotkovými testy.

Jednoduchý handler s voláním SDK

Serverless Applications with AWS Lambda

Chyby SDK ošetři záměrně

  • Chyby oprávnění jsou na začátku časté.
  • Když volání selže, ukaž jasně proč.
  • Dobrý logging usnadní ladění.

Cesty při úspěchu a selhání

Serverless Applications with AWS Lambda

Špatné IAM? Kód vypadá v pořádku

AccessDeniedException
required action denied
  • Nejprve oprav IAM, pak logiku handleru.

Přístup odepřen

Serverless Applications with AWS Lambda

Idempotence: bezpečné opakování i duplicity

  • Stejnou událost můžeš dostat dvakrát.
  • Klíče idempotence zabrání dvojímu zpracování.
  • Podmíněné zápisy zajistí bezpečné opakování.

Vzor klíče idempotence

Serverless Applications with AWS Lambda

Celý tok pohromadě (end to end)

  • Událost S3 přinese bucket a klíč.
  • Handler je zpracuje.
  • PutItem zapíše metadata do DynamoDB.
  • CloudWatch Logs ukáží, co se stalo.

Shrnutí celé integrace

Serverless Applications with AWS Lambda

Hlavní poznatky

  • Odděl triggery od volání SDK.
  • Udržuj oprávnění úzká pomocí exekuční role.
  • Konfiguraci přenášej přes proměnné prostředí.

Hlavní poznatky z integrace

Serverless Applications with AWS Lambda

Pojďme cvičit!

Serverless Applications with AWS Lambda

Preparing Video For Download...