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