DynamoDB streamuje pomocí Lambda

Dynamodb Streamuje Pomoci Lambda



DynamoDB Streams je funkce v Amazon DynamoDB, která vám umožňuje získat proud změn nebo změn dat provedených v tabulkách DynamoDB v reálném čase. Tuto funkci můžete použít k sestavení aplikací, které reagují na změny dat v tabulkách DynamoDB, jako je aktualizace mezipaměti a odesílání upozornění.

Samozřejmě můžete také použít DynamoDB Streams ke spouštění následných procesů a funkcí AWS Lambda. Lambda je podle definice bezserverová výpočetní služba, která spouští váš kód v reakci na události a automaticky spravuje výpočetní prostředky za vás.

Lambda můžete použít k zápisu kódu v Node.js, Pythonu, Javě nebo C# ke zpracování záznamů proudu a provedení příslušných akcí. Hlavní výhodou integrace DynamoDB Streams s Lambda je to, že Lambda umožňuje spouštět zálohované služby nebo kódy aplikací bez nutnosti administrace.







Jak používat AWS DynamoDB Streams s Lambda

I když je možné vytvořit funkci Lambda, která spotřebovává události a výskyty ze streamu DynamoDB, tento proces může být docela náročný, zejména při prvním pokusu. Pomohou vám následující kroky:



Krok 1: Ujistěte se, že váš systém splňuje požadavky

Tento postup bude úspěšný pouze tehdy, pokud budete znát základní operace a procesy Lambda. Toto by tedy mělo být vaším prvním, abyste zajistili, že vaše porozumění lambdě je nadprůměrné.



Druhým předpokladem, který stojí za zvážení, je potvrzení verze AWS vašeho systému. Můžete použít následující příkaz:





aws – verze

Výsledek zadaného příkazu by měl vypadat takto:

aws-cli/ 2 .x.x Python/ 3 .x.x Linux/ 4 .x.x-xxx-std botocore/ 2 .x.x

Daná vzorová odpověď obsahuje nainstalovanou verzi AWS CLI ( aws-cli/2.x.x ), verze Pythonu ( Python/3.x.x ) a operační systém ( Linux/4.x.x-xxx-std ). Poslední část odpovědi definuje verzi knihovny Botocore, na které běží vaše AWS CLI ( botocore/2.x.x ).



Skončíte tedy s něčím takovým:

Krok 2: Vytvořte prováděcí roli

Dalším krokem je vytvoření spouštěcí role v AWS CLI. Prováděcí role je role AWS Identity and Access Management (IAM), kterou převzala služba AWS, aby prováděla úkoly vaším jménem. Poskytuje vám přístup ke zdrojům AWS, které budete na cestě potřebovat.

Roli můžete vytvořit pomocí následujícího příkazu:

aws iam vytvořit-role \

--role-name LambdaDynamoDBEExecutionRole \

--assume-role-policy-document file://assume-role-policy.json \

--popis 'AWLambdaDynamoDBExecutionRole' \

--název služby lambda.amazonaws.com

Předchozí příkaz je příkaz AWS CLI k vytvoření role. K vytvoření role můžete také použít konzolu Amazon Management Console. Jakmile jste v konzole IAM, otevřete Role stránku a klikněte na Vytvořit roli knoflík.

Pokračujte zadáním následujícího:

  • Důvěryhodná entita: Lambda
  • Název role: lambda-dynamodb-role
  • Oprávnění: AWSLambdaDynamoDBExecutionRole

Python můžete použít také tak, že nejprve nainstalujete sadu AWS SDK pro Python:

pip install boto3

Krok 3: Povolte proudy DynamoDB na vašem stole

Musíte povolit proudy DynamoDB na vašem stole. Pro tuto ilustraci používáme Boto3, AWS SDK pro Python. Pomůže následující příkaz:

import boto3

