Amazon SWF の紹介 - Amazon Simple Workflow Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon SWF の紹介

より多くのアプリケーションが非同期の分散処理に頼るようになっています。そのようなアプリケーションの拡張性がこの方法を使用する主な理由です。独立した分散コンポーネントを設計することにより、アプリケーションの不可が増大する場合に、開発者はアプリケーションの一部を独立してデプロイおよびスケールアウトできる柔軟性を持つことになります。もう 1 つの理由は、クラウドサービスの可用性です。アプリケーション開発者がクラウドコンピューティングを活用し始めると、既存のオンプレミスアセットを追加のクラウドベースのアセットに組み合わせる必要があります。非同期の分散手法を活用するもう 1 つの理由は、アプリケーションによりモデル化されるプロセスに固有の分散性です。たとえば、オーダーフルフィルメントビジネスプロセスの自動化には、いくつものシステムおよび人間によるタスクが必要かもしれません。

そのようなアプリケーションを開発するのは複雑です。複数の分散コンポーネントの実行を調整し、リモート通信につきものの増加するレイテンシーおよび信頼性のなさに対処する必要があります。これを実現するためには、通常、メッセージキューおよびデータベースを含む複雑なインフラストラクチャに加えて、それらを同期するための複雑なロジックを記述する必要があります。

The Amazon Simple Workflow Service (Amazon SWF) では、分散コンポーネントを調整し実行状態を信頼できる方法で維持するためのプログラミングモデルおよびインフラストラクチャが提供されることで、非同期分散アプリケーションの開発が容易になります。Amazon SWF に頼ることで、アプリケーションを差別化する側面の構築に集中することができます。

シンプルなワークフローの概念

Amazon SWF のワークフローを理解するのに必要な基本概念を以下に紹介します。このガイドの続くセクションでもさらに説明されます。次の説明は、ワークフローの構造とコンポーネントの概要です。

Amazon SWF の基本概念はワークフローです。ワークフローは、目標を実現する一連のアクティビティ、および、そのアクティビティを調整するロジックです。例えば、ワークフローはお客様からの注文を受け、それを実現するために必要なアクションを実行することができます。各ワークフローは、ドメイン と呼ばれる AWS リソースで実行され、ワークフローのスコープを制御します。 AWS アカウントは複数のドメインを持つことができ、それぞれに複数のワークフローを含めることができますが、異なるドメインのワークフローは連動できません。

Amazon SWF ワークフローを設計するときは、それぞれの必要なアクティビティを正確に定義します。それから、Amazon SWF でアクティビティタイプとして各アクティビティを登録します。アクティビティを登録する際、名前やバージョン、および、アクティビティの継続時間の予想に基づくタイムアウト値などの情報を提供します。たとえば、注文は 24 時間以内に発送されると顧客が期待する場合があります。そのような期待はアクティビティの登録時に指定するタイムアウト値の情報になります。

ワークフロー実行のプロセス中、いくつかのアクティビティは、おそらく入力内容を変えて、何度も実行する必要があります。たとえば、顧客注文ワークフローで、購入された項目を処理するアクティビティがあります。顧客が複数の項目を購入すると、このアクティビティは複数回実行する必要があります。Amazon SWF には、アクティビティの 1 回の呼び出しを表すアクティビティタスクの概念があります。この例では、各項目の処理は 1 つのアクティビティタスクによって表されます。

アクティビティワーカーは、アクティビティタスクを受け取り、実行し、結果を返すプログラムです。タスク自体は人によって実行されるかもしれません。その場合は、その人がタスクの受け取りと処理のアクティビティワーカーソフトウェアを使用します。1 つの例は、統計アナリストで、一連のデータを受け取り、分析し、それから分析を送り返します。

アクティビティタスク (およびそれらを実行するアクティビティワーカー) は、同期または非同期で実行することができます。それらは、異なる地理的リージョンにある複数のコンピュータ間で分散することが可能で、または、同じコンピュータ上ですべてを実行することもできます。異なるアクティビティワーカーはさまざまなプログラミング言語で作成されており、さまざまなオペレーティングシステムで実行できます。たとえば、1 つのアクティビティワーカーをアジアにあるデスクトップコンピュータ上で実行し、別のアクティビティワーカーを北米にあるポータブルなコンピュータデバイス上で実行することができます。

ソフトウェアプログラムに含まれるワークフローの調整ロジックはディサイダーと呼ばれます。ディサイダーはアクティビティタスクのスケジューリングを行い、入力データをアクティビティワーカーに提供し、ワークフローの進行中に届くイベントを処理し、最終的に目標が達成されるとワークフローを完了し (閉じ) ます。

