本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將條件式邏輯新增至 Step Functions 工作流程
在上一個主題中整合服務,您整合了 Lambda 函數。在本主題中,您將設定中的 if-else 條件。Choice state
選擇狀態會根據特定條件決定工作流程執行路徑。
您將新增邏輯,以根據 RandomNumberforCredit
Lambda 函數傳回的已套用信用金額來選擇路徑。如果該值在臨界值限制內,則信用申請將自動獲得批准,並進入下一個步驟。如果該值超過臨界值限制,則工作流程將需要人工核准才能繼續工作流程。
您可以暫停工作流程執行,直到傳回任務 Token 為止,模仿人工互動步驟。要做到這一點,你會傳遞一個任務令牌 AWS SDK與 Amazon 簡單通知服務集成。工作流程執行將暫停,直到通過SendTaskSuccess
API呼叫收到任務 Token 返回為止。如需使用工作 Token 與其他服務整合的相關資訊,請參閱 使用任務令牌等待回調 in 服務整合模式。
建立原型狀態機器時,您定義了人工核准和自動核准步驟。現在,您必須創建一個接收回調令牌的 Amazon SNS 主題。然後,您可以建立 Lambda 函數來實作回呼功能。最後,您可以通過添加這些詳細信息來更新您的工作流程原型 AWS 服務 整合。
步驟 1:創建一個接收回調令牌的 Amazon SNS 主題
若要實作人工互動步驟,您將發佈到 Amazon 簡單通知服務主題,並將回呼任務 Token 傳遞給此主題。回呼工作將暫停工作流程執行,直到傳回包含有效負載的工作 Token 為止。
-
開啟 Amazon 主SNS控台
並建立標準主題類型。如需建立主題的相關資訊,請參閱 Amazon 簡單通知服務開發人員指南中的建立 Amazon SNS 主題。 -
將主題名稱指定為
TaskTokenTopic
。 -
確保複製主題ARN並將其保存在文本文件中。指定 [等待人工核准] 狀態的服務整合ARN時,您將需要這個主題。以下是範例主題ARN:
arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
-
為主題建立以電子郵件為基礎的訂閱,然後確認您的訂閱。如需訂閱主題的相關資訊,請參閱 Amazon 簡單通知服務開發人員指南中的建立主題訂閱。
第 2 步:創建一個 Lambda 函數來處理回調
若要處理回呼功能,您將定義 Lambda 函數,並將您在步驟 1 中建立的 Amazon SNS 主題新增為此函數的觸發程序。當您使用任務權杖發佈到 Amazon SNS 主題時,會使用已發佈訊息的承載叫用 Lambda 函數。
步驟 2.1:創建 Lambda 函數來處理回調
在此功能中,您將處理信用額度核准請求,並在SendTaskSuccess
API通話中成功傳回要求的結果。此 Lambda 函數還將返回從 Amazon SNS 主題收到的任務令牌。
為了簡單起見,用於人工互動步驟的 Lambda 函數會自動核准任何工作,並透過SendTaskSuccess
API呼叫傳回任務 Token。您可以將 Lambda 函數命名為callback-human-approval
。
-
在新索引標籤或視窗中,開啟 Lambda 主控台
並建立標題為的 Node.js Lambda 函數 callback-human-approval
。如需使用主控台建立 Lambda 函數的詳細資訊,請參閱在主控台中建立 Lambda 函數 AWS Lambda 開發人員指南。 -
在callback-human-approval頁面上,以下列程式碼取代 [程式碼原始碼] 區域中的現有程式碼。
// Lambda function that will automatically approve any task // in a message published to an Amazon SNS topic console.log('Loading function'); const AWS = require('aws-sdk'); const resultMessage = "Successful"; export const handler = async (event) => { const stepfunctions = new AWS.StepFunctions(); let message = JSON.parse(event.Records[0].Sns.Message); let taskToken = message.TaskToken; console.log('Message received from SNS:', message); console.log('Task token: ', taskToken); // Return task token to Step Functions let params = { output: JSON.stringify(resultMessage), taskToken: taskToken }; console.log('JSON Returned to Step Functions: ', params); let myResult = await stepfunctions.sendTaskSuccess(params).promise(); console.log('State machine - callback completed..'); return myResult; };
-
保持此視窗開啟,並執行下一節中的步驟,以進行進一步的動作。
步驟 2.2:將 Amazon 主SNS題添加為 Lambda 函數的觸發器
當您使用任務權杖發佈到 Amazon SNS 主題時,會使用已發佈訊息的承載叫用 Lambda 函數。如需有關為 Lambda 函數設定觸發器的詳細資訊,請參閱中的設定觸發器 AWS Lambda 開發人員指南。
-
在
callback-human-approval
Lambda 函數的 [函數概觀] 區段中,選擇 [新增觸發器]。 -
從觸發器的下拉式清單中,選擇SNS作為觸發器。
-
對於SNS主題,請開始鍵入您在本教程的步驟 1 中創建的 Amazon SNS 主題的名稱,然後從出現的下拉列表中選擇它。
-
選擇新增。
-
保持此視窗開啟,並執行下一節中的步驟,以進行進一步的動作。
步驟 2.3:提供必要的權限給 Lambda 函數IAM角色
您必須向 callback-human-approval
Lambda 函數提供權限,才能存取 Step Functions 數,以便傳回任務權杖以及SendTaskSucess
API呼叫。
-
在callback-human-approval頁面上,選擇 [組態] 索引標籤,然後選擇 [權限]。
-
在「執行角色」下,選擇「角色」名稱以導覽至 AWS Identity and Access Management 主控台的 [角色] 頁面。
-
若要新增必要的權限,請選擇 [新增權限],然後選擇 [附加原則]。
-
在搜尋方塊中輸入,
AWSStepFunctions
然後按 Enter 鍵。 -
選擇AWSStepFunctionsFullAccess然後向下捲動以選擇 [附加原則]。這會新增包含
callback-human-approval
Lambda 函數角色必要權限的原則。
第 3 步:更新工作流-添加 if-else 條件邏輯在選擇狀態
在「Step Functions」主控台中,使用Choice
狀態為工作流程定義條件式邏輯。如果 RandomNumberforCredit
Lambda 函數傳回的輸出小於 5000,則會自動核准要求的點數。如果傳回的輸出大於或等於 5000,則工作流程執行會繼續進行信用額度核准的人工互動步驟。
在Choice
狀態下,您可以使用比較運算子來比較輸入變數與特定值。您可以在啟動狀態機器執行時將輸入變數指定為執行輸入,或使用前一個步驟的輸出作為目前步驟的輸入。默認情況下,一個步驟的輸出存儲在一個名為的變量Payload
。若要在Choice
狀態中使用Payload
變數的值進行比較,請使用下列程序所示的$
語法。
有關資訊如何從一個狀態流向另一個狀態,以及如何在工作流程中指定輸入和輸出的資訊,請參閱配置輸入和輸出和處理輸入和輸出。
注意
如果狀Choice
態使用狀態機器執行輸入中指定的輸入變數進行比較,請使用$.variable_name
語法來執行比較。例如,若要比較變數,例如myAge
,請使用語法$.myAge
。
因為在這個步驟中,Choice
狀態會從 [取得信用額度] 狀態接收輸入,所以您將使用Choice
狀態設定的$
語法。若要探索當您使用狀態組態中的$.variable_name
語法來參照前述步驟的輸出時,Choice
狀態機器執行的結果有何不同,請參閱教學課程 8 中的偵錯無效路徑選擇狀態錯誤章節。
若要使用狀態新增 if-else 條件邏輯 Choice
-
開啟包含您在中建立之工作流程原型的「Step Functions」主控台
視窗建立狀態機器。 -
選擇已套用的信用額度大於等於 5000? state 並在「組態」索引標籤中,指定條件式邏輯,如下所示:
-
在「選擇規則」下,選擇「規則 #1」圖標中的「編輯」 圖示,以定義第一個選擇規則。
-
選擇新增條件。
-
在「規則 #1 的條件」對話方塊中,對於「變數」,輸入
$
。 -
對於「運算子」,選擇小於。
-
對於「值」,請選擇「數字常數」,然後
5000
在「值」下拉式清單旁邊的欄位中輸入。 -
選擇 [儲存條件]。
-
對於「然後」下一個狀態為:下拉式清單,請選擇「自動核准限制」。
-
選擇「新增選擇規則」,然後在貸方金額大於或等於 5000 時,透過重複子步驟 2.b 到 2.f 來定義第二個選擇規則。對於「運算子」,請選擇「大於」或「等於」。
-
對於「然後」下一個狀態為:下拉式清單,請選擇「等待人工核准」。
-
在 [預設規則] 方塊中,選擇 [編輯] 圖示以定義預設選擇規則,然後從 [預設狀態] 下拉式清單中選擇 [等待人工核准]。如果沒有任何「選擇」狀態條件評估為 true 或 false,您可以定義「預設」規則,以指定要轉換到的下一個狀態。
-
-
設定 [等待人工核准] 狀態,如下所示:
-
在組態索引標籤中,對於主題,開始輸入 Amazon SNS 主題的名稱 TaskTokenTopic,然後選擇下拉式清單中顯示的名稱。
-
對於「訊息」,從下拉式清單中選擇「輸入訊息」。在訊息欄位中,您可以指定要發佈到 Amazon SNS 主題的訊息。在本教學課程中,您會將工作 Token 發佈為訊息。
工作 Token 可讓您暫停標準類型 Step Functions 工作流程,直到外部處理程序完成並傳回工作 Token 為止。當您透過指定.waitForTaskToken服務整合模式將 T ask 狀態指定為回呼任務時,會產生任務 Token,並在任務啟動時將其放置在前後關聯物件中。前後關聯物件是可在執行期間使用的內部JSON結構,其中包含有關您的狀態機器及其執行的資訊。如需前後關聯物件的詳細資訊,請參閱內容物件。
-
在出現的方塊中,輸入以下內容作為訊息:
{ "TaskToken.$": "$$.Task.Token" }
-
選擇等待回呼核取方塊。
-
在出現的對話方塊中選擇「完成」。
-
-
保持此視窗開啟,並繼續進行下一個主題。
後續步驟
在下一個主題中,定義 parallel 工作您將學習如何 parallel 行執行多項工作。