In Part2 haben wir hauptsächlich Folgendes getan.
Dieses Mal werde ich von der Fortsetzung ausgehen. Wenn Sie von hier aus beginnen, https://github.com/hito-psv/sam-demo-005 Es ist in Ordnung, den Code von `git clone`` zu haben, oder Sie können ihn in Part2 ausprobieren.
Ich würde gerne zielen. Für den Lambda-Teil möchte ich mit der in Part2 erstellten Funktion "Hello World" herumspielen und verschiedene Dinge ausprobieren.
Ich möchte einige Muster von Zeichenfolgen im aktuellen Code mit Zufallszahlen zurückgeben.
hello_world/app.py
import logging
import random
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info(event)
message_array = [
"hello world",
"retry"
]
message = random.choice(message_array)
logger.info(message)
return {
"statusCode": 200,
"body": {
"message": message,
}
}
Nun wird die resultierende Nachricht
Jede Zeichenfolge von wird zurückgegeben.
Führen Sie in diesem Zustand "sam build" und "sam deploy --guided" aus, um die Lambda-Funktion bereitzustellen.
Ändern Sie zunächst die Definition der Zustandsmaschine. Ich werde den Korrekturinhalt später erklären, also werde ich zuerst versuchen, ihn so zu korrigieren.
step_functions/state_machine.json
{
"StartAt": "hello world 1",
"States": {
"hello world 1": {
"Type": "Task",
"Resource": "${HelloWorldFunction}",
"Parameters": {
"p1.$": $.p1,
"p2.$": "$.p2",
"p3": {
"p3-1": 20,
"p3-2": "xyz"
},
"all.$": "$"
},
"ResultPath": "$.hello_world_result",
"OutputPath": "$",
"Next": "check state"
},
"retry lambda": {
"Type": "Task",
"Resource": "${HelloWorldFunction}",
"InputPath": "$",
"ResultPath": "$.hello_world_result",
"OutputPath": "$",
"Next": "check state"
},
"check state": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.hello_world_result.body.message",
"StringEquals": "hello world",
"Next": "hello world 2"
},
{
"Variable": "$.hello_world_result.body.message",
"StringEquals": "retry",
"Next": "wait state"
}
],
"Default": "fail state"
},
"wait state": {
"Type": "Wait",
"Seconds": 5,
"Next": "retry lambda"
},
"hello world 2": {
"Type": "Task",
"Resource": "${HelloWorldFunction}",
"InputPath": "$",
"End": true
},
"fail state": {
"Type": "Fail",
"Cause": "No Matches!"
}
}
}
Es wird beschrieben als. In "Auswahlmöglichkeiten"
--Variable
: Ziel überprüfen
--StringEquals
: Wenn die Zeichenfolge mit diesem Wert übereinstimmt
--Next
: Status, der als nächstes ausgeführt werden soll
Angegeben. Die Operationen, die im Abschnitt "String Equals" angegeben werden können, sind [AWS Step Functions Developer Guide](https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/amazon-states-language- " Bitte beziehen Sie sich auf choice-state.html).
Führen Sie in diesem Zustand "sam build" und "sam deploy --guided" aus, um sie bereitzustellen.
Lassen Sie uns zunächst sehen, wie die visualisierte Zustandsmaschine aussieht, indem Sie die Definition der Zustandsmaschine aktualisieren.
Wenn Sie sich geändert haben, können Sie sehen, dass es vom "Prüfstatus" abzweigt und nach "Lambda wiederholen" zum "Prüfstatus" zurückkehrt.
Lassen Sie uns die Zustandsmaschine von der Verwaltungskonsole aus ausführen. Da die Eingabewerte p1 und p2 für die Korrektur aus Teil 2 verwendet werden, geben Sie die Eingabe-Orchidee wie folgt an.
Lassen Sie uns zunächst den visuellen Fluss überprüfen. Alle Pfade verlaufen wunderbar (weil es zufällig ist, kann es einen Fluss von "Hallo Welt 1" → "Status prüfen" → "Hallo Welt 2" geben).
Lassen Sie uns nun überprüfen, ob der Auswahlprozess ordnungsgemäß funktioniert. Hier ist zunächst die Rückkehr der Lambda-Funktion, die aus dem Zustand "Hallo Welt 1" aufgerufen wurde.
Sie können sehen, dass der Nachrichtenteil des Körpers "erneut versuchen" ist. Infolgedessen wird der "Wartezustand" ausgeführt, und nach 5 Sekunden (Überprüfen der Zeiten Nr. 10 und Nr. 11) wird der "Wiederholungs-Lambda-Zustand" ausgeführt.
Danach wird "erneut versuchen" noch zweimal hintereinander zurückgegeben, aber "Hallo Welt" wird zum dritten Mal zurückgegeben.
Danach können Sie sehen, dass der Status "Hallo Welt 2" ausgeführt wird.
Und der Staat endet so wie er ist.
Es gibt einen aktualisierten Inhalt am 13. August 2020.
Ermöglicht es Ihnen, den Typ der "Variablen" in "Auswahl" zu sehen.
Beispiel
"Variable": "$.foo",
"IsNull|IsString|IsNumeric|IsBoolean|IsTimestamp": true|false
Ermöglicht es Ihnen, die Existenz von "Variable" selbst zu überprüfen.
Beispiel
"Variable": "$.foo",
"IsPresent": true|false
Ermöglicht die Durchführung einer Urteilsprüfung mit einem Platzhalter.
Beispiel
"Variable": "$.foo",
"StringMatches": "log-*.txt"
Ermöglicht das Vergleichen eines Eingabefelds mit einem anderen Eingabefeld. Es kann verwendet werden, um Änderungen im Status zu überprüfen.
Beispiel
"Variable": "$.foo",
"StringEqualsPath": "$.bar"
Sie können es hier überprüfen.
Dieses Mal habe ich versucht, mit Choice
zu verzweigen, aber an diesem Punkt fühlt es sich endlich wie ein Workflow an.
Ich denke, dass es bisher nur mit dem Inhalt von Teil 1 bis Teil 3 möglich ist, eine bestimmte Zustandsmaschine zu definieren.
Beim nächsten Mal möchte ich einen anderen Dienst als Lambda mit einer Aufgabendefinition aufrufen.
https://github.com/hito-psv/sam-demo-006
Recommended Posts