Dynamodb strømmer med lambda

Dynamodb strømmer med lambda
DynamoDB Streams er en funksjon i Amazon DynamoDB som lar deg få en sanntidsstrøm av endringer eller dataendringer som gjøres i DynamoDB-tabeller. Du kan bruke denne funksjonen til å bygge applikasjonene som reagerer på dataendringer i DynamoDB -tabeller som å oppdatere hurtigbuffer og sende varsler.

Selvfølgelig kan du også bruke DynamoDB -strømmene for å utløse nedstrømsprosessene og AWS Lambda -funksjonene. Lambda, per definisjon, er en serverløs beregningstjeneste som kjører koden din som svar på hendelser og administrerer automatisk beregningsressursene for deg.

Du kan bruke Lambda til å skrive koden i Node.JS, Python, Java eller C# for å behandle strømopptakene og ta passende handlinger. Den største fordelen med å integrere DynamoDB -strømmen med Lambda er at Lambda lar deg kjøre støttetjenester eller applikasjonskoder uten behov for administrasjon.

Hvordan bruke AWS DynamoDB -strømmer med Lambda

Selv om det er mulig å lage en lambda -funksjon som bruker hendelsene og forekomstene fra en DynamoDB -strøm, kan prosessen være ganske oppgave, spesielt på ditt første forsøk. Følgende trinn hjelper:

Trinn 1: Forsikre deg om at systemet ditt oppfyller forutsetningene

Denne prosedyren vil bare lykkes hvis du kjenner de grunnleggende lambda -operasjonene og prosessene. Dermed bør dette være din første for å sikre at din forståelse av lambda er over gjennomsnittet.

Den andre forutsetningen som er verdt å vurdere er å bekrefte systemets AWS -versjon. Du kan bruke følgende kommando:

aws -version

Resultatet for den oppgitte kommandoen skal se slik ut:

AWS-CLI/2.x.X Python/3.x.x linux/4.x.X-XXX-STD BOTOCORE/2.x.x

Den gitte prøvesponsen inneholder den installerte versjonen av AWS CLI (AWS-CLI/2.x.x), Python -versjonen (Python/3.x.x), og operativsystemet (Linux/4.x.X-XXX-STD). Den siste delen av svaret definerer Botocore Library -versjonen som AWS CLI kjører på (Botocore/2.x.x).

Du vil derfor ende opp med noe slikt:

Trinn 2: Lag en utførelsesrolle

Neste trinn er å skape en utførelsesrolle i AWS CLI. En utførelsesrolle er en AWS Identity and Access Management (IAM) rolle som en AWS -tjeneste påtar seg for å utføre oppgavene på dine vegne. Det gir deg tilgang til AWS -ressurser som du trenger underveis.

Du kan opprette en rolle ved hjelp av følgende kommando:

aws iam create-role \
--rollenavn lambdadynamodbexecutionrole \
--Anta-role-policy-Document File: // antar-role-policy.Json \
--Beskrivelse "awslambdadynamodbexecutionrole" \
--Servicenavn Lambda.Amazonaws.com

Den forrige kommandoen er en AWS CLI -kommando for å opprette en rolle. Du kan også bruke Amazon Management Console for å lage en rolle. Når du er på IAM -konsollen, må du åpne Roller side og klikk på Skape rolle knapp.

Fortsett med å oppgi følgende:

  • TRUSTED ENTITY: Lambda
  • Rollenavn: Lambda-Dynamodb-role
  • Tillatelser: AwslambdadynamodbexecutionRole

Du kan også bruke Python ved først å installere AWS SDK for Python:

PIP -install BOTO3

Trinn 3: Aktiver DynamoDB -strømmene på bordet ditt

Du må aktivere DynamoDB -strømningene på bordet ditt. For denne illustrasjonen bruker vi BOTO3, AWS SDK for Python. Følgende kommando vil hjelpe:

Importer BOTO3
# Koble til DynamoDB -tjenesten
dynamodb = boto3.klient ('dynamodb')
# Aktiver DynamoDB-strømmer på 'My-Table' -tabellen
Response = Dynamodb.update_table (
Tablename = 'mytable',
StreamSpecification =
'Streamenabled': True,
'StreamViewType': 'new_and_old_images'

)
# Kontroller responsen for å sikre at strømmen ble aktivert
Hvis svar ['Streamspesification'] ['StreamEnabled']:
Print ("DynamoDB Stream Aktivert vellykket")
ellers:
Print ("Feil som aktiverer DynamoDB Stream")

Denne koden muliggjør DynamoDB -strømmen på “Mytable” -tabellen som strømmer både de nye og gamle bildene av elementer så snart noen endringer skjer. Du kan velge å bare streame de nye bildene så snart StreamViewType til “New_Image”.

Å kjøre denne koden kan bare bare aktivere bekkene på bordene dine etter en stund. I stedet kan prosessen ta litt tid. Du kan bruke Beskrivelses_table -metoden for å sjekke statusen til strømmen.

