2017-07-03 3 views
4

I Schritt Funktionen für eine große Schleife zu verwenden, bisher kein Problem, aber der Tag, wenn meine Schleife 8000 Hinrichtung überschritt ich über den Fehler kam „Maximale Ausführungshistorie Größe“, die 25000.AWS Schritt Funktionen Geschichte Ereignis Einschränkung

ist

Gibt es eine Lösung, die Geschichtsereignisse nicht zu haben?

Ansonsten, wo ich einfach meinen Schritt Funktionen migrieren kann (3 Lambda), weil aws Charge wird mir Rewrite eine Menge Code fragen ..

Vielen Dank

Antwort

2

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 
    } 
    } 
} 

Loop Processor Example

hoffe, das hilft!

+0

könnte dies in die Endlosschleife geraten ... – Neil

Verwandte Themen