Amazon SWF サービスのロールは、ディサイダー、アクティビティワーカー、およびワークフローの管理者などの他の関連エンティティ間でデータを交換するための信頼性のある集中ハブとして機能することです。Amazon SWF では、各ワークフロー実行の状態も維持されるため、アプリケーションが永続的に状態を保存する必要がなくなります。

ディサイダーは、Amazon SWF からの決定タスクの受け取り、および、Amazon SWF への決定の返信により、ワークフローを指示します。決定は、ワークフローでの次のステップである 1 つまたは一連のアクションです。一般的な決定は、アクティビティタスクをスケジューリングすることです。また、アクティビティタスクの実行を遅らせるためのタイマーを設定するため、すでに進行中のアクティビティタスクのキャンセルをリクエストするため、また、ワークフローの完了 (閉じる) するためにも決定が使用されます。

アクティビティワーカーとディサイダーの両方がタスク (アクティビティタスクおよびディシジョンタスクのそれぞれ) を受け取るメカニズムは、Amazon SWF サービスのポーリングによります。

Amazon SWF は、各ディシジョンタスクに現在のワークフローの実行履歴のコピーを各ディシジョンタクスに含めることにより、ワークフローの状態をディサイダーに通知します。ワークフローの実行履歴はイベントで構成されていて、イベントはワークフローの実行状態の重要な変更を表します。イベントの例として、タスクの完了、タスクがタイムアウトした通知、または、ワークフローの実行より前設定されていたタイマーの時間切れ、などがあります。履歴は、完全で、一貫性があり、信頼性のあるワークフローの進行の記録です。

Amazon SWF アクセスコントロールは AWS Identity and Access Management (IAM) を使用します。これにより、制御および制限された方法で AWS リソースへのアクセスを提供できます。たとえば、ユーザーがアカウントへアクセスする際、特定のドメインでの特定のワークフローを実行することのみを許可することができます。

ワークフロー実行

前のセクションで説明したアイデアをひとつにまとめて、ここに Amazon SWF でワークフローを開発して実行するステップの概要を示します。

  1. ワークフローの処理ステップを実装するアクティビティワーカーを記述します。

  2. ワークフローの調整ロジックを実装するディサイダーを記述します。

  3. アクティビティとワークフローを Amazon SWF で登録します。

    このステップは、プログラムまたは を使用して実行できます AWS Management Console。

  4. アクティビティワーカーとディサイダーを開始します。

    これらのアクターは Amazon SWF エンドポイントにアクセスできる任意のコンピューティングデバイスから実行できます。例えば、Amazon Elastic Compute Cloud (Amazon EC2)、データセンターのサーバー、さらにはモバイルデバイスなどといった、クラウド内のコンピューティングインスタンスを使用して、ディサイダーまたはアクティビティワーカーをホストすることができます。起動すると、ディサイダーとアクティビティワーカーはタスクのために Amazon SWF のポーリングを開始します。

  5. ワークフローの実行を 1 つ以上開始します。

    実行はプログラムによって、または AWS Management Console で開始できます。

    各実行は独立して動作し、それぞれに独自の入力データのセットを提供できます。実行が開始すると、Amazon SWF は最初の決定タスクをスケジュールします。これに応じて、ディサイダーはアクティビティタスクを開始する決定を生成し始めます。ディサイダーが実行を閉じることを決めるまで実行は継続します。

  6. を使用してワークフロー実行を表示します AWS Management Console。

    実行の完全な詳細、また完了した実行をフィルタリングして表示できます。たとえば、オープンな実行を選択して、どのタスクが完了したか、およびその結果を確認できます。

設定

Amazon SWF の開発は、 でサポートされている任意のプログラミング言語で行うことができます AWS。Java デベロッパー AWS Flow Framework には、 も利用できます。詳細については、 AWS Flow Frameworkウェブサイト、および「 for AWS Flow Framework Java デベロッパーガイド」を参照してください。

レイテンシーを減らし、要件を満たす場所にデータを保存するために、Amazon SWF は異なるリージョンのエンドポイントを提供します。

Amazon SWF の各エンドポイントは完全に独立しています。あるリージョンに登録したドメイン、ワークフロー、アクティビティは、別のリージョンのドメイン、ワークフロー、アクティビティとデータや属性を共有しません。

Amazon SWF ドメイン、ワークフロー、またはアクティビティを登録すると、そのドメインは に登録したリージョン内にのみ存在します。例えば、SWF-Flows-1 という名前のドメインを 2 つの異なるリージョンに登録できますが、互いにデータや属性を共有することはありません。それぞれ独立したドメインとして機能します。

Amazon SWF エンドポイントのリストについては、「Regions and Endpoints」(リージョンとエンドポイント) を参照してください。