Aktualizacja tabeli DynamoDB za pomocą Lambda
Próbowałem zaimplementować funkcję Lambda opartą na wyzwalaczu MODIFYzdarzenia w tabeli DynamoDB. Ten wyzwalacz miał zostać użyty do dalszej modyfikacji tabeli na podstawie obliczeń wykonanych na nowych wpisach. Ale ponieważ byłoby to również zdarzenie „MODIFY”, wyzwoliłoby to ponownie lambdę, co mogłoby zapoczątkować nieskończone wyzwalacze funkcji lambda.
Jak zapobiec nieskończonemu wyzwalaniu lambdy?
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;
};
Tutaj kod, którego używam w lambdzie, który jest wyzwalany przez zdarzenie dynamodb
Odpowiedzi
Prostym rozwiązaniem jest wskazanie Lambda, kiedy nie należy już zmieniać rekordu
To rozwiązanie jest zależne od twojego rzeczywistego przypadku użycia i jeśli możesz zapisać pewien warunek, że bieżący rekord nie powinien być już przetwarzany
Czasami może to być prosta właściwość, taka jak
- Przetworzone = prawda
- LastProcessTime = 1602232746
zapisane bezpośrednio w rekordzie
Sprawdź również inne dyskusje na ten temat
https://www.reddit.com/r/aws/comments/7cvqsy/is_it_an_antipattern_to_write_to_dynamodb_from_a/
Strumienie DynamoDB - zapisuj dane z powrotem do tabeli