[PYTHON] AWS-Schrittfunktionen zum Lernen anhand eines Beispiels

Schrittfunktionen, die als Workflow-Service angekündigt wurden. Andere Workflow-Services umfassen Simple Workflow (SWF). Für neue Anwendungen wird jedoch empfohlen, Schrittfunktionen zu berücksichtigen. Wenn Sie Ihre Anforderungen nicht erfüllen, können Sie SWF ausprobieren.

Derzeit sind 6 Arten von Blaupausen als Beispiele in den Schrittfunktionen verfügbar. Wenn Sie sich nur diesen Code ansehen, scheinen Sie die erforderlichen Mindestspezifikationen zu verstehen.

Schauen Sie sich zuerst die vorbereitete Blaupause an und erstellen Sie eine Zustandsmaschine mit allen am Ende definierten Zuständen.

Blueprint Hello World スクリーンショット 2017-03-01 16.15.44.png

{
  "Comment": "A Hello World example of the Amazon States Language using a Pass state",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Pass",
      "Result": "Hello World!",
      "End": true
    }
  }
}

Wait State スクリーンショット 2017-03-01 16.16.16.png

{
  "Comment": "An example of the Amazon States Language using wait states",
  "StartAt": "FirstState",
  "States": {
    "FirstState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "Next": "wait_using_seconds"
    },
    "wait_using_seconds": {
      "Type": "Wait",
      "Seconds": 10,
      "Next": "wait_using_timestamp"
    },
    "wait_using_timestamp": {
      "Type": "Wait",
      "Timestamp": "2015-09-04T01:59:00Z",
      "Next": "wait_using_timestamp_path"
    },
    "wait_using_timestamp_path": {
      "Type": "Wait",
      "TimestampPath": "$.expirydate",
      "Next": "wait_using_seconds_path"
    },
    "wait_using_seconds_path": {
      "Type": "Wait",
      "SecondsPath": "$.expiryseconds",
      "Next": "FinalState"
    },
    "FinalState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "End": true
    }
  }
}

Retry Failure スクリーンショット 2017-03-01 16.16.43.png

{
  "Comment": "A Retry example of the Amazon States Language using an AWS Lambda Function",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "Retry": [
        {
          "ErrorEquals": ["HandledError"],
          "IntervalSeconds": 1,
          "MaxAttempts": 2,
          "BackoffRate": 2.0
        },
        {
          "ErrorEquals": ["States.TaskFailed"],
          "IntervalSeconds": 30,
          "MaxAttempts": 2,
          "BackoffRate": 2.0
        },
        {
          "ErrorEquals": ["States.ALL"],
          "IntervalSeconds": 5,
          "MaxAttempts": 5,
          "BackoffRate": 2.0
        }
      ],
      "End": true
    }
  }
}

Parallel スクリーンショット 2017-03-01 16.17.25.png

{
  "Comment": "An example of the Amazon States Language using a parallel state to execute two branches at the same time.",
  "StartAt": "Parallel",
  "States": {
    "Parallel": {
      "Type": "Parallel",
      "Next": "Final State",
      "Branches": [
        {
          "StartAt": "Wait 20s",
          "States": {
            "Wait 20s": {
              "Type": "Wait",
              "Seconds": 20,
              "End": true
            }
          }
        },
        {
          "StartAt": "Pass",
          "States": {
            "Pass": {
              "Type": "Pass",
              "Next": "Wait 10s"
            },
            "Wait 10s": {
              "Type": "Wait",
              "Seconds": 10,
              "End": true
            }
          }
        }
      ]
    },
    "Final State": {
      "Type": "Pass",
      "End": true
    }
  }
}

Catch Failure スクリーンショット 2017-03-01 16.18.05.png

{
  "Comment": "A Catch example of the Amazon States Language using an AWS Lambda Function",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "Catch": [
        {
          "ErrorEquals": ["HandledError"],
          "Next": "CustomErrorFallback"
        },
        {
          "ErrorEquals": ["States.TaskFailed"],
          "Next": "ReservedTypeFallback"
        },
        {
          "ErrorEquals": ["States.ALL"],
          "Next": "CatchAllFallback"
        }
      ],
      "End": true
    },
    "CustomErrorFallback": {
      "Type": "Pass",
      "Result": "This is a fallback from a custom lambda function exception",
      "End": true
    },
    "ReservedTypeFallback": {
      "Type": "Pass",
      "Result": "This is a fallback from a reserved error code",
      "End": true
    },
    "CatchAllFallback": {
      "Type": "Pass",
      "Result": "This is a fallback from a reserved error code",
      "End": true
    }
  }
}

