Aktualizacja tabeli DynamoDB za pomocą Lambda

Oct 09 2020

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

1 qkhanhpro Oct 09 2020 at 15:40

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