SWF を選ぶ理由

Amazon Simple Workflow Service (Amazon SWF) は、デベロッパーが並行したステップまたは連続したステップがあるバックグラウンドジョブを構築、実行、スケールするのに役立ちます。Amazon SWF は、クラウド内の完全マネージド型の状態トラッカー、およびタスクコーディネーターとみなすことができます。

アプリのステップが完了に 500 ミリ秒より長くかかる場合、処理の状態を追跡し、タスクが失敗した場合は、リカバリまたは再試行が必要であり、Amazon SWF がお役に立ちます。

AWS のサービスのオーケストレート、ビジネスプロセスの自動化、サーバーレスアプリケーションの構築のために、ローコードのビジュアルプロセスフローサービスをお探しの方は、AWS Step Functions の詳細をご覧ください。

利点

Amazon SWF は、バックグラウンドジョブの段階的論理の制御フローと独自のビジネスロジックを含む実際の作業単位の分離を促進します。これにより、アプリケーションの「状態マシナリ」を、アプリケーションを差別化するコアビジネスロジックから分離して管理、維持、拡張できます。ビジネス要件の変化に合わせて、基盤となる状態マシナリ、タスクの割り当て、フロー制御を心配せずに、容易にアプリケーションロジックを変更できます。

Amazon SWF は、Amazon の高可用性データセンターで実行されるため、アプリケーションが必要なときはいつでも状態追跡やタスク処理エンジンが利用できます。Amazon SWF は重複してタスクを保管し、アプリケーションコンポーネントにタスクを確実に割り当てて、その進行状況をトラッキングし、最新の状態情報を保持します。

Amazon SWF は、独自にコーディングされたプロセスフローソリューションやプロセスオートメーションソフトウェアの複雑さをなくす、フルマネージド型のクラウドプロセスフローウェブサービスです。プロセスオートメーションの基礎となるインフラストラクチャを開発者が管理する必要はなくなるので、アプリケーションの独自機能の開発に集中できます。

Amazon SWF は、アプリケーションの使用状況に合わせてシームレスに処理規模をスケールできます。アプリケーションにクラウドプロセスフローが追加されたり、プロセスフローの複雑さが増大したりしても、プロセスフローサービスに対する手作業での管理は必要ありません。

Amazon SWF では、アプリケーションコンポーネントやコーディネートロジックを任意のプログラミング言語で作成でき、クラウドとオンプレミスのいずれでも実行できます。

Amazon SWF 製品の詳細

Amazon SWF を使用してアプリケーション内のワークフローを管理するのは簡単です。

Amazon SWF の機能

Amazon SWF サービスは、アプリケーションのさまざまなすべてのコンポーネントのコーディネーションハブの役割を果たします。

  • アプリケーションの状態情報を保持する
  • ワークフロー実行をトラッキングしてその進行状況を記録する
  • タスクを保管して割り当てる
  • 各アプリケーションホストにどのタスクを割り当てて実行するかを制御する

Amazon SWF を使用するのに必要な作業は次のとおりです。

  • AWS Management Console または Amazon SWF API を使用して、ワークフローの名前を指定します。
  • Amazon SWF API を使用して新しいワークフローを「開始」します。この結果として、実行対象のワークフロータスクのシーケンスが新たに作成され、これを「ワークフロー実行」と呼びます。
  • Amazon SWF API をワーカーマシンから実行して(「ワーカー」とは、特定のタスクを処理するためにお客様が作成するアプリケーションコンポーネントです)、タスクの順序を確立し、条件フローを管理し、ワークフロー実行のループを実行します。
  • ワーカーマシンの Amazon SWF API を使用して、ワークフロータスクを、クラウド内またはオンプレミスでリクエストして実行します。
  • ワークフロー実行および関連付けられたタスクのステータスと進行状況を AWS Management Console で監視します。

AWS マネジメントコンソールにあるサンプルのチュートリアルを使用すると、サンプルアプリケーションの登録と実行のステップを順に実行することができます。詳細については、ドキュメントを参照してください。

詳細情報

Amazon SWF は、拡張性と耐障害性に優れたアプリケーションを構築するための、完全マネージド型のワークフローサービスです。Amazon SWF はシンプルな API 呼び出し機能を備えており、任意の言語のコードから実行できます。このコードは EC2 インスタンス上で実行することも、インターネットにアクセス可能な任意の場所のマシンで実行することもできます。