Choice State スクリーンショット 2017-03-01 16.18.49.png

{
  "Comment": "An example of the Amazon States Language using a choice state.",
  "StartAt": "FirstState",
  "States": {
    "FirstState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "Next": "ChoiceState"
    },
    "ChoiceState": {
      "Type" : "Choice",
      "Choices": [
        {
          "Variable": "$.foo",
          "NumericEquals": 1,
          "Next": "FirstMatchState"
        },
        {
          "Variable": "$.foo",
          "NumericEquals": 2,
          "Next": "SecondMatchState"
        }
      ],
      "Default": "DefaultState"
    },

    "FirstMatchState": {
      "Type" : "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnFirstMatch",
      "Next": "NextState"
    },

    "SecondMatchState": {
      "Type" : "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnSecondMatch",
      "Next": "NextState"
    },

    "DefaultState": {
      "Type": "Fail",
      "Cause": "No Matches!"
    },

    "NextState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "End": true
    }
  }
}

kombinieren

Die folgenden 7 Arten von Zuständen sind verfügbar.

Erstellen Sie die folgende Zustandsmaschine mit allen 7 Zustandstypen.

スクリーンショット 2017-03-01 15.38.58.png

Implementierung

JSON Die obige Zustandsmaschine ist in JSON wie folgt definiert.

{
	"Comment": "Sample Step functions flow",
    "StartAt": "Process1",
    "States": {
        "Process1": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process1",
            "Next": "ChoiceStep"
        },
        "ChoiceStep": {
            "Type": "Choice",
            "Choices": [{
                "Variable": "$.processResult",
                "StringEquals": "Process2a",
                "Next": "SuccessProcess"
            }, {
                "Variable": "$.processResult",
                "StringEquals": "Process2b",
                "Next": "Process2b-1"
            }]
        },
        "SuccessProcess": {
            "Type": "Succeed"
        },
        "Process2b-1": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
            "Next": "Process2b-2"
        },
        "Process2b-2": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
          	"Catch": [{
              "ErrorEquals": [
                "HandledError"
              ],
              "Next": "FailedProcess"
            }],
            "Next": "Process3"
        },
      	"FailedProcess": {
            "Type": "Fail"      
        },
        "Process3": {
            "Type": "Wait",
            "Seconds": 30,
            "Next": "Process4"
        },
        "Process4": {
            "Type": "Parallel",
            "Next": "Process5",
            "Branches": [
                {
                    "StartAt": "Process4a",
                    "States": {
                        "Process4a": {
                            "Type": "Task",
                            "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
                            "End": true
                        }
                    }
                },
                {
                    "StartAt": "Process4b-1",
                    "States": {
                         "Process4b-1": {
                            "Type": "Task",
                            "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
                            "Retry": [{
                                "ErrorEquals": [
                                    "HandledError"
                                ],
                                "IntervalSeconds": 3,
                                "MaxAttempts": 5,
                                "BackoffRate": 1.5
                            }],
                            "Next": "Process4b-2"
                         },
                         "Process4b-2": {
                            "Type": "Pass",
                            "Result": {
                                "data1": 12345,
                                "data2": -12345
                            },
                            "ResultPath": "$.test-data",
                            "Next": "Process4b-3"
                         },
                         "Process4b-3": {
                            "Type": "Task",
                            "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
                            "End": true
                         }
                    }
                }
            ]
        },
        "Process5": {
          	"Type": "Task",
			"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process3",
            "End": true
        }
    }
}

Lambda-Funktion

Bereiten Sie die folgenden drei Labda-Funktionen vor.

def lambda_handler(event, context):
    event["step"] = 1
    event["processResult"] = "Process2b"
    return event
def lambda_handler(event, context):
    event["step"] += 1
    return event
def lambda_handler(event, context):
    print event
    return event

Erstellungsverfahren

  1. Wählen Sie in der Verwaltungskonsole [Schrittfunktionen] aus.

  2. Wählen Sie Erste Schritte.

  3. Geben Sie Folgendes ein und wählen Sie [Zustandsmaschine erstellen]. Give a name to your state machine: SampleStateMachineWithVariableOfTypes

