您可以使用任務(Task)狀態來調用整合服務API,完成複雜的工作流程。本文介紹任務狀態的基本概念及其相關使用樣本,指導您利用任務狀態來調用整合服務API。
基本概念
任務(Task)狀態主要用於調用其他整合服務API來完成特定任務。利用任務類型狀態可以執行一個函數調用,調用阿里雲服務API,也可以通過HTTP/HTTPS等通用協議發起第三方服務調用。在流程定義語言中,我們通過聲明State的類型為‘Task’標記目前狀態是一個任務類型的狀態。
任務狀態包含以下屬性。
欄位 | 類型 | 是否必選 | 描述 | 樣本值 |
Name | string | 是 | 狀態名稱。 | my-state-name |
Description | string | 否 | 狀態原因。 | describe it here |
Type | string | 是 | 狀態類型。 | Task |
Action | string | 是 | 用於定義工作流程中每個任務要執行的具體動作。這通常是對應某個雲端服務產品的API名稱,或者是整合服務的特定操作名稱。遵循 <產品名>:<APIName>。 | FC:InvokeFunction |
TaskMode | enum | 否 | 任務調用模式,CloudFlow提供3種任務類型,具體類型描述細節參考服務整合模式。
| WaitForCustomCallback |
InputConstructor | map[string]any | 否 | 輸入構造器。 | 請參見輸入和輸出 |
Parameters | map[string]any | 否 | 請求調用參數規範;對應Action行為定義的具體調用參數規範。 可使用常量或JsonPath進行參數賦值。 | 參數規範請參見整合簡介 |
Timeout | string | 否 | 調用最大逾時時間,單位為秒。取值範圍為[0,604800],為0表示Task永遠不會逾時。 | 30 |
支援運算式構造,您可以根據上下文動態設定該值。 | Timeout.$: $Input.timeout | |||
Retry | map[string]any | 否 | 錯誤重試策略配置。 | 請參見錯誤處理 |
Catch | map[string]any | 否 | 錯誤捕獲策略配置。 | 請參見錯誤處理 |
OutputConstructor | map[string]any | 否 | 輸出構造器。 | 請參見輸出構造器 |
Next | string | 否 | 目前狀態的下一個狀態。當End取值為true時,無需指定。 | my-next-state |
End | bool | 否 | 是否為當前範圍的終結節點。 | true |
調用樣本
調用Function Compute
通過聲明Task類型的State,利用Parameters欄位,按照Function Compute調用參數規範,指定需要調用函數的資訊,具體參數規範請參見配置調用參數。函數調用既可以通過最佳化整合方式調用,也可以直接使用對應的阿里雲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
調用阿里雲服務API
按照阿里雲OpenAPI規範,調用相應的OpenAPI。例如 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
調用外部服務並配置Task逾時以及Catch
該樣本調用一個外部的HTTP服務,整合模式為WaitForCustomCallback,並為任務配置了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: Task timed out.
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
Task逾時參數從執行輸入中擷取,可通過如下的輸入發起執行:
{
"timeout": 10
}如果Task未在規定時間內完成,則逾時錯誤會被捕獲,工作流程會繼續執行到NotifyOnTaskTimeout節點,發送一條Task執行逾時的通知。
