Warum wurde die AWS Lambda-Funktion für ein einzelnes Ereignis mehrfach aufgerufen?

8

Ich versuche, AWS Lambda-Funktion zu erstellen, die folgenden Prozess ausführt.

  • Erhalte S3 "Put" -Ereignis
  • Erhalte DateiA von S3
  • Erhalte DateiB von S3, die Lambda
  • aufgerufen hat
  • Starten Sie nur eine EC2-Instanz
  • Erstellen Sie Tags für die neue EC2-Instanz

Problem: Mehrere (5) Instanzen werden unerwartet gestartet.

Eine Instanz wurde erfolgreich erstellt, aber 4 andere Instanzen werden ebenfalls gestartet. Es werden insgesamt 5 Instanzen gestartet.

Protokolle

In den Log Streams für diese Funktion habe ich 4 Streams für diesen Aufruf gefunden. Jeder Stream zeigt keine Fehler oder Ausnahmen an, aber es scheint, dass die Funktion wiederholt ausgeführt wird.

Testversion

Ich vermutete, dass die Funktion abgelaufen ist und dann erneut ausgeführt wird.

Dann änderte ich Timeout von 5s auf 60s und legte eine Datei auf S3. Es hat irgendwie bewirkt. Es sind nur 2 Log Streams erschienen, der erste zeigt, dass die Funktion nur einmal ausgeführt wurde, der zweite zeigt an, dass die Funktion zweimal ausgeführt wurde. Anzahl der gestarteten Instanzen ist 3.

Ich habe jedoch keine Ahnung, warum mehrere (3) Instanzen gestartet werden.

Irgendwelche Kommentare sind willkommen! Vielen Dank im Voraus: -)

Meine Lambda-Funktion

Meine Lambda-Funktion folgt. (Es vereinfacht das Verstecken von Anmeldeinformationen, aber es verliert nicht seine grundlegende Struktur)

%Vor%     
ai0307 13.08.2015, 08:02
quelle

2 Antworten

12

Gelöst.

Das Hinzufügen von context.succeed(message); zum letzten Teil des verschachtelten Callbacks verhindert die wiederholte Ausführung der Funktion.

%Vor%     
ai0307 13.08.2015 08:41
quelle
1

Ich hatte das gleiche Problem mit der neueren Laufzeit (Node.JS v4.3). Rufen Sie

auf %Vor%

vor dem Aufruf

%Vor%     
Justin Stander 10.11.2016 22:15
quelle