タスクの状態を使用して、統合サービスの API 操作を呼び出し、複雑なワークフローを完了できます。このトピックでは、タスクの状態について説明し、タスクの状態に関連する使用例を示します。使用例は、タスクの状態を使用して統合サービスの API 操作を呼び出すのに役立ちます。
概要
タスクの状態は、統合サービスの API 操作を呼び出してジョブを完了するために使用されます。タスクの状態を使用して、関数、Alibaba Cloud サービスの API 操作、または HTTP や HTTPS などの共通プロトコルを介したサードパーティサービスを呼び出すことができます。フロー定義言語(FDL)では、現在の状態をタスクとしてマークして、タスクの状態を示すことができます。
次の表に、タスクの状態に関連するパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 | 例 |
Name | 文字列 | はい | 状態の名前。 | my-state-name |
Description | 文字列 | いいえ | 状態の説明。 | ここに記述します |
Type | 文字列 | はい | 状態のタイプ。 | Task |
Action | 文字列 | はい | 現在のタスクで実行される操作。操作は通常、サービスの API 操作の名前、または統合サービスの操作の名前です。値の形式: <サービス名>:<API 操作名>。 | FC:InvokeFunction |
TaskMode | enum | いいえ | タスクが呼び出されるモード。CloudFlow は 3 つのモードを提供します。詳細については、「サービス統合モード」をご参照ください。
| WaitForCustomCallback |
InputConstructor | map[string]any | いいえ | 入力コンストラクター。 | 「入力と出力」トピックの InputConstructor セクションをご参照ください。 |
Parameters | map[string]any | いいえ | 呼び出しを要求されるパラメーターの仕様。仕様は操作に対応します。 パラメーターの値は定数にすることも、JSONPath 形式に従うこともできます。 | 仕様の詳細については、「概要」をご参照ください。 |
Timeout | 文字列 | いいえ | 呼び出しのタイムアウト期間。単位:秒。有効な値:0~604800。値 0 は、タスクがタイムアウトしないことを示します。 | 30 |
式を使用して、コンテキストに基づいてパラメーターを動的に構築できます。 | Timeout.$: $Input.timeout | |||
Retry | map[string]any | いいえ | エラー再試行ポリシー。 | 「エラー処理」をご参照ください。 |
Catch | map[string]any | いいえ | エラーキャプチャポリシー。 | 「エラー処理」をご参照ください。 |
OutputConstructor | map[string]any | いいえ | 出力コンストラクター。 | 詳細については、「入力と出力」トピックの OutputConstructor セクションをご参照ください。 |
Next | 文字列 | いいえ | 現在の状態が完了した後に実行される次の状態。End パラメーターの値が true の場合は、このパラメーターを空のままにします。 | my-next-state |
End | bool | いいえ | 状態が現在のスコープの終端状態かどうかを指定します。 | true |
サンプルリクエスト
Function Compute の呼び出し
state が Task タイプであることを宣言し、呼び出される Function Compute パラメーターの仕様に基づいて、Parameters セクションで呼び出される関数の情報を指定できます。パラメーター仕様の詳細については、「手順 2:呼び出しパラメーターの構成」をご参照ください。関数は、最適化された統合モードまたは Alibaba Cloud OpenAPI で呼び出すことができます。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: 同期関数呼び出しの例
States:
- Name: 同期関数呼び出しの例
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::functions/myFunction1/LATEST
invocationType: Sync
body:
key: name
Next: 非同期関数呼び出しの例
- Type: Task
Name: 非同期関数呼び出しの例
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Async
resourceArn: acs:fc:{region}:{accountID}:functions/myFunction/LATEST
body:
key: name
Next: SucceededExit
- Type: Pass
Name: SucceededExit
End: true
Alibaba Cloud サービスの API 操作の呼び出し
Alibaba Cloud OpenAPI の仕様に基づいて、対応する API 操作を呼び出します。次のサンプルコードは、ECS:DescribeInstances 操作を実行する方法を示しています。
Type: StateMachine
SpecVersion: v1
Name: MyWorkflow
StartAt: DescribeInstances
States:
- Type: Task
Name: DescribeInstances
Action: ECS:DescribeInstances
TaskMode: RequestComplete
Parameters:
RegionId: cn-hangzhou
VpcId: vpc-bp11y195luy47h8****
VSwitchId: vsw-bp1wb297ekw7xyh****
End: true
Alibaba Cloud 以外で提供されているサービスの呼び出しと、タスクのタイムアウトとキャッチの構成
次の例では、WaitForCustomCallback 統合モードを使用して HTTP サービスが呼び出されます。タスクのタイムアウト期間は 1 時間です。タスクが 1 時間以内に完了しない場合、ワークフローはエラーをスローし、Catch フィールドで指定されたルールによってキャッチされます。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: SubmitTask
States:
- Type: Task
Name: SubmitTask
Action: HTTP:Request
TaskMode: RequestComplete
Timeout.$: $Input.timeout
Parameters:
method: POST
url: https://*****
body:
taskName: fly
headers:
Content-Type: multipart/form-data
Catch:
- Errors:
- FnF.TaskTimeout
Description: 'エラーキャプチャルール #1'
Next: NotifyOnTaskTimeout
OutputConstructor:
ErrorCode: TaskTimeout
ErrorMessage: タスクがタイムアウトしました。
End: true
- Type: Task
Name: NotifyOnTaskTimeout
Action: HTTP:Request
TaskMode: RequestComplete
Parameters:
method: POST
url: https://******
body:
taskName: fly
errorCode.$: $Input.ErrorCode
errorMessage.$: $Input.ErrorMessage
headers:
Content-Type: multipart/form-data
End: true
タスクのタイムアウト期間は、実行入力から取得されます。実行入力の例:
{
"timeout": 10
}タスクが指定された時間内に完了しない場合、タイムアウトエラーがキャッチされます。ワークフローは NotifyOnTaskTimeout ノードに進み、タスクがタイムアウトしたことを通知します。
