2017-12-06 2 views
0

Ich habe ein Lambda, das ausgeführt wird, wenn ein Objekt in S3 erstellt wird, in einigen Fällen muss ich dieses Lambda neu planen, etwa 15 Minuten später.AWS Wie kann ein S3-Lambda-Ereignis neu geplant werden?

Wenn mein Lambda zum zweiten Mal ausgeführt wird, muss ich das gleiche Ereignisargument haben, ich kümmere mich nicht um andere Felder als der Eimer und Pfad. event.Records[0].s3.bucket.nameevent.Records[0].s3.object.key. Aber es ist einfach, dasselbe zu haben event

Meine Alternative ist, diese Daten in Dynamo zu speichern und ein anderes Lambda zu haben, das von dort jede 15 Minuten liest (schrecklich).

Aber es wird netter sein, meine aktuelle Funktion einfach neu zu planen und dieselben Argumente zu übergeben. Etwas wie folgt aus:

exports.handler = (event, context, callback) => { 
    if(xyz) 
     reschedule(15 * 1000 * 60, 'ThisLambdaName', event, context); 
} 

So etwas wie SetTimeout aber ohne AWS mich für diese 15 Minuten Lade lol.

Antwort

4

Sie können DynamoDB mit TTL, DynamoDB Streams und AWS Lambda dafür verwenden.

Speichern Sie die Daten in DynamoDB und setzen Sie die TTL auf 15 Minuten nach.

Wenn die TTL für ein Element erreicht ist, wird ein DynamoDB-Stream erstellt, mit dem Sie die ursprüngliche Funktion erneut mit den Originaldaten auslösen können. Sie müssen höchstwahrscheinlich einige Änderungen in Ihrem Handler vornehmen, um Ereignisse aus S3- und DynamoDB-Streams unterschiedlich zu behandeln.

Referenzen:

+0

Vielen Dank für Ihre Antwort, ich war Hopping eine Alternative gibt es Dynamo zu verwenden oder die Daten von mir zu sparen und tun es gerade weiter nach vorne, aber scheint keinen Weg. –

+0

Es gibt. Aber Sie müssen es aktiv überprüfen (z. B. alle 15 Minuten), wie Sie erwähnt haben. – dashmug

Verwandte Themen