# Připojte se ke službě DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Povolte streamy DynamoDB v tabulce 'my-table'
odpověď = dynamodb.update_table(
Název_tabulky= 'mytable' ,
Specifikace proudu={
'StreamEnabled' : Skutečný,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Zkontrolujte odpověď a ujistěte se, že stream byl úspěšně povolen
pokud odpověď[ 'StreamSpecification' ][ 'StreamEnabled' ]:
tisk( 'DynamoDB stream úspěšně aktivován' )
jiný:
tisk( 'Chyba při povolení streamu DynamoDB' )

Tento kód umožňuje streamování DynamoDB v tabulce „mytable“, která streamuje nové i staré obrázky položek, jakmile dojde k jakékoli změně. Můžete si vybrat, že chcete streamovat pouze nové obrázky, jakmile StreamViewType na „NEW_IMAGE“.

Je pozoruhodné, že spuštění tohoto kódu může povolit streamy na vašich stolech až po chvíli. Místo toho může proces nějakou dobu trvat. Ke kontrole stavu streamu můžete použít metodu description_table.

Krok 4: Vytvořte funkci Lambda

Dalším krokem je vytvoření funkce Lambda, která spouští stream DynamoDB. Pomoci by měly následující kroky:

  • Otevřete konzolu AWS Lambda a klikněte na kartu „Vytvořit funkci“. Na stránce „Vytvořit funkci“ vyberte „Autor od začátku“ a zadejte název funkce. V tomto okamžiku musíte také zadat své runtime. Pro tuto ilustraci jsme vybrali Python.
  • V části „Vyberte nebo vytvořte spouštěcí roli“ vyberte „Vytvořit novou roli se základními oprávněními Lambda“ a vytvořte roli IAM s nezbytnými oprávněními pro vaši funkci Lambda.
  • Kliknutím na tlačítko „Vytvořit funkci“ vytvoříte funkci Lambda.
  • Na stránce „Konfigurace“ pro vaši funkci přejděte dolů do části „Návrhář“ a klikněte na kartu „Přidat spouštěč“.
  • V okně „Konfigurace spouštění“, které se objeví, vyberte „DynamoDB“ z rozbalovací nabídky „Spouštěč“.
  • Vyberte tabulku DynamoDB, kterou chcete použít ke spuštění funkce. Po dokončení vyberte, zda chcete, aby se funkce spouštěla ​​při všech aktualizacích tabulky nebo pouze při konkrétních aktualizacích (jako jsou aktualizace konkrétních sloupců).
  • Kliknutím na tlačítko „Přidat“ vytvoříte spouštěč.
  • V editoru „Kód funkce“ napište kód Pythonu pro vaši funkci. Objekt události, který je předán vaší funkci, můžete použít k přístupu k datům, která funkci spouštějí.
  • Kliknutím na tlačítko „Uložit“ funkci uložíte.

To je vše, co se stane při vytváření funkce Lambda! Vaše funkce se nyní spustí vždy, když dojde k aktualizaci zadané tabulky DynamoDB.

Zde je příklad jednoduché funkce Pythonu, kterou může stream DynamoDB spustit:

def lambda_handler(událost, kontext):

pro záznam v události[ 'Evidence' ]:

tisknout(záznam[ 'dynamodb' ][ 'Nový vzhled' ])

Tato funkce prochází záznamy v objektu události a vytiskne nový obrázek položky v tabulce DynamoDB, která spouští funkci.

Krok 5: Otestujte funkci Lambda

Chcete-li otestovat funkci Lambda, kterou může stream DynamoDB spustit, můžete použít boto3 knihovny pro přístup k rozhraní API DynamoDB a vyvolat metoda lambda klienta ke spuštění funkce.

Zde je příklad, jak na to:

import boto3

# Připojte se ke službě DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Připojte se ke službě Lambda
lambda_client = boto3.client( 'lambda' )

# Vložte položku do tabulky 'my-table'
odezva = dynamodb.put_item(
Název_tabulky= 'mytable' ,
Položka={
'id' :{ 'N' : '123' },
'název' :{ 'S' : 'Joel Austin},
'
stáří ':{' N ':' 3. 4 '}
}
)

# Zkontrolujte odpověď a ujistěte se, že položka byla úspěšně vložena
pokud odpověď['
Metadata odpovědi '][' HTTPStatusCode '] == 200:
print('Položka byla úspěšně vložena')
jiný:
print('Chyba při vkládání položky')

# Spusťte funkci Lambda, která je přihlášena k odběru '
můj stůl ' stůl
odpověď = lambda_client.invoke(
Function,
InvocationType='
událost ',
LogType='
Ocas ',
Užitečné zatížení ='
{ 'Evidence' :[{ 'dynamodb' :{ 'Nový vzhled' :{ 'id' :{ 'N' : '123' }, 'název' :{ 'S' : 'Joel Austin' }, 'stáří' :{ 'N' : '3,4' }}}}]} '
)

# Zkontrolujte odezvu, abyste se ujistili, že funkce byla úspěšně spuštěna
pokud odpověď['
StatusCode '] == 202:
print('Funkce lambda úspěšně spuštěna')
jiný:
print('Chyba při spouštění funkce Lambda')

Tento kód nejprve vloží položku do mytable tabulku a poté spustí moje funkce Lambda funkci odesláním vzorové události události do funkce pomocí vyvolat metoda. Užitná část události simuluje událost streamu DynamoDB, která obsahuje nový obrázek položky, která byla právě vložena.

Poté můžete zkontrolovat protokoly funkce Lambda, abyste zjistili, zda úspěšně spustila a zpracovala data události.

Závěr

Je důležité si uvědomit, že pro stejný záznam streamu můžete vyvolat vícekrát, že stream DynamoDB může spustit funkci Lambda. Primárním důvodem je to, že záznamy streamu jsou nakonec konzistentní a je možné zpracovat stejný záznam vícekrát pomocí funkce Lambda. Je velmi důležité navrhnout funkci Lambda, abyste tento případ zvládli správně.