Amazon SWF は、コーディネーションハブとして、お客様のアプリケーションホストと相互作用します。お客様は、タスクを組み合わせてワークフローを作成し、適用する条件ロジックがある場合は指定して、Amazon SWF に保管します。ワークフローを実行するたびに、新しいワークフロー実行が作成されたと見なされます。お客様のアプリケーションコンポーネントは、ワークフロー実行の中でのタスクの実行をリクエストするようにプログラミングしてください。Amazon SWF は、タスクをお客様が指定した順序で、お客様のホスト上で実行するようにコーディネートします。実行するホストは、クラウド内でもオンプレミスでもかまいません。アプリケーションは、API を使用して Amazon SWF と通信し、タスクが正常終了したか異常終了したかを記録します。これを受けて、Amazon SWF はタスクのシーケンスを続行するか(次のワークロードタスクをアプリケーションホストに割り当てる)、異常終了したタスクをお客様のビジネスロジックに応じて再実行します。

Amazon SWF によるワークフロー実行を開始するには、AWS Management Console にログインしてください。Amazon SWF API を使用してワークフロー実行を開始することもできます。Amazon SWF に採用されているシンプルなウェブサービスインターフェイスは、使いやすく、柔軟性にも優れています。

  • StartWorkflowExecution: ワークフロータスクのシーケンスを開始し、最初のタスクをアプリケーションホストで実行できる状態にします。
  • DescribeWorkflowExecution: ワークフロー実行とタスクのステータスを返します。
  • PollForActivityTask: お客様のアプリケーションホスト(クラウド内またはオンプレミス)が、連続ループの中でワークフロータスクをリクエストして実行します。
  • RespondActivityTaskCompleted: アプリケーションホストから Amazon SWF に、タスクの実行を正常に完了したことを通知します。これを受けて、Amazon SWF はワークフロー実行を進めるために次のタスクをアプリケーションホストで実行できる状態にします。
  • TerminateWorkflowExecution: 特定のワークフロー実行を停止します。このワークフロー実行のそれ以降のタスクは、Amazon SWF によってアプリケーションホストに割り当てられることはありません。

想定される使用目的と制約

このサービスのご利用には Amazon Web Services カスタマーアグリーメントが適用されます。

ユースケース

Amazon S3Amazon EC2 を使用して動画をエンコーディングする。 このユースケースでは、サイズの大きな動画を、ある程度のまとまり(チャンク)に分けて Amazon S3 にアップロードします。このチャンクのアップロードを監視する必要があります。チャンクが1つアップロードされたら、そのチャンクをエンコードするために Amazon EC2 インスタンスの1つにダウンロードします。エンコードされたチャンクは、別の Amazon S3 ロケーションに保管します。このようにしてすべてのチャンクがエンコードされたら、チャンクを結合して1つのエンコード済みファイルを作成し、そのまま Amazon S3 に保管します。1 つまたは複数のチャンクで発生したエンコードエラーが原因で、このプロセスが異常終了することもあります。そのような障害は、Amazon SWF のクラウドプロセスフロー管理によって検出し、処理する必要があります。

コンポーネントをデータセンターからクラウドに移行する。 ビジネスに欠かせないオペレーションがプライベートのデータセンターでホスティングされていますが、全体をクラウドに移行する必要があります。ただし、サービスの中断が発生してはなりません。Amazon SWF ベースのアプリケーションでは、データセンターで実行されるコンポーネントをラッピングするワーカーと、クラウド内で実行されるワーカーとを組み合わせることができます。データセンターワーカーをシームレスに移行するには、同じタイプの新しいワーカーを最初にクラウド内にデプロイします。データセンター内のワーカーは引き続き通常どおり稼働し、並行して新しいクラウドベースのワーカーも稼働します。クラウドベースのワーカーのテストと検証を行うために、作業負荷の一部をクラウドにルーティングします。このテストの期間中も、データセンター内のワーカーは引き続き稼働しているため、アプリケーションが中断されることはありません。テストが成功すると、データセンター内のワーカーは段階的に停止していき、クラウド内のワーカーがスケールアップして、その全体がクラウドプロセスフロー管理アプリケーションに移行することになります。このクラウドプロセスフロープロセスを、データセンター内の他のすべてのワーカーについても同様に実行すると、アプリケーションを完全にクラウドに移行できます。ビジネス上の理由で、特定の処理ステップを引き続きプライベートのデータセンターで実行する場合は、そのワーカーを引き続きプライベートデータセンターで実行しながらアプリケーションに参加させることが可能です。

