Aktualisieren der DynamoDB-Tabelle mit einem Lambda

Oct 09 2020

Ich habe versucht, eine Lambda-Funktion zu implementieren, die als Auslöser für ein MODIFYEreignis in einer DynamoDB-Tabelle basiert . Dieser Trigger sollte verwendet werden, um die Tabelle basierend auf Berechnungen, die für die neuen Einträge durchgeführt wurden, weiter zu ändern. Da dies jedoch auch ein 'MODIFY'-Ereignis wäre, würde es das Lambda erneut auslösen, was zu unendlichen Auslösern von Lambda-Funktionen führen könnte.

Wie kann verhindert werden, dass das Lambda unendlich ausgelöst wird?

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;
};

Hier der Code, den ich in Lambda verwende, der durch ein Dynamodb-Ereignis ausgelöst wird

Antworten

1 qkhanhpro Oct 09 2020 at 15:40

Eine einfache Lösung besteht darin, Lambda zu kennzeichnen, wenn der Datensatz nicht mehr geändert werden soll

Diese Lösung hängt von Ihrem tatsächlichen Anwendungsfall ab und davon, ob Sie eine bestimmte Bedingung speichern können, dass der aktuelle Datensatz nicht mehr verarbeitet werden soll

Manchmal kann es eine einfache Eigenschaft sein, wie z

  • Verarbeitet = wahr
  • LastProcessTime = 1602232746

direkt in den Datensatz gespeichert

Schauen Sie sich auch andere Diskussionen dazu an

https://www.reddit.com/r/aws/comments/7cvqsy/is_it_an_antipattern_to_write_to_dynamodb_from_a/

DynamoDB-Streams - Schreiben Sie Daten zurück in die Tabelle