翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions のアクティビティについて説明します。
Step Functions アクティビティを使用すると、Step Functions の外部で実行されているワーカーが実際の作業を実行するステートマシンでタスクを設定できます。例えば、ワーカープログラムを Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Service (Amazon ECS)、またはモバイルデバイスで実行できます。
概要
In AWS Step Functionsアクティビティは、どこか (アクティビティワーカー と呼ばれる) で実行されているコードをステートマシン内の特定のタスクに関連付ける方法です。Step Functions コンソールを使用して、または CreateActivity
を呼び出すことでアクティビティを作成できます。これにより、タスク状態の Amazon リソースネーム (ARN) が提供されます。これを使用してARN、アクティビティワーカーの作業についてタスクの状態をポーリングします。
注記
アクティビティはバージョニングされず、下位互換性があることが予期されます。アクティビティ定義に下位互換性のない変更を加える必要がある場合は、一意の名前を使用して、Step Functions で新しいアクティビティを作成する必要があります。
アクティビティワーカーは、Amazon EC2インスタンスで実行されているアプリケーション、 AWS Lambda
関数、モバイルデバイス: HTTP接続を任意の場所でホストできる任意のアプリケーション。Step Functions がアクティビティタスクの状態に達すると、ワークフローはアクティビティワーカーのタスクのポーリングを待機します。アクティビティワーカーは、 を使用して Step Functions をポーリングしGetActivityTask
、関連するアクティビティARNの を送信します。 は、 input
(タスクJSONの入力文字列) と taskToken
(タスクの一意の識別子) を含むレスポンスGetActivityTask
を返します。アクティビティワーカーは作業の完了後に SendTaskSuccess
または SendTaskFailure
を使用して成功または失敗のレポートを提供します。これら 2 つの呼び出しは、GetActivityTask
によって提供される taskToken
を使用して結果をタスクと関連付けます。
APIs アクティビティタスクに関連する
Step Functions は、アクティビティAPIsの作成と一覧表示、タスクのリクエスト、ワーカーの結果に基づくステートマシンのフローの管理のために を提供します。
アクティビティに関連する Step Functions APIsを次に示します。
注記
GetActivityTask
を使用してアクティビティタスクをポーリングすると、一部の実装でレイテンシーが発生する可能性があります。「アクティビティタスクのポーリング時のレイテンシーの回避」を参照してください。
アクティビティタスクの完了を待機中
タスク定義で TimeoutSeconds
を設定して、ステートが待機する時間を設定します。タスクをアクティブおよび待機中にしておくためには、TimeoutSeconds
で設定した時間内に SendTaskHeartbeat
を使用して、アクティビティワーカーから定期的にハートビートを送信します。長いタイムアウト期間を設定し、能動的にハートビートを送信することで、Step Functions のアクティビティは実行の完了を最大で 1 年間待機できます。
例えば、長いプロセスの結果を待機するワークフローが必要な場合は、以下の操作を実行します。
-
コンソールを使用して、または
CreateActivity
を呼び出してアクティビティを作成します。アクティビティ を書き留めますARN。 -
ステートマシン定義ARNのアクティビティタスク状態の を参照し、 を設定します
TimeoutSeconds
。 -
を使用して作業をポーリングするアクティビティワーカーを実装し
GetActivityTask
、そのアクティビティ を参照しますARN。 -
ステートマシンのタスク定義の
HeartbeatSeconds
で設定した時間内に定期的にSendTaskHeartbeat
を使用して、タスクがタイムアウトしないようにします。 -
ステートマシンの実行を開始します。
-
アクティビティワーカーのプロセスを開始します。
実行はアクティビティタスクの状態で一時停止して、アクティビティワーカーのタスクのポーリングを待機します。taskToken
がアクティビティワーカーに提供されると、ワークフローはステータス提供のため SendTaskSuccess
または SendTaskFailure
を待機します。TimeoutSeconds
で設定された時間より前に、これらのいずれかまたは SendTaskHeartbeat
呼び出しを実行が受け取らない場合、実行は失敗し、実行履歴に ExecutionTimedOut
イベントが含まれることになります。
例: Ruby のアクティビティワーカー
次のアクティビティワーカーコードの例では、ポーラーとアクティビティワーカーのスレッド数を設定できるコンシューマープロデューサーパターンを実装しています。ポーラースレッドは、Step Functions でアクティビティタスクをポーリングする時間が常に長くなっています。アクティビティタスクが取得されると、アクティビティスレッドが取得する境界付きブロッキングキューを通過します。
-
詳細については、『』を参照してください。AWS SDK for Ruby API リファレンス 。
-
このコードと関連リソースをダウンロードするには、 の step-functions-ruby-activity-worker
リポジトリを参照してください GitHub。
次のコードは、この Ruby アクティビティワーカーの例の主なエントリポイントです。
require_relative '
../lib/step_functions/activity
' credentials = Aws::SharedCredentials.new region = 'us-west-2
' activity_arn = 'ACTIVITY_ARN
' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # Start method block contains your custom implementation to process the input activity.start do |input| { result: :SUCCESS, echo: input['value'] } end
アクティビティARNとリージョンを指定する必要があります。コードには、スレッド数やハートビート遅延など、設定できるデフォルトが含まれています。
項目 | 説明 |
---|---|
|
次の例のアクティビティワーカーコードへの相対パス。 |
|
AWS アクティビティのリージョン。 |
|
アクティビティワーカーのスレッドの数。ほとんどの実装では、10~20 のスレッドで十分です。アクティビティの処理に時間がかかればかかるほど、必要なスレッドが多くなります。試算するには、1 秒あたりのプロセスアクティビティの数と、99 パーセンタイルアクティビティ処理レイテンシー (秒単位) を乗算してください。 |
|
ポーラーのスレッドの数。ほとんどの実装では、10~20 のスレッドで十分です。 |
|
ハートビート間の遅延 (秒)。 |
input |
アクティビティの実装ロジック。 |
次のステップ
アクティビティワーカーを使用するステートマシンの作成の詳細については、以下を参照してください。