

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

# Amazon SWF のアクター
<a name="swf-dev-actors"></a>

**Topics**
+ [Amazon SWF のアクターとは?](#what-is-an-actor-swf)
+ [ワークフロースターター](#swf-dev-actors-starters)
+ [ディサイダー](#swf-dev-actors-deciders)
+ [アクティビティワーカー](#swf-dev-actors-activities)
+ [アクター間のデータ交換](#swf-dev-actors-dataex)

## Amazon SWF のアクターとは?
<a name="what-is-an-actor-swf"></a>

操作の過程で、Amazon SWF はさまざまな種類のプログラマティック*アクター*と対話します。アクターは[ワークフロースターター](#swf-dev-actors-starters)、[ディサイダー](#swf-dev-actors-deciders)、または、[アクティビティワーカー](#swf-dev-actors-activities)になれます。これらのアクターは API を通して Amazon SWF と通信します。任意のプログラミング言語でこれらのアクターを開発できます。

次の図は、Amazon SWF とアクターを含む Amazon SWF アーキテクチャーを示しています。

![\[Amazon SWF ワークフローにおけるさまざまなエンティティまたは「アクター」。\]](http://docs.aws.amazon.com/ja_jp/amazonswf/latest/developerguide/images/swf-overview-actors.png)


## ワークフロースターター
<a name="swf-dev-actors-starters"></a>

ワークフロースターターとは、ワークフロー実行を開始できるアプリケーションのことです。e コマースの例では、1 つのワークフロースターターはウェブサイトで、顧客はそこで注文を行います。別のワークフロースターターとしてモバイルアプリケーションやシステムがあり、カスタマーサービス担当者はそれを使用して顧客に代わって注文を行います。

## ディサイダー
<a name="swf-dev-actors-deciders"></a>

ディサイダーは、ワークフローの調整ロジックの実装です。ディサイダーは、ワークフロー実行でアクティビティタスクの流れを制御します。ワークフロー実行中に、タスクの完了などの変更が生じると、全体のワークフロー履歴を含む決定タスクがディサイダーに渡されます。ディサイダーは決定タスクを Amazon SWF から受け取ると、ワークフロー実行の履歴を分析し、ワークフロー実行の次の適切なステップを決定します。ディサイダーは、*decisions* を使用してこれらのステップを Amazon SWF に通知します。decisions とは、さまざまな次のアクションを表すことができる Amazon SWF のデータ型です。可能な決定のリストについては、「Amazon Simple Workflow Service API Reference」(Amazon Simple Workflow Service API リファレンス) の「[決定](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_Decision.html)」を参照してください。

以下に示しているのは JSON 形式の決定の例で、この形式で Amazon SWF へ伝達されます。この決定により新しいアクティビティタスクがスケジュールされます。

```
{
   "decisionType" : "ScheduleActivityTask",
   "scheduleActivityTaskDecisionAttributes" : {
      "activityType" : {
         "name" : "activityVerify",
         "version" : "1.0"
      },
      "activityId" : "verification-27",
      "control" : "digital music",
      "input" : "5634-0056-4367-0923,12/12,437",
      "scheduleToCloseTimeout" : "900",
      "taskList" : {
         "name": "specialTaskList"
      },
      "scheduleToStartTimeout" : "300",
      "startToCloseTimeout" : "600",
      "heartbeatTimeout" : "120"
   }
}
```

ディサイダーは、ワークフロー実行が開始しワークフロー実行で状態変更が発生するたびに、決定タスクを受け取ります。ディサイダーは、決定タスクを受信し、より多くの決定で Amazon SWF に応答することにより、ワークフロー実行が完了したとディサイダーが決めるまで、ワークフロー実行を進行し続けます。その時は、ワークフロー実行をクローズするようにとの決定で応答します。ワークフロー実行がクローズされた後、Amazon SWF はその実行に追加のタスクをスケジュールしません。

e コマースの例では、ディサイダーは各ステップが正しく実行されたかどうかを判断した後、次のステップをスケジュールするか、またはエラー状態を管理します。

ディサイダーは 1 つのコンピュータプロセスまたはスレッドを表します。複数のディサイダーは、同じワークフロータイプのタスクを処理できます。

## アクティビティワーカー
<a name="swf-dev-actors-activities"></a>

アクティビティワーカーは、ワークフローの一部である*アクティビティタスク*を実行するプロセスまたはスレッドです。アクティビティタスクは、アプリケーションで識別したタスクの 1 つを表します。

ワークフローでアクティビティタスクを使用するには、Amazon SWF コンソールまたは [RegisterActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html) アクションのいずれかを使用して登録する必要があります。

各アクティビティワーカーは、そのアクティビティワーカーに適切な新しいタスクに対して Amazon SWF をポーリングします。特定のタスクは特定のアクティビティワーカーでのみ実行できます。タスクを受け取ったら、アクティビティワーカーはタスクを完了するまで処理し、タスクが完了したことを Amazon SWF にレポートし結果を提供します。その後、アクティビティワーカーは新しいタスクに対してポーリングします。ワークフロー実行に関連付けられたアクティビティワーカーはこのように続き、ワークフロー実行自体が完了するまでタスクを処理します。e コマースの例では、アクティビティワーカーは、クレジットカードの処理者や倉庫の従業員などの人々により使用される独立したプロセスやアプリケーションで、プロセスの中で個々のステップを実行します。

アクティビティワーカーは 1 つのコンピュータプロセス (またはスレッド) を表します。複数のアクティビティワーカーは同じアクティビティタイプのタスクを処理できます。

## アクター間のデータ交換
<a name="swf-dev-actors-dataex"></a>

入力データはワークフロー実行が開始するときに提供できます。同様に、入力データは、アクティビティワーカーがアクティビティタスクをスケジュールするときにアクティビティワーカーに提供できます。アクティビティタスクが完了すると、アクティビティワーカーは Amazon SWF に結果を返すことができます。同様に、ディサイダーは、ワークフロー実行が完了するとワークフロー実行の結果をレポートできます。各アクターは、文字列で Amazon SWF にデータを送信する、またはそれからデータを受信することができ、文字列のフォームはユーザーが定義します。データのサイズと機密性により、データを直接渡すか、または、別のシステムやサービス (Amazon S3 または DynamoDB など) に保存されているデータへのポインタを渡すことができます。直接渡されたデータおよび別のデータ保存へのポインタのいずれも、ワークフロー実行の履歴に記録されます。ただし、Amazon SWF は履歴の一部として外部保存からのデータをコピーする、またはキャッシュすることはしません。

Amazon SWF は、入力やタスクの結果を含め、各ワークフロー実行の完全な実行状態を維持するため、すべてのアクターはステートレスにできます。結果として、ワークフロー処理はスケーラビリティに優れています。システム負荷の増加に合わせて、容量を増やすために単にアクターを追加することができます。