將條件式邏輯新增至 Step Functions 工作流程 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將條件式邏輯新增至 Step Functions 工作流程

在上一個主題中整合服務,您整合了 Lambda 函數。在本主題中,您將設定中的 if-else 條件。Choice state選擇狀態會根據特定條件決定工作流程執行路徑。

您將新增邏輯,以根據 RandomNumberforCredit Lambda 函數傳回的已套用信用金額來選擇路徑。如果該值在臨界值限制內,則信用申請將自動獲得批准,並進入下一個步驟。如果該值超過臨界值限制,則工作流程將需要人工核准才能繼續工作流程。

您可以暫停工作流程執行,直到傳回任務 Token 為止,模仿人工互動步驟。要做到這一點,你會傳遞一個任務令牌 AWS SDK與 Amazon 簡單通知服務集成。工作流程執行將暫停,直到通過SendTaskSuccessAPI呼叫收到任務 Token 返回為止。如需使用工作 Token 與其他服務整合的相關資訊,請參閱 使用任務令牌等待回調 in 服務整合模式。

建立原型狀態機器時,您定義了人工核准和自動核准步驟。現在,您必須創建一個接收回調令牌的 Amazon SNS 主題。然後,您可以建立 Lambda 函數來實作回呼功能。最後,您可以通過添加這些詳細信息來更新您的工作流程原型 AWS 服務 整合。

步驟 1:創建一個接收回調令牌的 Amazon SNS 主題

若要實作人工互動步驟,您將發佈到 Amazon 簡單通知服務主題,並將回呼任務 Token 傳遞給此主題。回呼工作將暫停工作流程執行,直到傳回包含有效負載的工作 Token 為止。

  1. 開啟 Amazon 主SNS控台並建立標準主題類型。如需建立主題的相關資訊,請參閱 Amazon 簡單通知服務開發人員指南中的建立 Amazon SNS 主題

  2. 將主題名稱指定為TaskTokenTopic

  3. 確保複製主題ARN並將其保存在文本文件中。指定 [等待人工核准] 狀態的服務整合ARN時,您將需要這個主題。以下是範例主題ARN:

    arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
  4. 為主題建立以電子郵件為基礎的訂閱,然後確認您的訂閱。如需訂閱主題的相關資訊,請參Amazon 簡單通知服務開發人員指南中的建立主題訂閱。

第 2 步:創建一個 Lambda 函數來處理回調

若要處理回呼功能,您將定義 Lambda 函數,並將您在步驟 1 中建立的 Amazon SNS 主題新增為此函數的觸發程序。當您使用任務權杖發佈到 Amazon SNS 主題時,會使用已發佈訊息的承載叫用 Lambda 函數。

步驟 2.1:創建 Lambda 函數來處理回調

在此功能中,您將處理信用額度核准請求,並在SendTaskSuccessAPI通話中成功傳回要求的結果。此 Lambda 函數還將返回從 Amazon SNS 主題收到的任務令牌。

為了簡單起見,用於人工互動步驟的 Lambda 函數會自動核准任何工作,並透過SendTaskSuccessAPI呼叫傳回任務 Token。您可以將 Lambda 函數命名為callback-human-approval

  1. 在新索引標籤或視窗中,開啟 Lambda 主控台並建立標題為的 Node.js Lambda 函數callback-human-approval。如需使用主控台建立 Lambda 函數的詳細資訊,請參閱在主控台中建立 Lambda 函數 AWS Lambda 開發人員指南

  2. 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; };
  3. 保持此視窗開啟,並執行下一節中的步驟,以進行進一步的動作。

步驟 2.2:將 Amazon 主SNS題添加為 Lambda 函數的觸發器