Geben Sie den JSON aus dem vorherigen ein.

Wenn Sie die Ladetaste der Vorschau drücken, wird der Status der Zustandsmaschine angezeigt.

  1. Geben Sie Folgendes ein und wählen Sie [OK].

IAM role for your state machine executions: StatesExecutionRole-us-east-1

  1. Wählen Sie Neue Ausführung.
  2. Geben Sie den folgenden Wert als Eingabe an.
{
    "processResult": "Process2b"
}
  1. Wählen Sie Start Execution.

Ausgabe

Output

output: [{"processResult": "Process2b", "step": 4},{"test-data": {"data1": 12345, "data2": -12345}, "processResult": "Process2b", "step": 5}]

Tips

def lambda_handler(event, context):
    event["step"] = 1
    event["processResult"] = "Process2b"
    return event

if __name__ == "__main__":
    lambda_handler("","")

Hinweis

――Ich werde wütend, wenn ich eine zusätzliche Aufgabe definiere

Referenz

Recommended Posts

AWS-Schrittfunktionen zum Lernen anhand eines Beispiels
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 3 (Zweig)
Ein Beispiel, um Faktorisierungsmaschinen schnell mit fastFM auszuprobieren
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 1 (Basic)
Löschen Sie DynamoDB-Daten nach 5 Minuten mit den AWS-Schrittfunktionen
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 2 (Parameter)
Lernen Sie Librosa mit einem Tutorial 1
Eine Python-Probe zum Lernen von XOR mit einem genetischen Algorithmus in einem neuronalen Netz
Der erste Schritt beim Erstellen einer serverlosen Anwendung mit Zappa
Dateningenieure lernen DevOps im Hinblick auf MLOps. ① Erste Schritte
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Lernen Sie mit Chainer, monochrome Bilder einzufärben
So fügen Sie ein Paket mit PyCharm hinzu
Geben Sie eine signierte URL mit AWS SQS aus
Ich möchte mit aws mit Python spielen
Verwendung des CUT-Befehls (mit Beispiel)
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Beispielprogramm zum Anzeigen von Videos mit PyQt
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
Vorbereitung auf das Erlernen technischer Indikatoren mit TFlearn
Beispiel für die Wavelet-Konvertierung von Bildern in Python
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
[AWS] Umgang mit Wordpress "Die Antwort ist nicht die richtige JSON-Antwort."
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Erstellt einen Mechanismus zum Herunterladen einer großen Zip-Datei mit Basisauthentifizierung mit aws
Erstellen von CSV-Beispieldaten mit Hypothese
Lesen einer CSV-Datei mit Python 2/3
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
[Computer Vision] Epipolare Geometrie mit Katzen gelernt
So senden Sie eine Nachricht mit Curl an LINE
Ein Memorandum, um WebDAV nur mit Nginx zu erstellen
Öffnen Sie AI Gym, um mit PD-gesteuertem Cart Pole zu lernen
Erstellen Sie mit pulumi eine WardPress-Umgebung auf AWS
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Versuchen Sie Tensorflow mit einer GPU-Instanz unter AWS
Lernen Sie mit Caffe, handschriftliche Zahlen (MNIST) zu erkennen
So entwickeln Sie eine Cart-App mit Django
Erstellen Sie einen Datensatz, indem Sie zufällig MNIST-Daten auswählen
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
Ich möchte ein Spiel mit Python machen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Spielen Sie den Server mit zwei PCs
Entscheide dich für einen Laborauftrag mit Python (Fiktion)
Melden Sie sich einfach mit mehreren Konten bei AWS an
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Beispiel zum Zeichnen einer einfachen Uhr mit ebiten
Schritte zum Erstellen eines Twitter-Bots mit Python
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Wie man Kaldi mit JUST Corpus trainiert
[Telewa gewidmet! ] Ich betreibe einen PC mit einer Webkamera.
Ich möchte mit Python in eine Datei schreiben
[PyTorch] Beispiel ⑧ ~ So erstellen Sie ein komplexes Modell ~
Zubu Amateur will Python starten
Verwendung von Fixture in Django zur Eingabe von Beispieldaten für das Benutzermodell
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit