« AWSユーザーグループ(JAWS) のサミット 3月2日~3日に開催! | メイン | 【AWS発表】 Amazon DynamoDBが東京リージョンで利用可能に »

【AWS発表】 Amazon SimpleWorkflow - クラウドベースのワークフロー管理サービス

今回の発表は、Amazon Simple Workflow、略してSWFという新サービスです!このサービスは、複数のシステム(クラウドのシステムであれ、オンプレミスのものであれ)に分散した耐障害性の高いアプリケーションを構築することを可能にするサービスです。 Amazon Simple Workflowは、同期型、非同期型のタスク(論理的なアプリケーションのステップ)のフローをコントロールするサービスです。このサービスを使うことにより、ユーザーは、インフラではなく、ビジネスやアプリケーションに集中することができます。

SWF登場の背景
AWSは、分散型で耐障害性の高いクラウドアプリケーションの作成をより簡単にしたいと常に考えています。AWSの内部でそのようなシステムを分散型アプリを構築してきた経験から、次のようなことを学んできました。

  1. アプリケーションは大抵の場合ワークフローを含む -- この場合、一連のステップが定義された順番で行われる必要があり、意思決定や特殊なケースの扱いのために、ワークフローを調整するが多々あります。
  2. ワークフローは多くの場合ビジネスプロセスを表現している - 例えば、人気Eコマースサイトの例をみてみましょう。クレジットカードへのチャージ、注文履歴の更新、配送される商品の調整、商品の配送、配送状況のトラック、在庫の補充、返送品の扱い、などなどがあります。
  3. ビジネスプロセスは複雑である - 数年ほど前、Amazon.co.jpでの一つの注文は、完了するまでに40以上のステップを経ている、と聞いたことがあります。最近はさらに複雑になっているに違いありません。
  4. 柔軟性が大事 - これまでのワークフローソリューションは、柔軟性が無いことが課題でした。
  5. 簡単に使えることが必要 - こういったアプリケーションを、特殊なスキルを学習することなく、設計、実装できるとどれだけ便利でしょうか。

Simple Workflowを利用することで、既存のビジネスプロセス(注文の処理や従業員の新規追加など)だけでなく、例えば、複雑なマルチティア・アプリケーションや、マルチプレイヤー型オンラインゲームの意思決定プロセスの処理、といった多種のワークフローをより簡単に取扱うことができます。

用語集とサンプル

ここで、幾つかの用語を定義しましょう。

  • ワークフロー (Workflow)は、ビジネスプロセスを自動化したもの。
  • ドメイン (Domain)は、関連するワークフローをまとめる概念です。
  • アクション (Action)は、ワークフローを実行するのに行われる個別のタスクです。
  • アクティビティワーカー (Activity Worker)は、タスクを実際に実行するものです(コードの集合)。各種のワーカーはアクションタイプ (Activity Type)を持ちます。
  • ディサイダー (Decider)は、ワークフローを調整するロジックを持ちます。

ここで、画像処理のワークフローを例とって、タスクを考えてみます。

  1. アップロードしたファイルの受付け
  2. Amazon S3へのファイル保存
  3. ファイルフォーマットとサイズの確認
  4. 画像の分類にAmazon Mechanical Turkを利用
  5. もし画像が受け入れられない者の場合は、Amazon SESを用いてエラーメッセージを送付し、ワークフローを終了
  6. もし画像が受け入れ可能であれば、会計システムでユーザーの残高照会
  7. EC2インスタンスを起動
  8. EC2インスタンスの準備を待ち設定する(キー、パッケージ等)
  9. 画像をPNGフォーマットに変換し、イメージのサムネイルを作成
  10. PNG画像とサムネイルをS3にアップロード
  11. 会計システムでユーザーの残高を調整
  12. 適切なデータベースにエントリーを作成する
  13. Amazon SESを用いて、ユーザーに通知メッセージを送る

1から13のステップがワークフローです。各タスクはアクションと呼びます。各アクションを実装したコードが、特定のアクティビティワーカーの中に埋め込まれます。

ワークフローのディサイダーは、タスクからタスクへの実行フローをコントロールするのにつかわれます。上記の場合は、ステップ4(Mechanical Turk)から、ステップ5(SES)もしくはステップ6(残高照会)のところで、判断に使われています。

Simple Workflowは何をしてくれるのか?
Simple Workflowは、上記のようなワークフローを実装するためのインフラストラクチャを提供します。Simple Workflowは下記の機能を提供します(下記以外の機能もあります!)。

  • ワークフローと各部品についてのメタデータを保存します
  • ワーカーのためのタスクを保存し、ワーカーがそれを必要とするまでキューイングします
  • タスクをワーカーにアサインします
  • ワークフローの実行と、関連するワーカーの間で、情報をルーティングします
  • タスクにおけるワーカーの進行状況をトラックし、タイムアウト設定も可能です
  • 冗長的にワークフローの状態を維持します

ワーカーとディサイダーはステートレスなので、急増するトラフィックに対しても、必要に応じて、単純に追加のワーカーとディサイダーを追加できます。これはもちろん、AWSクラウドのAmazon EC2インスタンスを用いている場合は、Auto Scalingを用いることで追加や削減を容易に行えるでしょう。

ワーカーやディサイダーはどのようなプログラミング言語で書くこともできます。そして、それをクラウドに稼働することも(Amazon EC2インスタンスなど)、オンプレミスのデータセンターでも、場合によってはみなさんのデスクトップコンピュータでも構いません!ワーカーとしては単純に、Simple Workflowのタスクをポーリングして、それをとってきて、実行した結果を戻すだけです。言い換えれば、コードそのものはどこで走らせていても、Amazon Simple WorkflowのHTTPSのエンドポイントを見ることができさえすれば良いのです。これによって、既存のオンプレミスのシステムを、容易に、新しいクラウドベースのワークフローにつなぎ込む柔軟性を手に入れられます。Simple Workflowは、"ロングポーリング (long polling)"を用いて、ネットワークトラフィック削減し不必要な処理量を減らすことも可能です。Simple Workflowが、リクエストからタスクが発生するまでレスポンスを返すのを60秒まで保留することができます。

ディサイダーの中身
ディサイダーのコードは単純に、判断部分においてSimple Workflowをポーリングし、その判断を行い、次のステップへすすめます。 コードからは、判断において必要なすべての情報にアクセスできます。ワークフローの種類やワークフローの中で事前に行われたステップの履歴などが取得できます。またディサイダーは追加のデータをワークフローに付加することも可能です。

ワーカーの中身
ワーカーの中のコードも、単純にSimple Workflowをポーリングして行うべき仕事を取得します。一つ以上のタスクリストをポールすることができるので、ワーカーは複数の種類のワークフローに参加することもできます。タスクリストから仕事をとり、それを処理し、ワークフローのステータスを更新し、次のタスクにとりかかります。長く時間のかかるタスクを行う場合は、ワーカーはハートビートをSimple Workflowに更新することもできます。ディサイダーは、監査目的やチェックのために、ワークフローの実行履歴にマーカーを挿入することも可能です。

タイムアウト、シグナル
Simple Workflowはワークフローの正常に実行されるように、タイムアウトを用いることができます。 各種のタイムアウトがあります。

  • Workflow Start to Close - 実行にかかる時間
  • Decision Task Start to Close - ディサイダーが判断するのにかかる時間
  • Activity Task Start to Close - アクティビティワーカーがタスクを処理するのにかかる時間
  • Activity Task Heartbeat - アクティビティワーカーがステータス更新を行わないまでの時間
  • Activity Task Schedule to Start - もしタスクを実行するワーカーがいないときに、Simple Workflowがタイムアウトするまでどらくらいの時間待つか
  • Activity Task Schedule to Close - タスクがスケジュールされてからそれが完了するまで、Simple Workflowがタイムアウトするまでどらくらいの時間待つか

シグナルは、実行しているワークフローに情報を提供するのにつかわれます。ワークフローをキャンセルしたり、必要なデータが準備できていることを知らせたり、緊急の際に情報を提供する、といったことに使えます。各シグナルは、ワークフローの実行履歴に追加され、ワークフローのディサイダーは次に何を行うかコントロールできます。

Simple Workflowは、ワークフローがスタックするのをタイムアウトを用いることで、予定通りに実行されるようにします。

はじめてみよう
Amazon Simple Workflowをはじめてみるには下記の手順をとります。

  1. ご希望のプログラミング言語でワーカーを記述します
  2. ディサイダーを書きます(ご希望の言語で!)
  3. ワークフローとアクティビティを登録します
  4. ワーカーとディサイダーをご希望のホストで走らせます(Simple Workflowのエンドポイントが見えるホスト であれば何でも)
  5. ワークフローの実行を開始します
  6. ワークフローの進行状況をAWS Management Consoleで監視します

AWS Flow Framework
Amazon Simple Workflowをより簡単に扱えるように、AWS SDK for JavaはAWS Flow Frameworkに対応しています。 このフレームワークはタスク調整の詳細を抽象化する多種の部品をを含んでいます。例えば、Futureに基づいたプログラミングモデルを用いることで、タスク間の依存を扱うことができます。ワーカーのタスクを起動するのは、関数コールと同じように簡単に取り扱え、フレームワークがワーカーとディサイダーのタスクをケアしてくれます。

AWS Management Consoleのサポート
AWS Management Consoleは、Amazon Simple Workflowを完全にサポートしています。こちらが、メインページからのスタート画面です。

ワークフロードメインの登録。

ワークフロードメインに対して、ワークフローを登録します。

ワークフローの中にアクティビティを登録します。

ワークフローの実行を開始設定をします。

実行の際の入力データをインプットします。

与えられたワークフローで現在実行しているものを見ます。

Simple WorkflowのAPI基礎
ワークフロー、ワーカー、ディサイダーの作成もいくつかのSimple Workflow APIで行えます。

  • ワークフローの登録 - RegisterDomain、RegisterWorkflowType、RegisterActivityTypeコールが用意されています。

  • ディサイダーとワーカーの実装 - PollForDecisionTask、RespondDecisionTaskCompleted、PollForActivityTask、RespondActivityTaskCompletedコールが用意されています

  • ワークフローの開始 - StartWorkflowExecutionコールが用意されています

詳細は、Amazon Simple Workflow API Referenceをご参照ください。

料金

他のサービスと同様、Amazon Simple Workflowも安価な従量課金で提供しています。最初にはじめるのは無料です。毎月1,000ワークフロー、10,000タスク、合計で 30,000 ワークフロー・日、利用できます(1日に1ワークフローがアクティブな場合、1ワークフロー・日となります)。

それを超えた場合は、下記の3つの観点で料金が計算されます。

  • 実行 - ワークフローの1実行あたり、$0.0001で、 24時間以上アクティブになっている場合は追加で$0.000005かかります。
  • タスク、タイマー、シグナル、マーカー - 各タスクの実行、タイマー、シグナル、マーカーあたり $0.000025。
  • 帯域 - 通常のAWSの利用料金が加算されます。

いかがでしょうか?現在は東京リージョンは使えず、米国東リージョンのみとなっていますが、日本からも使えるので是非使ってみてください!

玉川憲 (@KenTamagawa)

 

 

コメント

トラックバック

この記事のトラックバックURL:
http://www.typepad.com/services/trackback/6a00d8341c534853ef0168e5ff949a970c

【AWS発表】 Amazon SimpleWorkflow - クラウドベースのワークフロー管理サービスを参照しているブログ:

Featured Event

2016年3 月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31