aws lambda-Funktion auslösen mehrere Male für ein einzelnes Ereignis
Ich bin mit aws lambda-Funktion zum konvertieren von wav-Datei hochgeladen in einen Eimer mp3-format und später verschieben Sie die Datei an einen anderen Eimer. Ist es korrekt funktioniert. Aber es gibt ein problem mit das auslösen. Wenn ich hochladen kleine wav-Dateien,die lambda-Funktion wird einmal aufgerufen. Aber wenn ich das hochladen einer großen wav-Datei, diese Funktion wird mehrfach ausgelöst.
Ich habe dieses Problem gegoogelt und gefunden, dass es ist zustandslos, es wird also nicht mehrfach aufgerufen werden(nicht sicher, ob dieser trigger ist für mehrere hochladen oder einen gleichen upload).
https://aws.amazon.com/lambda/faqs/
Gibt es eine Methode, um diese Funktion aufrufen, einmal für einen einzigen upload?
- "nicht sicher, dass dieser trigger ist für mehrere hochladen oder der gleichen hochladen" ... nicht es scheinen mag, der sollte die erste Sache, die Sie arbeiten sollten, in Richtung herauszufinden? Staatenlosigkeit hat das nichts zu tun. Untersuchen Sie die eigentliche Veranstaltung Inhalte, erstellen Sie ein Protokoll von dem, was Sie erhalten in der S3-event und bewahren Sie Sie für die überprüfung, und die Erklärung sollte deutlich werden kann. Wahrscheinlich, Verhalten, egal was Sie verwenden, um ursprünglich hochladen, das Objekt ist mehr zu tun S3-Operationen, als Sie denken.
- Sie erweitern müssen, diese Frage mit mehr Informationen. Idealerweise ein code-Beispiel.
- Klingt wie der upload ist zerbrochen, in Teile. Sie wollen eine Veranstaltung erstellen angeben, dass das Ereignis nur ausgeführt
s3:ObjectCreated:CompleteMultiPartUpload
, dieses tutorial zeigt, wie Sie dies tun, ersetzen Sie einfachs3:ObjectCreated:*
mits3:ObjectCreated:CompleteMultiPartUpload
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze version:
Versuchen Sie Erhöhung der timeout-Einstellung in Ihrer lambda-Funktion Konfiguration.
Lange version:
Ich vermute, Sie laufen in der lambda-Funktion als Timeout hier.
S3 Ereignisse sind asynchrone Natur und lambda-Funktion hören, S3 Ereignisse wird wiederholt, mindestens 3 mal, bevor das Ereignis verworfen. Sie erwähnt Ihre lambda-Funktion nur einmal ausgeführt wird (ohne Fehler) bei kleinerer Größe hochladen, auf dem Sie die Konvertierung und re-upload. Gibt es eine Möglichkeit, dass die benötigte Zeit für die Konvertierung und re-upload von Ihrem code größer ist als die timeout-Einstellung Ihrer lambda-Funktion.
Daher möchten Sie vielleicht versuchen, die Erhöhung der timeout-Einstellung in Ihrer lambda-Funktion Konfiguration.
Durch die Art und Weise, einen Weg, um zu bestätigen, dass Ihre lambda-Funktion mehrmals aufgerufen wird, ist der Blick in cloudwatch-Protokolle für die Ereignis-id (67fe6073-e19c-11e5-1111-6bqw43hkbea3) auftreten -
Diese Ereignis-id repräsentiert eine bestimmte Veranstaltung, für die lambda wurde aufgerufen und sollte für alle gleich lambda Hinrichtungen, die verantwortlich sind für die gleichen S3-event.
Außerdem können Sie sich für die Ausführung, Zeit (Dauer) in den folgenden log-Linie, die Sie markiert Ende einer lambda-Ausführung -
Wenn nicht eine Lösung, es wird zumindest geben Ihnen einige Zimmer zum Debuggen in die richtige Richtung. Lassen Sie mich wissen, wie es geht.
Den
context
- Objekt enthält Informationen über die request-ID, die Sie derzeit den Umgang. Diese ID nicht ändern, auch wenn das gleiche Ereignis feuert mehrere Male. Speichern Sie diese ID für jedes mal, wenn ein Ereignis auslöst, und überprüfen Sie dann, dass die Letzte ID, die Sie behandelt, ist nicht das gleiche wie das aktuelle.Hier mein letzter code um dieses Problem zu beheben (NodeJS mit MongooseJS Datenbank-handler):
Hoffe, das hilft!
Jedem Fall Ausführen Lambda mehrmals durch retry-Verhalten von Lambda als angegeben in AWS-Dokument.
Dein code könnte das auslösen einer exception, time-out oder run out of memory. Die Laufzeit-Ausführung des Codes kann ein Fehler auftreten und zu stoppen. Sie könnten die Parallelität und gedrosselt werden.
Könnte es einige Fehler in der Lambda-was macht der client oder service-Aufruf der Lambda Funktion zu wiederholen.
Verwendung von CloudWatch logs um den Fehler zu finden und beheben Sie das problem lösen konnte.
Ich auch vor dem gleichen problem, in meinem Fall ist es wegen der Anwendung Fehler beheben, es hat mir geholfen.