1
votes

Quand dois-je utiliser un déclencheur DynamoDB pour appeler le Lambda avec un autre?

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?


0 commentaires

3 Réponses :


1
votes

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

  1. Ouvrez la page Fonctions de la console Lambda.

  2. Choisissez une fonction.

  3. Sous Designer, choisissez Ajouter un déclencheur.

  4. Choisissez un type de déclencheur.

  5. 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

  • File d'attente SQS - La file d'attente Amazon SQS à partir de laquelle lire les enregistrements.
  • Taille du lot - Le nombre d'éléments à lire dans la file d'attente dans chaque lot, jusqu'à 10. L'événement peut contenir moins d'éléments si le lot lu par Lambda dans la file d'attente contient moins d'éléments.
  • / li>
  • Activé - Désactivez la source de l'événement pour arrêter le traitement des éléments.

2 commentaires

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.



0
votes
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.

0 commentaires

3
votes

DynamoDB Stream semble être la meilleure pratique car:

  • vous déléguez la responsabilité d'appeler la fonction de post-processeur depuis votre writer-Lambda. Rend l'écrivain plus simple (c'est-à-dire plus rapide),
  • vous simplifiez la connexion de nouveaux rédacteurs externes à la même table, sinon vous devez implémenter la logique pour appeler des post-processeurs dans chacun d'eux également,
  • vous garantissez que toutes les données sont post-traitées (même si quelqu'un a ajouté un nouvel élément dans l'interface Web de DynamoDB. :)
  • en termes d'argent, le temps d'exécution que vous passerez pour envoyer l'opération invoke () à partir de l'écrivain Lambda couvrira probablement les coûts d'un flux.
  • à moins que vous n'utilisiez des transactions DynamoDB, vos données ne seront peut-être pas encore disponibles pour le post-processeur si vous l'appelez trop tôt depuis le rédacteur. Si votre logique métier n'a pas besoin de transactions, les utiliser uniquement pour couvrir ce problème = temps / coût supplémentaire.

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.


2 commentaires

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.