Trinn 4: Lag lambda -funksjonen

Neste trinn er å lage en lambda -funksjon som utløser dynamoDB -strømmen. Følgende trinn skal hjelpe:

  • Åpne AWS Lambda -konsollen og klikk på fanen "Opprett funksjon". På siden "Opprett funksjon", velg "Forfatter fra bunnen av" og skriv inn et navn for din funksjon. Du må også legge inn kjøretiden din på dette tidspunktet. Vi valgte Python for denne illustrasjonen.
  • Under "Velg eller opprette en utførelsesrolle", velg "Opprett en ny rolle med Basic Lambda -tillatelser" for å lage en IAM -rolle med de nødvendige tillatelsene for Lambda -funksjonen din.
  • Klikk på "Opprett funksjon" -knappen for å opprette Lambda -funksjonen.
  • På siden "Konfigurasjon" for funksjonen din, bla ned til "Designer" -delen og klikk på "Legg til Trigger" -fanen.
  • I "Trigger Configuration" -boksen som vises, velger du "DynamoDB" fra rullegardinmenyen "Trigger".
  • Velg DynamoDB -tabellen du vil bruke for å utløse funksjonen. Når du er ferdig, velger du om du vil at funksjonen skal utløses på alle oppdateringer til tabellen eller bare på spesifikke oppdateringer (for eksempel oppdateringer til bestemte kolonner).
  • Klikk på "Legg til" -knappen for å opprette avtrekkeren.
  • I "Funksjonskode" -redigereren, skriv Python -koden for funksjonen din. Du kan bruke hendelsesobjektet som sendes til din funksjon for å få tilgang til dataene som utløser funksjonen.
  • Klikk på "Lagre" -knappen for å få lagret funksjonen.

Det er alt som skjer når du oppretter en lambda -funksjon! Funksjonen din utløses nå når det er oppdateringer av den spesifiserte DynamoDB -tabellen.

Her er et eksempel på en enkel Python -funksjon som DynamoDB -strømmen kan utløse:

def lambda_handler (hendelse, kontekst):
for post i arrangement ['poster']:
print (post ['dynamodb'] ['newImage'])

Denne funksjonen itererer gjennom postene i hendelsesobjektet og skriver ut det nye bildet av elementet i DynamoDB -tabellen som utløser funksjonen.

Trinn 5: Test lambda -funksjonen

For å teste en lambda -funksjon som en dynamoDB -strøm kan utløse, kan du bruke Boto3 bibliotek for å få tilgang til dynamoDB API og påkalle metode for Lambda klient for å utløse funksjonen.

Her er et eksempel på hvordan du gjør det:

Importer BOTO3
# Koble til DynamoDB -tjenesten
dynamodb = boto3.klient ('dynamodb')
# Koble til Lambda -tjenesten
lambda_client = boto3.klient ('lambda')
# Sett inn et element i tabellen 'My-Table'
Response = Dynamodb.put_item (
Tablename = 'mytable',
Element =
'id': 'n': '123',
'Navn': 's': 'Joel Austin,
'Age': 'n': '34'

)
# Kontroller svaret for å sikre at varen ble satt inn vellykket
Hvis svar ['responseMetadata'] ['httpStatusCode'] == 200:
trykk ("Vare satt inn vellykket")
ellers:
Skriv ut ("Feil å sette inn elementet")
# Utløser lambda-funksjonen som er abonnert på 'My-Table' -tabellen
Response = lambda_client.påkalle (
FunctionName = 'MyFunction',
InvocationType = 'Event',
Logype = 'hale',
Nyttelast = '"poster": ["dynamodb": "newImage": "id": "n": "123", "navn": "s": "Joel Austin", " Alder ": " n ":" 34 "] '
)
# Kontroller responsen for å sikre at funksjonen ble utløst vellykket
Hvis respons ['Statuscode'] == 202:
Print ("Lambda -funksjonen utløses vellykket")
ellers:
Print ("Feilutløser Lambda -funksjon")

Denne koden setter først inn et element i mytable bord og utløser deretter myfunksjon Lambda -funksjon ved å sende en prøvehendelselast til funksjonen ved hjelp av påkalle metode. Arrangementets nyttelast simulerer en DynamoDB Stream -hendelse som inkluderer det nye bildet av varen som nettopp ble satt inn.

Du kan deretter sjekke loggene på lambda -funksjonen for å se om den lykkes med å utløse og behandlet hendelsesdataene.

Konklusjon

Det er viktig å merke seg at du kan påkalle flere ganger for den samme strømoppføringen som en DynamoDB -strøm kan utløse en lambda -funksjon. Den viktigste grunnen bak dette er at strømopptakene til slutt er konsistente, og det er mulig å behandle den samme posten flere ganger med lambda -funksjonen. Det er avgjørende å designe Lambda -funksjonen din for å håndtere denne saken riktig.