AWS
stepfunctions

AWS Step Functions を使ってワークフロー処理を行う。

はじめに

Amazon Web Services ブログAWS Step Functions – ビジュアルワークフローを使ったアプリケーションのビルドと配布というのがあったので、 AWS Step Functions を使ってビジュアルワークフローを作成してみました。

AWS Step Functions とは?

視覚的なワークフローを使って、分散アプリケーションやマイクロサービスのコンポーネントを調整できるサービスです。

料金は?

ワークフローの状態遷移に対して料金がかかります。
とは言っても毎月4,000回までが無料枠なので試しに使ってみる分には気にする必要なさそうです。
しかもこの無料枠は登録して12ヶ月間の期間限定ではなく、無期限とのことです。
ただ、追加料金としてデータ転送やLambda、EC2などの使用料は別途かかります。
そこらへんについては以下を参照ください。
AWS Step Functions 料金

ビジュアルワークフローの作成

Lambdaの準備

まずは Step Functions で利用するLambda関数を準備します。
今回はサンプルのHello Worldを使うことにします。
スクリーンショット 2018-02-01 14.38.04.png

関数の作成が完了すると右上にARNが表示されます。これのARNはこれから作成する Step Functions で利用します。
スクリーンショット 2018-02-01 14.38.58.png

ステートマシンの作成

それでは Step Functions でステートマシンを作成したいと思います。
まだ1つも作成したことない場合は、以下のような画面が表示されると思うので「今すぐ始める」をクリックして始めます。
スクリーンショット 2018-02-01 14.40.02.png

するとステートマシンの作成をどうするか選択が求められます。今回はテンプレートをベースにするので、「テンプレート」を選択し、テンプレートの選択では「Hello world」を選びます。
スクリーンショット 2018-02-01 14.41.16.png

ステートマシンのコードとビジュアルワークフロー

ステートマシンの名前に「MyStateMachine」(任意)を入力します。また、実行するためのIAMロールはデフォルトのままです。
スクリーンショット 2018-02-01 14.44.06.png

コードの部分は以下をまずコピペします。

コード
{
  "Comment": "A simple example of the Steps language using an AWS Lambda Function",
  "StartAt": "Hello",

  "States": {
    "Hello": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:eu-west-1:99999999999:function:HelloWord_Step",
      "Next": "Parallel"
    },

    "Parallel": {
      "Type": "Parallel",
      "Next": "Goodbye",
      "Branches": [
        {
          "StartAt": "p1",
          "States": {
            "p1": {
                  "Type": "Task",
                  "Resource": "arn:aws:lambda:eu-west-1:9999999999:function:HelloWord_Step",
              "End": true
            }
          }
        },

        {
          "StartAt": "p2",
          "States": {
            "p2": {
                  "Type": "Task",
                  "Resource": "arn:aws:lambda:eu-west-1:99999999999:function:HelloWord_Step",
              "End": true
            }
          }
        }
      ]
    },

    "Goodbye": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:eu-west-1:99999999999:function:HelloWord_Step",
      "End": true
    }
  }
}

コピペしたら以下のようにResourceの部分をクリックします。すると利用できるLambda関数が表示されるので、先ほど作成したLambda関数へ変更します。
今回の場合、Resource箇所は4つ存在するので全部変更しましょう。

スクリーンショット 2018-02-01 14.44.49.png

変更が終わったらビジュアルワークフローの文字の横にある更新マークをクリックします。
すると先ほどコピペしたコードの内容がビジュアルフローとして反映されます。

スクリーンショット 2018-02-01 21.29.14.png

ワークフローの設定が終わったら「ステートマシンの作成」をクリックします。

スクリーンショット 2018-02-01 14.45.43.png

以上で完了です。

ステートマシンの実行

ワークフローの設定が完了したので、「新しい実行」からステートマシンを実行します。
スクリーンショット 2018-02-01 14.46.00.png

するとポップアップが出るのでそのまま「実行の開始」をクリックします。
スクリーンショット 2018-02-01 14.47.01.png

実行IDの横がぐるぐる更新マークから緑チェックマークに変わったら成功です。

スクリーンショット 2018-02-01 14.47.16.png

実行の詳細にある入力出力のタブをクリックするとそれぞれのデータが確認できます。
スクリーンショット 2018-02-01 22.06.15.png

ビジュアルワークフローについて

確認したいステップをクリックすると右のステップ詳細のところでリソース情報や入出力値を確認することができます。

スクリーンショット 2018-02-01 15.11.01.png

また、パラレル処理などは外枠をクリックすると処理全体の詳細を確認することができます。

スクリーンショット 2018-02-01 15.11.48.png

ここでの入力は前のステップ(Hello)で実行された出力結果です。

スクリーンショット 2018-02-01 15.11.57.png

また、出力ではパラレル処理されたp1とp2の両ステップを合わせた値となります。

スクリーンショット 2018-02-01 15.12.03.png

Step Console

AWS Step Functions は各ステップに関する情報を記録しています。内容は、このStep Console で確認することができます。

スクリーンショット 2018-02-02 0.54.50.png

おわりに

AWS Step Functions を使うことで、複数ステップからなるアプリケーションをシンプルに構築できます。また、視覚化されたフローによって各ステップのステータスや状態遷移を容易に確認できたり、もしエラーが発生した場合は再試行をしてくれたりととても使い勝手が良さそうです。