Integrera Lambda med AWS-tjänster

Serverlösa applikationer med AWS Lambda

Claudio Canales

Senior DevOps Engineer

Integrationsslingan

  • Event in.
  • Hanterarlogik.
  • SDK-anrop.

Event -> handler -> SDK-loop

Serverlösa applikationer med AWS Lambda

Triggers kontra SDK-anrop

Trigger

  • Bestämmer när Lambda körs.

SDK-anrop (inne i hanteraren)

  • Läser och skriver till tjänster som DynamoDB och S3.

Trigger kontra SDK-anrop

Serverlösa applikationer med AWS Lambda

Ett konkret exempel

  • En fil laddas upp till S3.
  • Lambda körs.
  • Lagra en liten post i DynamoDB.

S3-uppladdning -> Lambda -> DynamoDB

Serverlösa applikationer med AWS Lambda

Eventnyttolast: hitta det du behöver

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

Bildtexter för S3-eventets nyttolast

Serverlösa applikationer med AWS Lambda

Var AWS SDK passar in

  • Din kod anropar SDK:n (boto3).
  • SDK:n anropar AWS API:er.
  • IAM är grindvakten.

Hanterare -> SDK -> AWS API

Serverlösa applikationer med AWS Lambda

Exekveringsroll = inloggningsuppgifter

  • Tillfälliga inloggningsuppgifter från exekveringsrollen.
  • Inga åtkomstnycklar i koden.
  • Om rollen inte kan anropa ett API misslyckas SDK-anropet.

Exekveringsrollen tillhandahåller inloggningsuppgifter

Serverlösa applikationer med AWS Lambda

Minsta privilegium: begränsa åtgärder och resurser

  • Begränsar skadeomfånget.
  • Bevilja bara de åtgärder och resurser som behövs.
  • Undvik jokertecken om du inte verkligen behöver dem.

Minsta privilegium: åtgärder och resurser

Serverlösa applikationer med AWS Lambda

DynamoDB: välj rätt operation

  • PutItem skriver.
  • GetItem läser via nyckel.
  • Query hittar relaterade poster.
  • Föredra riktade operationer framför breda skanningar.

DynamoDB-operationer

Serverlösa applikationer med AWS Lambda

S3: arbeta med bucket + nyckel

  • Objekt finns på bucket + nyckel.
  • GetObject hämtar innehållet.
  • PutObject skriver en ny härledd fil.

S3-bucket och nyckel

Serverlösa applikationer med AWS Lambda

Lägg konfigurationen i miljövariabler

  • Hårdkodade resursnamn är sköra.
  • Använd miljövariabler.
  • Driftsätt samma kod i dev och prod.

Konfiguration med miljövariabler

Serverlösa applikationer med AWS Lambda

SDK-kod: håll den liten och testbar

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Validera indata, anropa SDK:n, returnera.
  • Enhetstesta den rena logiken.

Liten hanterare med SDK-anrop

Serverlösa applikationer med AWS Lambda

Hantera SDK-fel medvetet

  • Behörighetsfel är vanliga i början.
  • När ett anrop misslyckas, gör orsaken tydlig.
  • Bra loggar gör felsökning säkrare.

Lyckade och misslyckade körvägar

Serverlösa applikationer med AWS Lambda

När IAM är fel ser koden bra ut

AccessDeniedException
required action denied
  • Åtgärda IAM först, sedan hanterarlogiken.

Åtkomst nekad

Serverlösa applikationer med AWS Lambda

Idempotens: säkra återförsök och dubbletter

  • Samma event kan dyka upp två gånger.
  • Idempotensnycklar förhindrar dubbelbearbetning.
  • Villkorliga skrivningar gör upprepningar säkra.

Mönster med idempotensnyckel

Serverlösa applikationer med AWS Lambda

Sätt ihop det hela (end to end)

  • S3-eventet ger bucket och nyckel.
  • Hanteraren parsar dem.
  • PutItem skriver metadata till DynamoDB.
  • CloudWatch Logs visar vad som hände.

Sammanfattning av end-to-end-integration

Serverlösa applikationer med AWS Lambda

Viktiga slutsatser

  • Håll triggers och SDK-anrop separerade.
  • Begränsa behörigheter med exekveringsrollen.
  • Gör konfigurationen portabel med miljövariabler.

Viktiga slutsatser om integration

Serverlösa applikationer med AWS Lambda

Nu kör vi en övning!

Serverlösa applikationer med AWS Lambda

Preparing Video For Download...