Flux DynamoDB avec Lambda

Flux Dynamodb Avec Lambda



DynamoDB Streams est une fonctionnalité d'Amazon DynamoDB qui vous permet d'obtenir un flux en temps réel de modifications ou de modifications de données apportées à vos tables DynamoDB. Vous pouvez utiliser cette fonctionnalité pour créer les applications qui réagissent aux modifications de données dans les tables DynamoDB, telles que la mise à jour des caches et l'envoi de notifications.

Bien entendu, vous pouvez également utiliser les flux DynamoDB pour déclencher les processus en aval et les fonctions AWS Lambda. Lambda, par définition, est un service de calcul sans serveur qui exécute votre code en réponse à des événements et gère automatiquement les ressources de calcul pour vous.

Vous pouvez utiliser Lambda pour écrire le code dans Node.js, Python, Java ou C# afin de traiter les enregistrements de flux et de prendre les mesures appropriées. Le principal avantage de l'intégration des flux DynamoDB à Lambda est que Lambda vous permet d'exécuter les services sauvegardés ou les codes d'application sans avoir besoin d'administration.







Comment utiliser les flux AWS DynamoDB avec Lambda

Bien qu'il soit possible de créer une fonction Lambda qui utilise les événements et les occurrences d'un flux DynamoDB, le processus peut être assez complexe, en particulier lors de votre première tentative. Les étapes suivantes vous aideront :



Étape 1 : Assurez-vous que votre système répond aux prérequis

Cette procédure ne réussira que si vous connaissez les opérations et les processus Lambda de base. Ainsi, cela devrait être votre premier pour vous assurer que votre compréhension de Lambda est supérieure à la moyenne.



La deuxième condition préalable qui mérite d'être prise en compte est la confirmation de la version AWS de votre système. Vous pouvez utiliser la commande suivante :





aws-version

Le résultat de la commande fournie devrait ressembler à ceci :

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

L'exemple de réponse donné contient la version installée de l'AWS CLI ( aws-cli/2.x.x ), la version Python ( Python/3.x.x ) et le système d'exploitation ( Linux/4.x.x-xxx-std ). La dernière partie de la réponse définit la version de la bibliothèque Botocore sur laquelle votre AWS CLI s'exécute ( botocore/2.x.x ).



Vous vous retrouverez donc avec quelque chose comme ceci :

Étape 2 : Créer un rôle d'exécution

L'étape suivante consiste à créer un rôle d'exécution dans l'AWS CLI. Un rôle d'exécution est un rôle AWS Identity and Access Management (IAM) assumé par un service AWS pour effectuer les tâches en votre nom. Il vous donne accès aux ressources AWS dont vous aurez besoin en cours de route.

Vous pouvez créer un rôle à l'aide de la commande suivante :

aws iam créer-rôle \

--role-name LambdaDynamoDBExecutionRole \

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

--la description ' AWSLambdaDynamoDBExecutionRole' \

--service-name lambda.amazonaws.com

La commande précédente est une commande AWS CLI pour créer un rôle. Vous pouvez également utiliser Amazon Management Console pour créer un rôle. Une fois que vous êtes sur la console IAM, ouvrez le Rôles et cliquez sur le Créer un rôle bouton.

Continuez à entrer ce qui suit :

  • Entité de confiance : Lambda
  • Nom du rôle : lambda-dynamodb-role
  • Autorisations : AWSLambdaDynamoDBExecutionRole

Vous pouvez également utiliser Python en installant d'abord le kit AWS SDK pour Python :

pip installer boto3

Étape 3 : Activer les flux DynamoDB sur votre table

Vous devez activer les flux DynamoDB sur votre table. Pour cette illustration, nous utilisons le Boto3, AWS SDK for Python. La commande suivante vous aidera :

importer boto3

# Connectez-vous au service DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Activer les flux DynamoDB sur la table 'my-table'
réponse = dynamodb.update_table(
NomTable= 'ma table' ,
StreamSpécification={
'StreamEnabled' : Vrai,
'StreamViewType' : 'NEW_AND_OLD_IMAGES'
}
)

