Was passiert, wenn ich die maximale Anzahl gleichzeitiger Lambda-Funktionen erreiche?

Was passiert, wenn ich die maximale Anzahl gleichzeitiger Lambda-Funktionen erreiche?

Ich habe 200 JSONL-Dateien (JSON-Zeilen) in einem S3-Bucket. Jede Datei enthält 100.000 JSONs, die in eine DynamoDB geschrieben werden sollen.

Ich möchte Lambda verwenden, um die Datei von S3 herunterzuladen und sie stapelweise in DynamoDB zu schreiben (die Dateien entsprechen bereits perfekt dem Tabellenschema).

Ich habe 200 Dateien, kann aber nicht 200 Lambdas gleichzeitig aufrufen – da DynamoDB auf nur 10.000 WCUs pro Sekunde beschränkt ist, kann ich nur 10.000 Zeilen pro Sekunde schreiben. Und Lambdas können nur 300 Sekunden dauern, bevor sie ablaufen.

Wie geht man dabei am besten vor?

Meine derzeitige Überlegung war, 5 Lambdas gleichzeitig asynchron aufzurufen und die Protokolldateien zu überwachen, um zu sehen, wie viele fertig sind, und das nächste erst aufzurufen, wenn eines fertig ist?

ODER...

Kann ich dieGleichzeitige Ausführungsgrenzeauf 5 für die Lambda-Funktion und dann die Funktion asynchron 200 Mal aufrufen (einmal für jede Datei)? Löst AWS automatisch das nächste Lambda aus, wenn das erste abgeschlossen ist?

Antwort1

Aus den Amazon-Dokumenten:

https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html

Durch das Festlegen eines Parallelitätslimits für eine Funktion garantiert Lambda, dass die Zuweisung speziell auf diese Funktion angewendet wird, unabhängig von der Menge des Datenverkehrs, der die verbleibenden Funktionen verarbeitet. Wenn dieses Limit überschritten wird, wird die Funktion gedrosselt. Wie sich diese Funktion bei Drosselung verhält, hängt von der Ereignisquelle ab. Weitere Informationen finden Sie unter Drosselungsverhalten.

Dann aus AWS-Dokumenten zum Thema Drosselungsverhalten: https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html#throttling-behavior

Wenn das mit einer Funktion verbundene Parallelitätslimit erreicht wird, werden alle weiteren Aufrufanforderungen an diese Funktion gedrosselt, d. h. der Aufruf führt Ihre Funktion nicht aus. Jeder gedrosselte Aufruf erhöht die Amazon CloudWatch-Throttles-Metrik für die Funktion. AWS Lambda behandelt gedrosselte Aufrufanforderungen je nach Quelle unterschiedlich:

Synchroner Aufruf: Wenn die Funktion synchron aufgerufen und gedrosselt wird, gibt Lambda einen 429-Fehler zurück und der aufrufende Dienst ist für Wiederholungsversuche verantwortlich. Der Fehlercode ThrottledReason erklärt, ob Sie auf eine Drosselung auf Funktionsebene (falls angegeben) oder auf Kontoebene (siehe Hinweis unten) gestoßen sind. Jeder Dienst kann seine eigene Wiederholungsrichtlinie haben. Beispielsweise wiederholt CloudWatch Logs den fehlgeschlagenen Batch bis zu fünf Mal mit Verzögerungen zwischen den Wiederholungsversuchen. Eine Liste der Ereignisquellen und ihrer Aufruftypen finden Sie unter Unterstützte Ereignisquellen.

Asynchroner Aufruf: Wenn Ihre Lambda-Funktion asynchron aufgerufen und gedrosselt wird, wiederholt AWS Lambda das gedrosselte Ereignis automatisch bis zu sechs Stunden lang, mit Verzögerungen zwischen den Wiederholungsversuchen. Denken Sie daran, dass asynchrone Ereignisse in die Warteschlange gestellt werden, bevor sie zum Aufrufen der Lambda-Funktion verwendet werden.

Wenn Sie also ein Gleichzeitigkeitslimit festlegen (standardmäßig 1000 für alle Ihre Funktionen), gibt AWS Ihnen entweder den Statuscode 429 (für Anforderung/Antwort) oder stellt Ihre Funktion automatisch in die Warteschlange und versucht sie bis zu 6 Stunden lang erneut.

Es wird jedoch nicht angegeben, wie die Verzögerungsfunktion zwischen den Wiederholungsversuchen funktioniert.

verwandte Informationen