サイズの大きい製品カタログを Amazon Mechanical Turk を使用して処理する。 大規模カタログのデータを検証するときに、カタログ内の製品をバッチに分けて処理します。複数のバッチを同時に処理することができます。バッチごとに、製品データをデータセンター内のサーバーから抽出して CSV(カンマ区切り形式)ファイルに変換します。これは、Amazon Mechanical Turk の RUI(Requester User Interface)で要求されている形式です。この CSV をアップロードすると、そのデータを入力として HIT(Human Intelligence Task)が実行されます。HIT が完了したら、生成された CSV を逆変換してデータを元の形式に戻します。この結果を評価し、結果が合格ならば Amazon Mechanical Turk の作業者に報酬が支払われます。HIT の結果が不合格の場合は取り除いて再処理しますが、合格の場合はその結果を使用してカタログを更新します。バッチが処理されるときに、システムは Amazon Mechanical Turk 作業者の質をトラッキングして、報酬をそれに応じて調整する必要があります。不合格の HIT は再びバッチにまとめられて、もう一度パイプラインに送られます。

AWS Flow Framework

AWS Flow Framework は、Amazon Simple Workflow でアプリケーションを迅速かつ簡単に構築できるようにする、便利なライブラリのコレクションです。

仕組み

AWS Flow Framework には、簡単なプログラミングモデルが備わっています。そのため、複数のマシンにまたがって作業を実行するアプリケーションを簡単に構築できます。フレームワークでは、短時間でタスクを作成し、それらを連携させて、通常のプログラムで行っているように、それらのタスク間の依存関係を表現できます。例えば、「リモート」コンピュータにあるアプリケーションでメソッドを実行するには、別の「ローカル」コンピュータでホストされているアプリケーションロジックのメソッドを呼び出すだけです。AWS Flow Framework はリモートメソッドの実行に必要な複雑なやり取りを処理し、Amazon Simple Workflow サービスによって保存された情報を使用して、結果を論理アプリケーションに返します。実行したメソッドの出力は、相互に依存するロジックの個々の部分を結びつけるために使用できます。フレームワークでは、簡単な構文を使用し、「ブロックしてコールバックを待機する」アプローチにより、メッソド間の依存関係を表現できます。また、リモートマシン上での障害は、ローカルエラーであるかのように処理でき、アプリケーションの重要なメソッドが失敗した場合にそれらをどのように再試行するかを簡単に定義できるようにします。

注意

Ruby 用 AWS Flow Framework は、現在活発に開発されていません。既存のコードは無期限に機能し続けますが、新しい機能やバージョンはありません。Ruby 用 Flow Framework のソースコードは、引き続き AWS SWF GitHub アーカイブで入手できます。Ruby ベースの Simple Workflow アプリケーションが進化し変化している場合は、AWS Step Functions への移行やネイティブの Simple Workflow API の使用など、検討できるオプションがあります。詳細については、AWS Simple Workflow デベロッパーガイドを参照してください。

AWS Flow Framework を使用すると、シンプルなコードを作成するだけで、フレームワークの事前に構築されたオブジェクトやクラスにより Amazon Simple Workflow API の詳細を処理できます。AWS Flow Framework には、アプリケーションのステップを作成して実行し、それらの進捗をトラッキングしたり、ステップが失敗した場合の再試行ルールを定義できるなど、さまざまな機能が備わっています。同時に、Amazon Simple Workflow Service では、アプリケーションの実行状態の維持や、利用可能なワーカーへのタスクの依頼、すべてのタスクの監査履歴の保持も行えます。

AWS Flow Framework は Java オープンソースで、AWS によって開発および管理されています。ライブラリ、ソースコード、ドキュメント、サンプルなどは、下記のリンク先から入手できます。