AWS Step Functions ゼロから入門
はじめに
最近はETLパイプラインやバッチ処理を中心としたアプリ開発に関わることが多く、データ周りへの興味がでてきました。AWSでの実現方法の有力候補であるAWS Step Functionsを実際に触ってみて、どのようなユースケースに対応できるのを調査してみます。
サービス概要
AWSの各サービスと連携・統合することにより、分散アプリケーション・マイクロサービスを実現するフルマネージドなオーケストレーションサービスです。
ステートマシン
1つのStep Functionsの定義をステートマシンと呼び、各ステップをステートと呼びます。
ASL(Amazon States Language)
ステートマシンを定義するための言語。JSON形式の言語でワークフローを定義します。
ワークフロータイプ
2つのワークフロータイプがあり、サービス特性によって選択することができます。
ただし、選択したワークフロータイプはあとから変更することはできません。
Standard ワークフロー
長時間実行され耐久性が必要で監査可能なワークフローに最適です。
- 毎秒2,000の実行レート
- 最大1年間の実行時間
- ワークフローは1回だけ実行され、各ステップは1回だけ実行されます(Retry動作を指定しない限り)
Express ワークフロー
ストリーミングデータ処理やIoTデータインジェストなどhigh-event-rateが求められるワークフローに最適です。
- 毎秒 100,000 の実行レート
- 最大5分の実行時間
- Expressワークフロー内の各ステップは少なくとも1回実行されます
ワークフローのユースケース
Step Functionsは6つのパターンを組み合わせてワークフローを構築します。
連携できるAWSサービス
Step FunctionsではAWSの他のサービスを直接呼び出すことができます。
その際、呼び出し先との連携パターンについて以下の3つのパターンを利用することができます。
- リクエストレスポンス:HTTPレスポンスを待ってから次の状態に移行します。Step Functionsは呼び出し先のジョブの完了を待ちません。
- ジョブの実行 (.sync):ジョブが完了するまで待機します。
- タスクトークンによるコールバックを待つ:タスクトークンが返されるまでワークフローを一時停止します。例えば、人間による承認、サードパーティーとの統合、あるいはレガシーシステムの呼び出しまで待機することが必要になる場合に利用します。
連携できるサービスは以下ページを参照ください。
Integrating optimized services with Step Functions
テンプレート
AWSコンソールから新規ステートマシンを作成する時、テンプレートから作成することができます。
このテンプレートが結構豊富で具体的なユースケースがイメージできます。
ステートマシンの作成
Step FunctionsのコンソールからサンプルであるHello World exampleを作成してみます。
テンプレートが展開され、コンソール上で視覚的にワークフロー全体を確認できました。
サイドバーからAWSサービスを呼び出すフローを追加したり、各ステートをクリックして入力情報をセットしたり、画面からポチポチすることでワークフローをカスタマイズすることができます。
また、JSON形式のASLを直接編集することでも修正が可能です。
「作成」をクリックした後、ステートマシンを実行してみます。
実行履歴をグラフで表示してくれ、各ステートが成功なのか失敗なのかまたは別の状態なのかが視覚的にわかります。
また、各ステートごとの情報も確認することができ、入力情報/出力情報や実行時間を見ることができます。
最後に
今回は簡単にサンプルのステートマシンを作成してみました。
このステートマシンを実際にカスタマイズしようとしたところ、Step Functions固有のフローやパラメーターなどを把握するのに手こずり、まだまだインプットが必要だなと感じました。
Discussion