# Vérifiez la réponse pour vous assurer que le flux a été activé avec succès
si réponse[ 'Spécification de flux' ][ 'StreamEnabled' ] :
imprimer( 'Flux DynamoDB activé avec succès' )
autre:
imprimer( 'Erreur lors de l'activation du flux DynamoDB' )

Ce code active le flux DynamoDB sur la table « mytable » qui diffuse à la fois les nouvelles et les anciennes images des éléments dès que des modifications se produisent. Vous pouvez choisir de diffuser uniquement les nouvelles images dès que le StreamViewType sur 'NEW_IMAGE'.

Notamment, l'exécution de ce code ne peut activer les flux sur vos tables qu'après un certain temps. Au lieu de cela, le processus peut prendre un certain temps. Vous pouvez utiliser la méthode describe_table pour vérifier l'état du flux.

Étape 4 : créer la fonction Lambda

L'étape suivante consiste à créer une fonction Lambda qui déclenche le flux DynamoDB. Les étapes suivantes devraient vous aider :

  • Ouvrez la console AWS Lambda et cliquez sur l'onglet « Créer une fonction ». Sur la page 'Créer une fonction', choisissez 'Auteur à partir de zéro' et entrez un nom pour votre fonction. Vous devez également entrer votre temps d'exécution à ce stade. Nous avons sélectionné Python pour cette illustration.
  • Sous « Choisir ou créer un rôle d'exécution », sélectionnez « Créer un nouveau rôle avec des autorisations Lambda de base » pour créer un rôle IAM avec les autorisations nécessaires pour votre fonction Lambda.
  • Cliquez sur le bouton 'Créer une fonction' pour créer votre fonction Lambda.
  • Sur la page 'Configuration' de votre fonction, faites défiler jusqu'à la section 'Concepteur' et cliquez sur l'onglet 'Ajouter un déclencheur'.
  • Dans la boîte « Configuration du déclencheur » qui s'affiche, sélectionnez « DynamoDB » dans le menu déroulant « Déclencheur ».
  • Sélectionnez la table DynamoDB que vous souhaitez utiliser pour déclencher la fonction. Une fois cela fait, choisissez si vous voulez que la fonction soit déclenchée sur toutes les mises à jour de la table ou uniquement sur des mises à jour spécifiques (telles que les mises à jour de colonnes particulières).
  • Cliquez sur le bouton 'Ajouter' pour créer le déclencheur.
  • Dans l'éditeur 'Code de fonction', écrivez le code Python de votre fonction. Vous pouvez utiliser l'objet événement qui est passé à votre fonction pour accéder aux données qui déclenchent la fonction.
  • Cliquez sur le bouton 'Enregistrer' pour enregistrer la fonction.

C'est tout ce qui se passe lors de la création d'une fonction Lambda ! Votre fonction est désormais déclenchée chaque fois que des mises à jour sont apportées à la table DynamoDB spécifiée.

Voici un exemple de fonction Python simple que le flux DynamoDB peut déclencher :

def lambda_handler(event, context):

pour l'enregistrement dans l'événement[ 'Enregistrements' ] :

imprimer(enregistrer[ 'dynamodb' ][ 'Nouvelle image' ])

Cette fonction parcourt les enregistrements de l'objet d'événement et imprime la nouvelle image de l'élément dans la table DynamoDB qui déclenche la fonction.

Étape 5 : Tester la fonction Lambda

Pour tester une fonction Lambda qu'un flux DynamoDB peut déclencher, vous pouvez utiliser le boto3 bibliothèque pour accéder à l'API DynamoDB et à la invoquer méthode de la Lambda client pour déclencher la fonction.

Voici un exemple sur la façon de le faire :

importer boto3

# Connectez-vous au service DynamoDB
dynamodb = boto3.client( 'dynamodb' )

# Connectez-vous au service Lambda
lambda_client = boto3.client( 'lambda' )

# Insérer un élément dans la table 'my-table'
réponse = dynamodb.put_item(
NomTable= 'ma table' ,
Article={
'identifiant' :{ 'N' : '123' },
'Nom' :{ 'S' : 'Joel Austin},
'
âge ':{' N ':' 3. 4 '}
}
)

# Vérifiez la réponse pour vous assurer que l'élément a été inséré avec succès
si réponse['
Métadonnées de réponse '][' HTTPStatusCode '] == 200 :
print('Élément inséré avec succès')
autre:
print('Erreur lors de l'insertion de l'élément')

# Déclencher la fonction Lambda qui est abonnée au '
ma table ' tableau
réponse = lambda_client.invoke(
NomFonction='
mafonction ',
TypeInvocation='
Événement ',
LogType='
Queue ',
Charge utile='
{ 'Enregistrements' :[{ 'dynamodb' :{ 'Nouvelle image' :{ 'identifiant' :{ 'N' : '123' }, 'Nom' :{ 'S' : 'Joël Austin' }, 'âge' :{ 'N' : '3. 4' }}}}]} '
)

# Vérifiez la réponse pour vous assurer que la fonction a été déclenchée avec succès
si réponse['
Code d'état '] == 202 :
print('Fonction Lambda déclenchée avec succès')
autre:
print('Erreur lors du déclenchement de la fonction Lambda')

Ce code insère d'abord un élément dans le ma table table, puis déclenche le mafonction fonction Lambda en envoyant un exemple de charge utile d'événement à la fonction à l'aide de la invoquer méthode. La charge utile de l'événement simule un événement de flux DynamoDB qui inclut la nouvelle image de l'élément qui vient d'être inséré.

Vous pouvez ensuite consulter les journaux de la fonction Lambda pour voir si elle a correctement déclenché et traité les données d'événement.

Conclusion

Il est essentiel de noter que vous pouvez appeler plusieurs fois pour le même enregistrement de flux qu'un flux DynamoDB peut déclencher une fonction Lambda. La principale raison derrière cela est que les enregistrements de flux sont cohérents à terme et qu'il est possible de traiter le même enregistrement plusieurs fois par la fonction Lambda. Il est crucial de concevoir votre fonction Lambda pour gérer ce cas correctement.