【AWS】AWS Step Functionsを触ってみる

AWS

1. 概要

前回は「AWS SAM CLI」を使いsamconfig.tomlでデプロイ先ごとに管理する内容でした。今回は「AWS Step Functions」を触ってみる内容となります。

2. AWSアカウントにサインアップ

2-1. 前提条件

3. とりあえず触ってみる

※ボタンを数回クリックすると、下記のようなサンプルが作成されます。

3-1. 今すぐ始める

3-2. Hello Worldを実行

3-3. デザインエディタ

3-4. ステートマシン名を変更し、作成

3-5. 実行を開始

3-6. 実行の結果

4. ASL(Amazon States Language)

Using Amazon States Language to define Step Functions workflows – AWS Step Functions

4-1. 用語

ステートのフィールド説明
StartAt(必須)ステートオブジェクトの名前と完全に一致する(大文字と小文字が区別される)文字列
States(必須)コンマ区切りのステートのセット
Type(必須)ステートのタイプ
Pass(“Type”: “Pass”) は、何も作業せずに入力を出力に渡す
Choice(“Type”: “Choice”) は、ステートマシンに条件付きロジックを追加
Wait(“Type”: “Wait”) は、ステートマシンの続行を指定された時間分Wait
Parallel(“Type”: “Parallel”) は、ステートマシンで実行する個別のブランチを追加するために使用
Fail(“Type”: “Fail”) は、ステートマシンの実行を停止
Next現在のステートが終了した時に実行される次のステートの名前
Result次の状態に渡される仮想タスクの出力を参照
Choices(「”Type”: “Choice”」の場合に必須)
ステートマシンが次に移行する状態を決定する選択ルールの配列。選択ルールで比較演算子を使用して、入力変数を特定の値と比較
Branches(「”Type”: “Parallel”」の場合に必須)
ステートマシンで並列して実行する状態を指定するオブジェクトの配列。このような各ステートマシンオブジェクトには States および StartAt というフィールドが必要

5. 処理(ステート)の流れ

5-1. 全体のフロー

5-2. States

5-2-1. Pass

{
  "Comment": "A Pass state passes its input to its output, without performing work. They can also generate static JSON output, or transform JSON input using filters and pass the transformed data to the next state. Pass states are useful when constructing and debugging state machines.",
  "Type": "Pass",
  "Result": {
    "IsHelloWorldExample": true
  },
  "Next": "Hello World example?"
}
  • 次のステート(Hello World example?)の入力として「”IsHelloWorldExample”: true」を渡す

5-2-2. Hello World example?

{
  "Comment": "A Choice state adds branching logic to a state machine. Choice rules can implement many different comparison operators, and rules can be combined using And, Or, and Not",
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.IsHelloWorldExample",
      "BooleanEquals": true,
      "Next": "Yes"
    },
    {
      "Variable": "$.IsHelloWorldExample",
      "BooleanEquals": false,
      "Next": "No"
    }
  ],
  "Default": "Yes"
}
  • 前のステート(Pass)にて「true」が渡ってきたので、次に「Yes」へ進む

5-2-3. Yes

{
  "Type": "Pass",
  "Next": "Wait 3 sec"
}
  • 次のステート(Wait 3 sec)に進む

5-2-4. Wait 3 sec

{
  "Comment": "A Wait state delays the state machine from continuing for a specified time.",
  "Type": "Wait",
  "Seconds": 3,
  "Next": "Parallel State"
}
  • 3秒Wait後、次のステート(Parallel State)へ進む

5-2-5. Parallel State

{
  "Comment": "A Parallel state can be used to create parallel branches of execution in your state machine.",
  "Type": "Parallel",
  "Next": "Hello World",
  "Branches": [
    {
      "StartAt": "Hello",
      "States": {
        "Hello": {
          "Type": "Pass",
          "End": true
        }
      }
    },
    {
      "StartAt": "World",
      "States": {
        "World": {
          "Type": "Pass",
          "End": true
        }
      }
    }
  ]
}
  • ステートマシン「Hello」と「World」が並列で実行される
    • 「Hello」と「World」は、それぞれ「StartAt」と「States」が必要

5-2-5-1. Hello

{
  "Type": "Pass",
  "End": true
}
  • Pass且つResultもないので、何もしない。ただの検証用

5-2-5-2. World

{
  "Type": "Pass",
  "End": true
}
  • Pass且つResultもないので、何もしない。ただの検証用

5-2-6. Hello World

{
  "Type": "Pass",
  "End": true
}
  • Pass且つResultもないので、何もしない。ただの検証用

6. 全体のASL

{
  "Comment": "A Hello World example demonstrating various state types of the Amazon States Language. It is composed of flow control states only, so it does not need resources to run.",
  "StartAt": "Pass",
  "States": {
    "Pass": {
      "Comment": "A Pass state passes its input to its output, without performing work. They can also generate static JSON output, or transform JSON input using filters and pass the transformed data to the next state. Pass states are useful when constructing and debugging state machines.",
      "Type": "Pass",
      "Result": {
        "IsHelloWorldExample": true
      },
      "Next": "Hello World example?"
    },
    "Hello World example?": {
      "Comment": "A Choice state adds branching logic to a state machine. Choice rules can implement many different comparison operators, and rules can be combined using And, Or, and Not",
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.IsHelloWorldExample",
          "BooleanEquals": true,
          "Next": "Yes"
        },
        {
          "Variable": "$.IsHelloWorldExample",
          "BooleanEquals": false,
          "Next": "No"
        }
      ],
      "Default": "Yes"
    },
    "Yes": {
      "Type": "Pass",
      "Next": "Wait 3 sec"
    },
    "No": {
      "Type": "Fail",
      "Cause": "Not Hello World"
    },
    "Wait 3 sec": {
      "Comment": "A Wait state delays the state machine from continuing for a specified time.",
      "Type": "Wait",
      "Seconds": 3,
      "Next": "Parallel State"
    },
    "Parallel State": {
      "Comment": "A Parallel state can be used to create parallel branches of execution in your state machine.",
      "Type": "Parallel",
      "Next": "Hello World",
      "Branches": [
        {
          "StartAt": "Hello",
          "States": {
            "Hello": {
              "Type": "Pass",
              "End": true
            }
          }
        },
        {
          "StartAt": "World",
          "States": {
            "World": {
              "Type": "Pass",
              "End": true
            }
          }
        }
      ]
    },
    "Hello World": {
      "Type": "Pass",
      "End": true
    }
  }
}

7. 備考

「AWS Step Functions」を触ってみる内容でした。

8. 参考

  1. What is Step Functions? – AWS Step Functions (amazon.com)
  2. Using Amazon States Language to define Step Functions workflows – AWS Step Functions

投稿者プロフィール

Sondon
開発好きなシステムエンジニアです。
卓球にハマってます。

関連記事

  1. AWS

    NuGetパッケージの管理で「このソースでは利用できません」と表示され…

  2. AWSのロールプレイングゲーム「AWS Cloud Quest」を触っ…

  3. AWS

    【AWS】Lambdaを使ってみる

  4. AWS

    【AWS】Amazon DynamoDBを使ってみる(CLI、API)…

  5. AWS

    【AWS】API Gatewayを使ってみる

  6. AWS

    【AWS】AWS LambdaとAmazon DynamoDBを使って…

最近の記事

  1. raspberrypi

制作実績一覧

  1. Checkeys