當您使用任務權杖發佈到 Amazon SNS 主題時,會使用已發佈訊息的承載叫用 Lambda 函數。如需有關為 Lambda 函數設定觸發器的詳細資訊,請參閱中的設定觸發器 AWS Lambda 開發人員指南

  1. callback-human-approval Lambda 函數的 [函數概觀] 區段中,選擇 [新增觸發器]。

  2. 從觸發器的下拉式清單中,選擇SNS作為觸發器。

  3. 對於SNS主題,請開始鍵入您在本教程的步驟 1 中創建的 Amazon SNS 主題的名稱,然後從出現的下拉列表中選擇它。

  4. 選擇新增

  5. 保持此視窗開啟,並執行下一節中的步驟,以進行進一步的動作。

步驟 2.3:提供必要的權限給 Lambda 函數IAM角色

您必須向 callback-human-approval Lambda 函數提供權限,才能存取 Step Functions 數,以便傳回任務權杖以及SendTaskSucessAPI呼叫。

  1. callback-human-approval頁面上,選擇 [組態] 索引標籤,然後選擇 [權限]。

  2. 在「執行角色」下,選擇「角色」名稱以導覽至 AWS Identity and Access Management 主控台的 [角色] 頁面。

  3. 若要新增必要的權限,請選擇 [新增權限],然後選擇 [附加原則]。

  4. 在搜尋方塊中輸入,AWSStepFunctions然後按 Enter 鍵。

  5. 選擇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
  1. 開啟包含您在中建立之工作流程原型的「Step Functions」主控台視窗建立狀態機器

  2. 選擇已套用的信用額度大於等於 5000? state 並在「組態」索引標籤中,指定條件式邏輯,如下所示:

    1. 在「選擇規則」下,選擇「規則 #1」圖標中的「編輯」 圖示,以定義第一個選擇規則。

    2. 選擇新增條件

    3. 在「規則 #1 的條件」對話方塊中,對於「變數」,輸入$

    4. 對於「運算子,選擇小於

    5. 對於「」,請選擇「數字常數」,然後5000在「」下拉式清單旁邊的欄位中輸入。

    6. 選擇 [儲存條件]。

    7. 對於「然後」下一個狀態為:下拉式清單,請選擇「自動核准限制」。

    8. 選擇「新增選擇規則」,然後在貸方金額大於或等於 5000 時,透過重複子步驟 2.b 到 2.f 來定義第二個選擇規則。對於「運算子」,請選擇「大於」或「等於」。

    9. 對於「然後」下一個狀態為:下拉式清單,請選擇「等待人工核准」。

    10. 在 [預設規則] 方塊中,選擇 [編輯] 圖示以定義預設選擇規則,然後從 [預設狀態] 下拉式清單中選擇 [等待人工核准]。如果沒有任何「選擇」狀態條件評估為 true 或 false,您可以定義「預設」規則,以指定要轉換到的下一個狀態。

  3. 設定 [等待人工核准] 狀態,如下所示:

    1. 組態索引標籤中,對於主題,開始輸入 Amazon SNS 主題的名稱 TaskTokenTopic,然後選擇下拉式清單中顯示的名稱。

    2. 對於「訊息」,從下拉式清單中選擇「輸入訊息」。在訊息欄位中,您可以指定要發佈到 Amazon SNS 主題的訊息。在本教學課程中,您會將工作 Token 發佈為訊息。

      工作 Token 可讓您暫停標準類型 Step Functions 工作流程,直到外部處理程序完成並傳回工作 Token 為止。當您透過指定.waitForTaskToken服務整合模式將 T ask 狀態指定為回呼任務時,會產生任務 Token,並在任務啟動時將其放置在前後關聯物件中。前後關聯物件是可在執行期間使用的內部JSON結構,其中包含有關您的狀態機器及其執行的資訊。如需前後關聯物件的詳細資訊,請參閱內容物件

    3. 在出現的方塊中,輸入以下內容作為訊息:

      { "TaskToken.$": "$$.Task.Token" }
    4. 選擇等待回呼核取方塊。

    5. 在出現對話方塊中選擇「完成」。

  4. 保持此視窗開啟,並繼續進行下一個主題。

後續步驟

在下一個主題中,定義 parallel 工作您將學習如何 parallel 行執行多項工作。