Amazon Web Services ブログ

AWS Step Functions – ビジュアルワークフローを使ったアプリケーションのビルドと配布

私たちは、ビルドの複雑性や配布されたアプリケーションを、多数のWebアプリやマイクロサービスの連携によってより簡易にしたいと考えています。あなたが複雑なビジネスプロセスを構築しているか写真のアップロードのプロセスをセットアップしているかに関わらず、あなたはコーディネーションではなくコードにフォーカスしてほしいと、私たちは思っています。また、あなたがツールやライブラリに既に明るくなっていてそれらを使うことで、可用性の高いアプリケーション、つまり強固であり、スケーラブルであり、コスト優位性があり、を構築できるようになってほしいと思っています。

 

AWS Step Functionsの概要

まさに上記に述べたことを実現していただくために、本日私たちはAWS Step Functionをリリースしました。これにより、あなたは、ビジュアルなワークフローにて、アプリケーションのコンポーネントを一連のステップとしてコーディネートすることが出来ます。あなたは、アプリケーション実行のスケール時にステップの特定や実行をするために”Step Function Console”により、”state machine”(マシン状態)を生成します。どのstate machineも”tate”のセットとそれらのトランザクションを定義します。”state”は直列や並列でアクティベートされることが可能です。並列のときは、Step Functionは、次に進む前に、全てのパラレルstateが完了に向けて実行されます。その結果、Statsは実行し、判断し、state machineを通してプロセスの進捗をコントロールします。

この図はstate machineの概要です。

 

 

複数のそれらのstate machineのコピーは、同時に独立して実行させることが可能です。そのとき、どのコピーも1つの実行と呼ばれます。このようにして、Step Functionsにより数千の同時実行もさせるこが出来るため、どのような要求レベルであってもスケールさせることが可能です。

stateが実行されたときに何を起こさせるかを指定するために2つの方法があります。1つは、stateが実行されたときに同期的に呼び出されるLambda関数を使う方法です。もう1つは、Activityと呼ばれるものを使う方法です。これは、長時間実行ワーカー関数の参照実装です。この参照実装では、APIを使ってworkの完了をポーリングします。どちらの方法でも、コードはインプットとしてJSON形式で、またアウトプット形式は別の型のJSON形式が期待されます。

state machineの機能として、エラーハンドリング時の挙動やリトライロジックを組み込むことが出来ます。これにより、あなたのコードの一部の問題により一時的な問題発生が起こったとしてもスムーズに実行できる、強固なアプリケーションをビルドできることになります。

 

クイックツアー

それでは、AWS Management Consoleを使ってstate machineをセットアップしてみましょう。本番のアプリケーションでは、ほとんどの場合、実行やstate machine生成にAWS Step FunctionのAPIを使うことにご留意ください。

まずシンプルなLambda関数を生成して保存します。

 

その間に、functionのARNを記録しておきます。

 

そしてAWS Step Functions Consoleに行き、「 Create a State Machine」ボタンを押します。マシン名(ここでは「MyStateMachine」) を入力し、実行開始のためにblueprintsから1つを選んでクリックします。

 

ここでは、MyStateMachineにこのJSONモデルを生成するためのParallelエレメントとHello Worldを使って開始します。

{
  "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
    }
  }
}

 

グラフィカルに確認するために”Preview”ボタンを押します。

 

次に、自分のために適切に生成された、Step FunctionのIAMロールを選択します。

 

これで全てです!これで、コンソールから生成したstate machineを実行できます。つまり、最初のLambda関数をパスするJSONブロックで実行させることが出来ます。

 

Start Exctionボタンを押すとすぐに、定義したstate machineは実行するために開始します。state間を遷移する実行フローを確認することが出来ます。

 

また、Lamdaコンソールに行き、自分の関数の実行が期待どおり4回であることを確認できます。(事前に4回のクリックと、別々の4つのLambda関数の生成は苦に思わないとして)

 

AWS Step Functionsは、どのステップに関する全ての情報を記録しており、Step Consoleを使って確認することが出来ます。

 

AWS Step Functions API

前述のとおり、ほとんどのAWS Step Functions操作はAPIを通じて行われると思いますので、ここに、基本的な関数の概要を記載します。

  • CreateStateMachine – JSON定義による新規state machineの生成
  • ListStateMachines – state machineの一覧表示
  • StartExecution – (非同期な)state machineの実行
  • DescribeExecution – 実行に関する情報取得
  • GetActivityTask – 実行のための、新taskのポーリング(長時間実行ワーカーによる)

また、S3バケットにファイルがアップロードされるたびにLambda関数が実行されるようにすることもできました。

この関数は、StartExecutionを使ってstate machineをキックでき可能です。たとえばこのstate machineはイメージファイルの検査をしたり、複数のサイズ生成を並列的に実行したり、特定のタイプをチェックしたり、Databaseをアップデートさせたりすることが可能です。

同様の機能は、AWS Command Line Interface(CLI)によっても可能です。

 

開発ツール

手書きもしくは自動生成のJSON、それは共通エラーチェックやをチェックするために、新しい、statelint gemを使うことが出来ます。

AWS GitHub repoからダウンロードしインストールしてみてください。(Rubyの場合は、RubyGems

$ sudo gem install j2119-0.1.0.gem statelint-0.1.0.gem

以下は、もし問題があった場合の表示です。

$ statelint my_state.json
2 errors:
State Machine.States.Goodbye does not have required field "Next"
No terminal state found in machine at State Machine.States

問題ない場合は、以下のようになります。

$ statelint my_state.json
$

 

利用可能です

AWS Step Functionsは利用可能です。現在、US East (Northern Virginia)、US East (Ohio)、US West (Oregon)、EU (Ireland)、Asia Pacific (Tokyo) のリージョンで利用可能です。

AWS Free Tierの一部として、月間4,000までのstate transitionは無料です。それ以降は1,000state transtionにつき0.025USD課金されます。

 

Jeff;

原文:New – AWS Step Functions – Build Distributed Applications Using Visual Workflows(翻訳:市崎 洋平)