使用 AmazonSQS,Amazon SNS 和 Lambda 創建回調模式示例 - AWS Step Functions

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

使用 AmazonSQS,Amazon SNS 和 Lambda 創建回調模式示例

這個示例項目演示了如何擁有 AWS Step Functions 在工作期間暫停,並等待外部處理序傳回工作開始時產生的工作 Token。

當這個範例專案部署完成且開始執行後,便會發生下列步驟。

  1. Step Functions 會將包含任務權杖的訊息傳遞至 Amazon 簡單佇列服務 (AmazonSQS) 佇列。

  2. Step Functions 然後暫停,等待返回該令牌。

  3. Amazon SQS 隊列觸發 AWS Lambda 使用相同任務令牌調SendTaskSuccess用的函數。

  4. 當收到該任務字符時,工作流程就會繼續進行。

  5. "Notify Success"任務發布 Amazon 簡單通知服務(AmazonSNS)消息,說明已收到回調。

若要瞭解如何在 Step Functions 式中實作回呼模式,請參閱使用任務令牌等待回調

有關如何進一步了解 AWS Step Functions 可以控制其他 AWS 服務,請參閱整合服務與 Step Functions

步驟 1:建立狀態機

  1. 開啟 Step Functions 主控台,然後選擇建立狀態機器

  2. Callback pattern example在搜尋方塊中輸入,然後從傳回的搜尋結果中選擇「回呼」模式範例

  3. 選擇 Next (下一步) 繼續。

  4. 選擇 [執行示範] 以建立唯讀和 ready-to-deploy 工作流程,或選擇 [在其上建置] 建立可編輯的狀態機定義,您可以在其上建置並稍後進行部署。

    此範例專案會部署下列資源:

    • Amazon SQS 消息隊列。

    • 呼叫 Step Functions 函數API動作的 Lambda 函數SendTaskSuccess

    • 一個 Amazon SNS 主題,用於通知任務成功或失敗,指示工作流程是否可以繼續。

    • 同時 AWS Step Functions 狀態機器

    • 相關 AWS Identity and Access Management (IAM) 角色

    下圖顯示了回呼模式範例範例專案的工作流程圖形:

    「管理批次工作」工作流程的說明圖表。
  5. 選擇「使用範本」繼續進行選取。

下一步取決於您之前的選擇:

  1. 執行示範 — 您可以先檢閱狀態機器,然後再建立唯讀專案,其中資源部署者 AWS CloudFormation 到您的 AWS 帳戶.

    您可以檢視狀態機器定義,當您準備就緒時,請選擇 [部署並執行] 以部署專案並建立資源。

    部署最多可能需要 10 分鐘的時間來建立資源和權限。您可以使用「堆疊 ID」連結來監控進度 AWS CloudFormation.

    部署完成後,您應該會在控制台中看到新的狀態機器。

  2. 建立在其上 — 您可以檢閱和編輯工作流程定義。您可能需要在範例專案中設定預留位置的值,然後才能嘗試執行自訂工作流程。

注意

部署到您帳戶的服務可能需要支付標準費用。

步驟 2:運行狀態機

  1. 在 [狀態電腦] 頁面上,選擇您的範例專案。

  2. 在範例專案頁面上,選擇 [開始執行]。

  3. 在 [開始執行] 對話方塊中,執行下列動作:

    1. (選擇性) 輸入自訂執行名稱,以覆寫產生的預設值。

      非ASCII名稱和記錄

      Step Functions 接受包含非ASCII字元的狀態機器、執行項目、活動和標籤的名稱。由於此類字元不適用於 Amazon CloudWatch,因此我們建議您僅使用ASCII字元,以便在中追蹤指標 CloudWatch。

    2. (選擇性) 在「入」方塊中,將輸入值輸入為JSON。如果您正在運行演示,則可以跳過此步驟。

    3. 選擇 Start execution (開始執行)

    「Step Functions」主控台會將您導向「執行詳細資訊」頁面,您可以在其中選擇「圖形」檢視中的狀態,以瀏覽步驟詳情窗格中的相關資訊。

    例如,若要檢閱 Step Functions 如何在工作流程中進行,並從 Amazon 接收回呼SQS,請檢閱事件表格中的項目。下圖顯示「通知成功」步驟的執行輸出。它還顯示執行事件歷史記錄中的前五個事件。展開每個事件以檢視有關該事件的更多詳細資料。

    「通知成功」步驟的執行輸出摘錄,顯示五個事件。

Lambda 回調示例

若要查看此範例專案的元件如何協同運作,請參閱您的中部署的資源 AWS 帳戶。例如,以下是使用工作權杖呼叫 Step Functions 數的 Lambda 函數。

console.log('Loading function'); const aws = require('aws-sdk'); exports.lambda_handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };