Integrarea Lambda cu serviciile AWS

Aplicații serverless cu AWS Lambda

Claudio Canales

Senior DevOps Engineer

Bucla de integrare

  • Eveniment primit.
  • Logica handler-ului.
  • Apel SDK.

Bucla eveniment -> handler -> SDK

Aplicații serverless cu AWS Lambda

Triggere vs apeluri SDK

Trigger

  • Decide când rulează Lambda.

Apel SDK (în handler)

  • Citește și scrie în servicii precum DynamoDB și S3.

Trigger vs apel SDK

Aplicații serverless cu AWS Lambda

Un exemplu concret

  • Un fișier ajunge în S3.
  • Lambda rulează.
  • Stochează o înregistrare în DynamoDB.

Încărcare S3 -> Lambda -> DynamoDB

Aplicații serverless cu AWS Lambda

Payload eveniment: localizează ce ai nevoie

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

Detalii payload eveniment S3

Aplicații serverless cu AWS Lambda

Locul AWS SDK în arhitectură

  • Codul tău apelează SDK-ul (boto3).
  • SDK-ul apelează API-urile AWS.
  • IAM este paznicul.

Handler -> SDK -> AWS API

Aplicații serverless cu AWS Lambda

Rolul de execuție = credențiale

  • Credențiale temporare din rolul de execuție.
  • Nicio cheie de acces în cod.
  • Dacă rolul nu poate apela un API, apelul SDK eșuează.

Rolul de execuție oferă credențiale

Aplicații serverless cu AWS Lambda

Privilegiu minim: limitează acțiunile și resursele

  • Limitează impactul unui incident.
  • Acordă doar acțiunile și resursele necesare.
  • Evită wildcardurile dacă nu sunt strict necesare.

Privilegiu minim: acțiuni și resurse

Aplicații serverless cu AWS Lambda

DynamoDB: alege operația potrivită

  • PutItem scrie.
  • GetItem citește după cheie.
  • Query găsește elemente corelate.
  • Preferă operațiile țintite în locul scanărilor largi.

Operații DynamoDB

Aplicații serverless cu AWS Lambda

S3: lucrează cu bucket + cheie

  • Obiectele sunt identificate prin bucket + cheie.
  • GetObject preia conținutul.
  • PutObject scrie un fișier derivat.

Bucket și cheie S3

Aplicații serverless cu AWS Lambda

Pune configurația în variabile de mediu

  • Hardcodarea numelor de resurse e fragilă.
  • Folosește variabile de mediu.
  • Deployează același cod în dev și prod.

Configurare prin variabile de mediu

Aplicații serverless cu AWS Lambda

Codul SDK: păstrează-l mic și testabil

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Validează intrările, apelează SDK-ul, returnează.
  • Testează logic pură cu teste unitare.

Handler mic cu apel SDK

Aplicații serverless cu AWS Lambda

Gestionează deliberat erorile SDK

  • Erorile de permisiuni sunt frecvente la început.
  • Când un apel eșuează, fă cauza evidentă.
  • Loguri bune facilitează depanarea.

Căi de succes și eșec

Aplicații serverless cu AWS Lambda

Când IAM e greșit, codul pare corect

AccessDeniedException
required action denied
  • Corectează mai întâi IAM, apoi logica handler-ului.

Acces refuzat

Aplicații serverless cu AWS Lambda

Idempotență: reluări și duplicate în siguranță

  • Același eveniment poate apărea de două ori.
  • Cheile de idempotență previn procesarea dublă.
  • Scrierile condiționate mențin siguranța la reluări.

Tiparul cheii de idempotență

Aplicații serverless cu AWS Lambda

Ansamblu (end-to-end)

  • Evenimentul S3 aduce bucket-ul și cheia.
  • Handler-ul le parsează.
  • PutItem scrie metadatele în DynamoDB.
  • CloudWatch Logs arată ce s-a întâmplat.

Rezumat integrare end-to-end

Aplicații serverless cu AWS Lambda

Concluzii cheie

  • Separă triggere de apelurile SDK.
  • Menține permisiunile restrânse prin rolul de execuție.
  • Fă configurația portabilă cu variabile de mediu.

Concluzii integrare

Aplicații serverless cu AWS Lambda

Hai să exersăm!

Aplicații serverless cu AWS Lambda

Preparing Video For Download...