Ein Ansatz, das 25k Geschichte Ereignis zu vermeiden limit besteht darin, einen Auswahlstatus in der Schleife hinzuzufügen, der einen Zähler oder einen booleschen Wert annimmt und entscheidet, die Schleife zu beenden.
Außerhalb der Schleife können Sie eine Lambda-Funktion setzen, die eine andere Ausführung startet (mit einer anderen ID). Danach wird Ihre aktuelle Ausführung normal beendet und eine andere Ausführung wird die Arbeit fortsetzen.
Bitte beachten Sie, dass der "LoopProcessor" im folgenden Beispiel eine Variable "$ .breakOutOfLoop" zurückgeben muss, um die Schleife zu verlassen, die auch irgendwo in Ihrer Schleife ermittelt und durchlaufen werden muss.
Je nach Anwendungsfall müssen Sie möglicherweise die Daten, die Sie weitergeben, neu strukturieren. Wenn Sie beispielsweise viele Daten verarbeiten, sollten Sie möglicherweise S3-Objekte in Erwägung ziehen und den ARN als Eingabe/Ausgabe über die Ausführung der Statusmaschine übergeben. Wenn Sie versuchen, eine einfache Schleife zu erstellen, wäre ein einfacher Weg, einen Start-Offset hinzuzufügen (man denke an einen globalen Zähler), der als Eingabe an die Ausführung übergeben wird, und jeder LoopProcessor-Task erhöht einen Zähler (mit dem Start) Offset als Anfangswert). Dies ist vergleichbar mit Paginierungslösungen.
Hier ist ein einfaches Beispiel der ASL Struktur der 25k Geschichte Ereignis Grenze zu vermeiden:
{
"Comment": "An example looping while avoiding the 25k event history limit.",
"StartAt": "FirstState",
"States": {
"FirstState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Next": "ChoiceState"
},
"ChoiceState": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.breakOutOfLoop",
"BooleanEquals": true,
"Next": "StartNewExecution"
}
],
"Default": "LoopProcessor"
},
"LoopProcessor": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:ProcessWork",
"Next": "ChoiceState"
},
"StartNewExecution": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:StartNewLooperExecution",
"Next": "FinalState"
},
"FinalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}
hoffe, das hilft!
könnte dies in die Endlosschleife geraten ... – Neil