全部產品
Search
文件中心

CloudFlow:任務(Task)

更新時間:Jan 28, 2025

您可以使用任務(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種任務類型,具體類型描述細節參考服務整合模式

  • RequestComplete

  • WaitForCustomCallback

  • WaitForSystemCallback

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執行逾時的通知。

image