[PYTHON] [AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 3 (Zweig)

Überprüfung von Teil.2

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.

Diesmal das Ziel

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.

Vorbereitung

Ändern Sie die Lambda-Funktion

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.

Erstellen / Bereitstellen

Führen Sie in diesem Zustand "sam build" und "sam deploy --guided" aus, um die Lambda-Funktion bereitzustellen.

Ändern Sie das Verhalten abhängig vom Rückgabewert der Lambda-Funktion

Ändern Sie die Definition der Zustandsmaschine

Ä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!"
    }
  }
}
  1. "Hallo Welt 1" führt den Status "Status überprüfen" zum nächsten Status aus
  2. Wenn für "Status überprüfen" der Wert von "$ .hello_world_result.body.message" "Hallo Welt" ist, führen Sie "Hallo Welt 2" im nächsten Status aus.
  3. Wenn für "Status überprüfen" der Wert von "$ .hello_world_result.body.message" "erneut versuchen" ist, führen Sie "Wartezustand" zum nächsten Status aus.
  4. Wenn für "Status überprüfen" der Wert von "$ .hello_world_result.body.message" nicht "Hallo Welt" und "Wiederholen" ist, führen Sie "Fehlerstatus" im nächsten Status aus (diesmal kann dies nicht passieren).
  5. "wait state" führt nach 5 Sekunden den Status "retry lambda" aus.
  6. "Lambda erneut versuchen" führt den Status "Status prüfen" aus, nachdem die Lambda-Funktion aufgerufen wurde
  7. "Hallo Welt 2" beendet die Statusausführung nach dem Aufruf der Lambda-Funktion
  8. "Fehlerzustand" beendet die Zustandsausführung als abnormale Beendigung

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).

Erstellen / Bereitstellen

Führen Sie in diesem Zustand "sam build" und "sam deploy --guided" aus, um sie bereitzustellen.

Überprüfen der Zustandsmaschine

Lassen Sie uns zunächst sehen, wie die visualisierte Zustandsmaschine aussieht, indem Sie die Definition der Zustandsmaschine aktualisieren.

sf1.png

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.

Versuchen Sie, eine Zustandsmaschine auszuführen

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.

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3432373939382f64303138383561632d323261362d623039372d646435622d3135383438333539616634372e706e67.png

Mal sehen, das Ergebnis

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).

sf2.png

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.

sf3.png

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.

sf4.png

Danach wird "erneut versuchen" noch zweimal hintereinander zurückgegeben, aber "Hallo Welt" wird zum dritten Mal zurückgegeben.

sf5.png

Danach können Sie sehen, dass der Status "Hallo Welt 2" ausgeführt wird.

sf6.png

Und der Staat endet so wie er ist.

Neu hinzugefügter "Auswahl" -Status

Es gibt einen aktualisierten Inhalt am 13. August 2020.

Wertetest (Typprüfung)

Ermöglicht es Ihnen, den Typ der "Variablen" in "Auswahl" zu sehen.

Beispiel


   "Variable": "$.foo",
   "IsNull|IsString|IsNumeric|IsBoolean|IsTimestamp": true|false

Existenzprüfung

Ermöglicht es Ihnen, die Existenz von "Variable" selbst zu überprüfen.

Beispiel


  "Variable": "$.foo",
  "IsPresent": true|false

Wild Card Check

Ermöglicht die Durchführung einer Urteilsprüfung mit einem Platzhalter.

Beispiel


  "Variable": "$.foo",
  "StringMatches": "log-*.txt"

Vergleich mit einem anderen Eingabefeld

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"

Einzelheiten

Sie können es hier überprüfen.

AWS Step Functions adds updates to ‘choice’ state, global access to context object, dynamic timeouts, result selection, and intrinsic functions to Amazon States Language

Zusammenfassung

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.

Beispielcode-Repository

https://github.com/hito-psv/sam-demo-006

Recommended Posts

[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 3 (Zweig)
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 1 (Basic)
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 2 (Parameter)
[AWS SAM] Erstellen Sie eine API mit DynamoDB + Lambda + API Gateway
Regelmäßiges Serverless Scraping mit AWS Lambda + Scrapy Teil 1.8
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
AWS-Schrittfunktionen zum Lernen anhand eines Beispiels
Löschen Sie DynamoDB-Daten nach 5 Minuten mit den AWS-Schrittfunktionen
PyTorch mit AWS Lambda [Lambda-Import]
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Spiele mit einer Schildkröte mit Schildkrötengrafiken (Teil 1)
[AWS] API mit API Gateway + Lambda erstellen
Regelmäßiges Serverless Scraping mit AWS Lambda + Scrapy Teil 1
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Spielen Sie handschriftliche Zahlen mit Python Teil 2 (identifizieren)
Ich möchte mit aws mit Python spielen
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[AWS] Machen Sie SSI-ähnliche Dinge mit S3 / Lambda
Ich habe gerade FizzBuzz mit AWS Lambda gemacht
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen einer Lambda-Funktion
LINE BOT mit Python + AWS Lambda + API Gateway
[AWS] Versuchen Sie, API Gateway + Lambda mit X-Ray zu verfolgen
Ich habe versucht, AWS Lambda mit anderen Diensten zu verbinden
Automatisierung des Infrastrukturbaus mit CloudFromation + Tropical + AWS Lambda
Ich wollte die Google-Tabelle mit AWS Lambda betreiben, also habe ich es versucht [Teil 2]