Serverless 工作流程支援與多個雲端服務整合,即將其他服務作為任務步驟的執行單元。服務整合方式由FDL語言表達,在任務步驟中,您可以使用resourceArn來定義整合的目標服務,使用pattern定義整合模式。本文主要介紹了服務整合的相關內容,包括整合模式、內容物件和已整合雲端服務。
關於可使用的雲端服務列表,請參見已整合雲端服務。
整合模式
目前Serverless 工作流程支援三種不同的整合模式。
請求響應模式:調用第三方服務,在Serverless 工作流程獲得HTTP響應後進入下一個步驟。預設模式是請求響應模式。
在FDL步驟中使用
resourceArn描述目標服務,使用pattern: requestResponse(可選,若無該參數則為預設模式)描述服務整合模式。該模式下Serverless 工作流程將在調用介面返回後立刻進入到下一步驟的執行。以子流程功能(Serverless 工作流程作為被整合服務)為例。version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: requestResponse #描述服務整合模式:預設(請求響應)模式。 - type: pass name: dummy該樣本展示了當
testSubflow步驟執行時會觸發一個flowABC流程。觸發成功後,將進入下一步驟dummy,flowABC流程可能仍然正在執行。同步模式:通常這類服務提供了非同步執行介面,Serverless 工作流程調用非同步介面成功後會等待,直到相關任務完成並獲得了執行結果,Serverless 工作流程才會繼續執行下一個步驟。
對於某些整合服務,Serverless 工作流程可以等到該服務的任務運行完成後再進入下一個步驟。一般這類服務為執行某個任務提供了任務啟動(非同步)的介面,需要提交任務並等待任務執行完成再進行下一步驟。
在FDL步驟中使用
resourceArn描述目標服務,使用pattern: sync描述服務整合模式。以子流程功能(Serverless 工作流程作為被整合服務)為例。version: v1 type: flow steps: - type: task name: testTask resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: sync #描述服務整合模式:同步。 - type: pass name: dummy該樣本展示了當該步驟執行時會觸發一個Serverless 工作流程流程。觸發成功後將等待該流程的執行結果,執行完成後將進入下一步驟。當
testTask步驟執行時會觸發一個flowABC流程。觸發成功後,將等待該流程的執行結果,執行完成後才進入下一步驟dummy,flowABC流程已經執行完成。等待回調模式:調用第三方服務並傳入任務令牌,Serverless 工作流程將進入等待,直到您手動使用該令牌通知流程執行結果後才會繼續執行下一個步驟。
回調任務將使當前流程在任務調度點暫停,直到收到任務令牌的回調指令。在FDL步驟中使用
resourceArn描述目標服務,使用pattern: waitForCallback描述服務整合模式。以子流程功能(Serverless 工作流程作為被整合服務)為例。version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: waitForCallback #描述服務整合模式:等待回調。 - type: pass name: dummy該樣本展示了當
testSubflow步驟執行時會觸發一個flowABC流程。觸發成功後,將暫停流程執行,等待回調(通過ReportTaskSucceed或ReportTaskFailedAPI)。在收到回調請求並處理完成後,流程將進入下一步驟dummy。flowABC流程可能已經執行完成,也可能還在執行。其中回調是由您發起。
內容物件
內容物件是流程執行執行個體的內部JSON對象,其中包含了關於執行、步驟的相關資訊。該對象提供外部存取方式,在inputMappings中您可將context對象映射到具體變數中來實現訪問。目前開放的context對象結構如下所示。
"context": {
"flow": {
// 本流程的唯一識別碼id和流程名稱、字串類型。
"id": "val1",
"name "val2",
},
"execution": {
// 本執行的名稱。
"name": "val3"
},
"step": {
// 本步驟的名稱。
"name": "val4"
// 本步驟的事件ID。
"eventId": "val5"
// 當前迴圈的次數,在迴圈步驟(foreach)下可以使用。
"IterationIndex": "val6",
},
"task": {
// 本步驟的標識符,為一個字串,在回調模式(waitForCallback)下可以使用。
"token": "val7",
},
} 使用方式:例如整合Serverless 工作流程自身服務,需要在子流程中擷取調用其父流程的相關資訊,並擷取調用步驟的taskToken用於回調,您可以通過以下方式擷取這兩個欄位。
...
inputMappings:
- target: current_flow_name
source: $context.flow.name
- target: current_execution_name
source: $context.execution.name
- target: current_step_task_token
source: $context.task.token 已整合雲端服務
方案 | 請求響應(requestResponse) | 同步(sync) | 等待回調(waitForCallback) |
Function Compute(FC) | 支援 | 不支援 | 不支援 |
Simple Message Queue (formerly MNS)隊列觸發器 | 支援 | 不支援 | 支援 |
Simple Message Queue (formerly MNS)主題觸發器 | 支援 | 不支援 | 支援 |
Serverless 工作流程(SWF) | 支援 | 支援 | 支援 |