Mise à jour de la table DynamoDB à l'aide d'un Lambda
J'essayais d'implémenter une fonction Lambda basée sur comme déclencheur d'un MODIFYévénement sur une table DynamoDB. Ce déclencheur devait être utilisé pour modifier davantage le tableau en fonction des calculs effectués sur les nouvelles entrées. Mais comme ce serait également un événement 'MODIFY', cela déclencherait à nouveau le lambda, ce qui pourrait démarrer des déclencheurs infinis de fonctions lambda.
Comment empêcher le lambda de se déclencher indéfiniment?
var AWS = require('aws-sdk');
// extra
const docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event , context , callback) => {
// TODO implement
event.Records.forEach((record) => {
console.log('Stream record: ', JSON.stringify(record, null, 2));
// logic to find insert type / modify type
if(record.eventName == 'MODIFY'){
// extract student id, and marks from event itself (save I/O)
console.log("Printing new image values",JSON.stringify(record.dynamodb.NewImage,null,2));
// modify the same record once new value is calculated
//############# method to modify /update dynamo db #################
//############# end code ###############
}
});
console.log(event);
const response = {
statusCode: 200,
body: JSON.stringify(event),
};
return response;
};
Voici le code que j'utilise dans lambda qui est déclenché par un événement dynamodb
Réponses
Une solution simple est de signifier Lambda quand il ne faut plus modifier l'enregistrement
Cette solution dépend de votre cas d'utilisation réel et de la possibilité de sauvegarder une certaine condition selon laquelle l'enregistrement actuel ne doit plus être traité
Parfois, il peut s'agir d'une propriété simple telle que
- Traité = vrai
- LastProcessTime = 1602232746
enregistré directement dans le dossier
Consultez également d'autres discussions à ce sujet
https://www.reddit.com/r/aws/comments/7cvqsy/is_it_an_antipattern_to_write_to_dynamodb_from_a/
Flux DynamoDB - réécriture des données dans la table