😺

AWS StepfunctionsとSWFの違い

2024/01/12に公開

はじめに

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と比較してしまうと直感的ではありません。

SWFの実行画面

以上から、基本的にはStepfunctionsを使っておけば良いということが理解できました。
資格試験の対策としての勉強でしたが、SWFについて少し理解が進んだのでヨシ!です。

Discussion