翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Flow Framework for Java の仕組み
AWS Flow Framework for Java は Amazon SWF と連携して、スケーラブルで耐障害性のあるアプリケーションを簡単に作成し、長時間実行、リモート、またはその両方の非同期タスクを実行できます。「Hello World!」 の例では、 を使用して基本的なワークフローアプリケーション AWS Flow Framework を実装する方法の基本AWS Flow Framework for Java とはを紹介しました。このセクションでは、 AWS Flow Framework アプリケーションの仕組みに関する概念について説明します。最初のセクションでは AWS Flow Framework アプリケーションの基本構造を要約し、残りのセクションでは AWS Flow Framework アプリケーションの仕組みについて詳しく説明します。
トピック
- AWS Flow Framework 基本概念: アプリケーション構造
- AWS Flow Framework 基本概念: 信頼性の高い実行
- AWS Flow Framework 基本概念: 分散実行
- AWS Flow Framework 基本概念: タスクリストとタスク実行
- AWS Flow Framework 基本概念: スケーラブルなアプリケーション
- AWS Flow Framework 基本概念: アクティビティおよびワークフロー間のデータ交換
- AWS Flow Framework 基本概念: アプリケーションとワークフロー実行の間の Data Exchange
- Amazon SWF タイムアウトの種類
Amazon SWF タイムアウトの種類
ワークフロー実行を正しく行うため、Amazon SWF では異なる種類のタイムアウトを設定できます。一部のタイムアウトでは、ワークフローが完全に実行できる時間を指定します。その他のタイムアウトでは、ワーカーに割り当てる前にアクティビティタスクを実行できる時間と、スケジュールされてから完了までにかけることができる時間を指定します。Amazon SWF API のすべてのタイムアウトは秒単位で指定されます。Amazon SWF は、タイムアウト値として文字列 NONE
もサポートしています。これは、タイムアウトがないことを示します。
決定タスクとアクティビティタスクに関連するタイムアウトの場合、Amazon SWF はワークフロー実行履歴にイベントを追加します。イベントの属性により、発生したタイムアウトの種類と、影響を受けた決定タスクまたはアクティビティタスクに関する情報が提供されます。Amazon SWF は決定タスクもスケジュールします。ディサイダーが新しい決定タスクを受信すると、タイムアウトイベントが履歴に表示され、 アクションを呼び出して適切なRespondDecisionTaskCompletedアクションを実行します。
タスクは、スケジュールされてからクローズされるまではオープン状態と見なされます。したがって、ワーカーの処理中はタスクはオープン状態と報告されます。タスクは、ワーカーによって完了済み、キャンセル済み、または失敗と報告されるとクローズされます。タスクは、タイムアウトの結果として Amazon SWF によってクローズされる場合もあります。
ワークフローと決定タスクのタイムアウト
次の図は、ワークフローと決定のタイムアウトがワークフローの有効期間にどのように関係するかを示しています。
![ワークフローの有効期間とタイムアウト](images/workflow_timeouts.png)
ワークフローと決定タスクに関連して 2 つのタイムアウトの種類があります。
-
ワークフローのスタートからクローズ (
timeoutType: START_TO_CLOSE
) - タイムアウトは、ワークフロー実行の完了までにかかる最大時間を指定します。これはワークフローの登録中にデフォルトとして設定されますが、ワークフローのスタート時に別の値でオーバーライドできます。このタイムアウトを超えると、Amazon SWF はワークフロー実行を終了し、タイプ のイベントWorkflowExecutionTimedOutをワークフロー実行履歴に追加します。イベント属性は、timeoutType
に加えて、このワークフロー実行に対して有効であるchildPolicy
を指定します。子ポリシーでは、親ワークフロー実行の回数がタイムアウトするか、それ以外に終了した場合に、子ワークフロー実行を処理する方法を指定します。たとえば、childPolicy
が TERMINATE に設定された場合、子ワークフロー実行は終了します。ワークフロー実行がタイムアウトすると、表示の呼び出し以外にこれに対してアクションを実行することはできません。 -
決定タスクのスタートからクローズ (
timeoutType: START_TO_CLOSE
) - このタイムアウトにより、対応するディサイダーが決定タスクを完了するまでにかかる最大時間を指定します。これはワークフロータイプの登録中に設定されます。このタイムアウトを超えると、タスクはワークフロー実行履歴でタイムアウトとしてマークされ、Amazon SWF はワークフロー履歴DecisionTaskTimedOutに タイプのイベントを追加します。イベントの属性には、この決定タスクがスケジュールされた日時 (scheduledEventId
) およびスタートされた日時 (startedEventId
) に対応するイベントの ID が含まれます。イベントの追加に加えて、Amazon SWF はこの決定タスクがタイムアウトしたことをディサイダーにアラートする新しい決定タスクをスケジュールします。このタイムアウトの発生後は、RespondDecisionTaskCompleted
を使用してタイムアウトした決定タスクを完了する試みは失敗します。
アクティビティタスクのタイムアウト
次の図は、タイムアウトがアクティビティタスクの有効期間にどのように関係するかを示します。
![タスクの有効期間とタイムアウト](images/activity_timeouts.png)
アクティビティタスクに関連して 4 つのタイムアウトの種類があります。
-
アクティビティタスクのスタートからクローズ (
timeoutType: START_TO_CLOSE
) – このタイムアウトは、ワーカーがタスクを受け取った後でアクティビティワーカーがタスクを処理するためにかかる最大時間を指定します。RespondActivityTaskCanceled、、RespondActivityTaskCompletedおよび を使用してタイムアウトしたアクティビティタスクを閉じようとすると失敗RespondActivityTaskFailedします。 -
アクティビティタスクのハートビート (
timeoutType: HEARTBEAT
) – このタイムアウトは、RecordActivityTaskHeartbeat
アクションを通じて進捗状況を提供する前にタスクが実行できる最大時間を指定します。 -
アクティビティタスクのスケジュールからスタート (
timeoutType: SCHEDULE_TO_START
) – このタイムアウトは、タスクを実行するワーカーを利用できない場合に、Amazon SWF がアクティビティタスクをタイムアウトするまでに待機する時間を指定します。タイムアウトした期限切れのタスクは、別のワーカーに割り当てられません。 -
アクティビティタスクのスケジュールからクローズ (
timeoutType: SCHEDULE_TO_CLOSE
) – このタイムアウトは、タスクがスケジュールされてから完了するまでにかかる時間を指定します。ベストプラクティスとして、この値はタスクタイムアウトとタスク schedule-to-start タイムアウトの合計より大きくすることはできません start-to-close 。
注記
タイムアウトの種類ごとにデフォルト値があり、通常は NONE
(無限) に設定されます。ただし、すべてのアクティビティの実行の最大時間は 1 年に制限されます。
アクティビティの種類を登録するときにこれらのデフォルト値を設定しますが、アクティビティタスクをスケジュールするときに新しい値でオーバーライドできます。これらのタイムアウトのいずれかが発生すると、Amazon SWF はワークフロー履歴ActivityTaskTimedOutに タイプのイベントを追加します。このイベントの timeoutType
値属性では、これらのタイムアウトがいつ発生するかを指定します。それぞれのタイムアウトで、timeoutType
の値は括弧内に示されます。イベントの属性には、アクティビティタスクがスケジュールされた日時 (scheduledEventId
) およびスタートされた日時 (startedEventId
) に対応するイベントの ID も含まれます。Amazon SWF は、イベントの追加に加えて、このタイムアウトが発生したことをディサイダーにアラートする新しい決定タスクをスケジュールします。