J'ai actuellement une fonction AWS Lambda qui met à jour une table DynamoDB et j'ai besoin d'une autre fonction Lambda qui doit s'exécuter après la mise à jour des données. Y a-t-il un avantage à utiliser un déclencheur DynamoDB dans ce cas au lieu d'appeler le deuxième Lambda à l'aide du premier?
Il semble que l'invocation par programmation me donnerait plus de contrôle sur le moment où le Lambda est appelé (c'est-à-dire que je pourrais attendre que plusieurs mises à jour se produisent avant d'appeler), et la lecture à partir d'un flux DynamoDB coûte de l'argent tout en invoquant simplement Lambda ne .
Alors, y a-t-il un avantage à utiliser un déclencheur ici? Ou est-ce que je ferais mieux d'invoquer moi-même la Lambda?
3 Réponses :
Une fois les données mises à jour, vous pouvez publier un message SQS, puis ajouter un déclencheur pour configurer une autre fonction à lire depuis Amazon SQS dans la console Lambda, créer un déclencheur SQS.
Pour créer un déclencheur
Ouvrez la page Fonctions de la console Lambda.
Choisissez une fonction.
Sous Designer, choisissez Ajouter un déclencheur.
Choisissez un type de déclencheur.
Configurez les options requises, puis choisissez Ajouter.
Lambda prend en charge les options suivantes pour les sources d'événements Amazon SQS.
Options de source d'événement
Merci pour cette réponse! Cependant, si j'appelle simplement un Lambda à partir d'un Lambda, quel est le cas d'utilisation de la file d'attente SQS?
Vous pouvez publier un message SQS à partir du code de fonction Lamba à l'aide de NodeJS ou Python. J'ai posté l'exemple de code. S'il vous plaît ma autre réponse ci-dessous.
var QUEUE_URL = 'https://sqs.us-east-1.amazonaws.com/{AWS_ACCUOUNT_}/matsuoy-lambda'; var AWS = require('aws-sdk'); var sqs = new AWS.SQS({region : 'us-east-1'}); exports.handler = function(event, context) { var params = { MessageBody: JSON.stringify(event), QueueUrl: QUEUE_URL }; sqs.sendMessage(params, function(err,data){ if(err) { console.log('error:',"Fail Send Message" + err); context.done('error', "ERROR Put SQS"); // ERROR with message }else{ console.log('data:',data.MessageId); context.done(null,''); // SUCCESS } }); } Please don't forget add a trigger from another function to this SQS topic. That function will receive the SQS message automatic to handle.
DynamoDB Stream semble être la meilleure pratique car:
P.S. Vous pouvez bien sûr effectuer des lots à partir du flux DynamoDB hors de la boîte avec un réglage simple. Vous n'êtes pas obligé d'appeler le post-processeur pour chaque opération d'écriture.
Ceci est un excellent résumé des avantages de DynamoDB Streams, merci beaucoup! Lorsque vous dites que je ne suis pas obligé d'appeler le post-processeur, dites-vous que je peux empêcher le Lambda d'être appelé dans certaines circonstances, ou simplement que le Lambda peut décider de se terminer si certaines circonstances ne sont pas remplies?
Je n'ai pas dit que vous n'étiez «pas obligé», j'ai dit que vous «déléguiez» cela au service géré AWS. Le flux recevra toutes les opérations se produisant sur vos éléments de table DynamoDB. Et ils iront tous (un par un ou par lots) à votre Lambda abonné (post-processeur). Si vous devez en exclure certains, vous devez implémenter la logique dans le post-processeur lui-même.