Amazon SWF タイムアウトの種類 - Amazon Simple Workflow Service

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

Amazon SWF タイムアウトの種類

ワークフロー実行を正しく行うため、Amazon SWF では異なる種類のタイムアウトを設定できます。一部のタイムアウトでは、ワークフローが完全に実行できる時間を指定します。その他のタイムアウトでは、ワーカーに割り当てる前にアクティビティタスクを実行できる時間と、スケジュールされてから完了までにかけることができる時間を指定します。Amazon SWF API のすべてのタイムアウトは秒単位で指定されます。Amazon SWF は、タイムアウト値として文字列 NONE もサポートしています。これは、タイムアウトがないことを示します。

決定タスクとアクティビティタスクに関連するタイムアウトの場合、Amazon SWF はワークフロー実行履歴にイベントを追加します。イベントの属性により、発生したタイムアウトの種類と、影響を受けた決定タスクまたはアクティビティタスクに関する情報が提供されます。Amazon SWF は決定タスクもスケジュールします。ディサイダーは、新しい決定タスクを受け取ると、履歴でタイムアウトイベントを確認し、RespondDecisionTaskCompleted アクションを呼び出して適切なアクションを実行します。

タスクは、スケジュールされてからクローズされるまではオープン状態と見なされます。したがって、ワーカーの処理中はタスクはオープン状態と報告されます。タスクは、ワーカーによって完了済みキャンセル済み、または失敗と報告されるとクローズされます。タスクは、タイムアウトの結果として Amazon SWF によってクローズされる場合もあります。

ワークフローと決定タスクのタイムアウト

次の図は、ワークフローと決定のタイムアウトがワークフローの有効期間にどのように関係するかを示しています。


               ワークフローの有効期間とタイムアウト

ワークフローと決定タスクに関連して 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 を使用してタイムアウトした決定タスクを完了する試みは失敗します。

アクティビティタスクのタイムアウト

次の図は、タイムアウトがアクティビティタスクの有効期間にどのように関係するかを示します。


               タスクの有効期間とタイムアウト

アクティビティタスクに関連して 4 つのタイムアウトの種類があります。

  • アクティビティタスクのスタートからクローズ (timeoutType: START_TO_CLOSE) – このタイムアウトは、ワーカーがタスクを受け取った後でアクティビティワーカーがタスクを処理するためにかかる最大時間を指定します。RespondActivityTaskCanceledRespondActivityTaskCompleted、および RespondActivityTaskFailed を使用してタイムアウトしたアクティビティタスクを閉じる試みは失敗します。

  • アクティビティタスクのハートビート (timeoutType: HEARTBEAT) – このタイムアウトは、RecordActivityTaskHeartbeat アクションを通じて進捗状況を提供する前にタスクが実行できる最大時間を指定します。

  • アクティビティタスクのスケジュールからスタート (timeoutType: SCHEDULE_TO_START) – このタイムアウトは、タスクを実行するワーカーを利用できない場合に、Amazon SWF がアクティビティタスクをタイムアウトするまでに待機する時間を指定します。タイムアウトした期限切れのタスクは、別のワーカーに割り当てられません。

  • アクティビティタスクのスケジュールからクローズ (timeoutType: SCHEDULE_TO_CLOSE) – このタイムアウトは、タスクがスケジュールされてから完了するまでにかかる時間を指定します。ベストプラクティスとして、この値は、タスクのスケジュールからスタートまでのタイムアウトと、タスクのスタートからクローズまでのタイムアウトの合計よりも大きくしないでください。

注記

タイムアウトの種類ごとにデフォルト値があり、通常は NONE (無限) に設定されます。ただし、すべてのアクティビティの実行の最大時間は 1 年に制限されます。

アクティビティの種類を登録するときにこれらのデフォルト値を設定しますが、アクティビティタスクをスケジュールするときに新しい値でオーバーライドできます。これらのタイムアウトのいずれかが発生すると、Amazon SWF は ActivityTaskTimedOut 型の イベント をワークフロー履歴に追加します。このイベントの timeoutType 値属性では、これらのタイムアウトがいつ発生するかを指定します。それぞれのタイムアウトで、timeoutType の値は括弧内に示されます。イベントの属性には、アクティビティタスクがスケジュールされた日時 (scheduledEventId) およびスタートされた日時 (startedEventId) に対応するイベントの ID も含まれます。Amazon SWF は、イベントの追加に加えて、このタイムアウトが発生したことをディサイダーにアラートする新しい決定タスクをスケジュールします。