AWS StepfunctionsとSWFの違い
はじめに
AWS SAPの勉強中、SWFについて不明瞭だったこと、
StepfunctionsとSWFの違いが理解できていなかったことから、
これらについて勉強。
想定読者
SWFについて不明瞭な人。
まず、SWFとは
Amazon SWF(Simple Workflow Service)とは、フルマネージド型のワークフローサービス。
処理のステート管理やタスク間のコーディネートが行える。
Stepfunctionsの前身といえるサービス。
SWFはあくまでワークフローを作成し、タスクや状態を管理するものなので、
実際に処理をするワーカーが別途必要。
ワーカーは、SWFエンドポイントに通信できる任意のコンピューティングデバイス(EC2、オンプレ等)で動作するプログラムで、以下の言語で開発できる。
- 開発言語
Java、.NET、Node.js、PHP、PHP バージョン 2、Python および Ruby
また、ワーカーには種類がありそれぞれ役割が異なる。
SWFを実行する場合、それぞれ実装する必要がある。
- ワークフロースターター
ワークフローを開始するもの。
例として、eコマースにおけるウェブサイトに相当。 - ディサイダー
ワークフローでアクティビティタスクの流れを制御するもの。
ワークフローの履歴を分析し、次のステップを決定する。 - アクティビティ
ワークフローでタスクを実行するもの。
現在では、新規アプリケーションの開発にはStepfunctionsの利用が推奨されており、Stepfunctionsでニーズが満たせない場合にSWFを検討するよう公式が明言している。
よくある質問 - Amazon SWF
SWFを検討するケース
先に記した通り、基本的にはStepfunctionsで問題なし。
しかし、下記の様なSWFを検討するケースも存在している。
-
プロセスにおいて介入する外部信号が必要な場合
例えば、ワークフローの途中に人間の命令が必要な場合。
eコマースにおける注文処理にて、
ユーザーから注文キャンセルを受け取る場合などが例に挙げられる。
シグナル - Amazon SWF
その他にも、人間の判断が必要なもの(承認系とか)であれば、SWFを検討できる。 -
結果を親に返す子プロセスを起動する場合
これはStepfunctionsでも親ステートマシンから子ステートマシンを呼び出すことによって、
実現出来る気がするんですが、どうなんでしょうか…。
AWS Step Functions のよくある質問 - SWFとの使い分け
おわりに
まず、SWFではワーカーの知識・実装が必要であるため、お手軽にできるものではないなと感じました。AWSコンソール上で完結しないので、軽く実装してみよっかなができないところも微妙ポイントです。開発環境を整えて、実装したプログラムをデプロイする必要があります。
Stepfunctionsでは、Lambdaを使ってサーバーレスにしたり、ステートマシンを作成する際にユースケースに応じたテンプレートが存在したりするのでなおさらSWFの重さを感じました。
また、Stepfunctionsはフローが視覚化されていますが、SWFでは視覚化されていません。
実行されたイベントがログ形式で表示されるのみなので、Stepfunctionsと比較してしまうと直感的ではありません。
以上から、基本的にはStepfunctionsを使っておけば良いということが理解できました。
資格試験の対策としての勉強でしたが、SWFについて少し理解が進んだのでヨシ!です。
Discussion