使用 Lambda 和輪詢工作狀態 AWS Batch - AWS Step Functions

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

使用 Lambda 和輪詢工作狀態 AWS Batch

此範例專案會建立 AWS Batch 工作輪詢員。它實現了一個 AWS Step Functions 使用的狀態機 AWS Lambda 創建一個檢查的Wait狀態循環 AWS Batch 工作。

此範例專案會建立並設定所有資源,以便您的 Step Functions 工作流程提交 AWS Batch 工作,並等待該工作完成,然後才能順利結束。

注意

您也可以在不使用 Lambda 函數的情況下實作此模式。如需控制的相關資訊 AWS Batch 直接,請參閱整合服務與 Step Functions

此範例專案會建立狀態機器、兩個 Lambda 函數,以及 AWS Batch 佇列,並設定相關IAM權限。

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

步驟 1:建立狀態機

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

  2. Job Poller在搜尋方塊中輸入,然後從傳回的搜尋結果中選擇 [Job 輪詢器]。

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

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

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

    • 三個 Lambda 函數來提交 AWS Batch 工作,取得已提交的目前狀態 AWS Batch 工作,以及最終工作完成狀態。

    • 同時 AWS Batch job

    • 同時 AWS Step Functions 狀態機器

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

    下列影像顯示「Job 輪詢者」範例專案的工作流程圖表:

    Job 輪詢員範例專案的工作流程圖。
  5. 選擇「使用範本」繼續進行選取。

接下來的步驟取決於您之前的選擇:

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

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

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

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

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

注意

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

步驟 2:運行狀態機

佈建並部署所有資源之後,會顯示 [開始執行] 對話方塊,其中包含類似下列內容的範例輸入。

{ "jobName": "my-job", "jobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/SampleJobDefinition-343f54b445d5312:1", "jobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/SampleJobQueue-4d9d696031e1449", "wait_time": 60 }
注意

wait_time 指示每 60 秒迴圈的 Wait 狀態。

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

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

      非ASCII名稱和記錄

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

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

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

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

    例如,若要檢視您的變更狀態 AWS Batch 作業和執行的循環結果,選擇出選項卡。

    下列影像顯示「圖形」檢視中的執行狀態圖形。它也會在「輸出」頁籤中顯示所選步驟的執行輸出

    「圖形」檢視中名為「取得最終 Job 狀態」 之所選步驟的執行輸出。

範例狀態機器程式碼

此示例項目中的狀態機集成了 AWS Lambda 提交 AWS Batch 工作。瀏覽此範例狀態機器,瞭解 Step Functions 如何控制 Lambda 和 AWS Batch.

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

{ "Comment": "An example of the Amazon States Language that runs an AWS Batch job and monitors the job until it completes.", "StartAt": "Submit Job", "States": { "Submit Job": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-JobStatusPol-SubmitJobFunction-jDaYcl4cx55r", "ResultPath": "$.guid", "Next": "Wait X Seconds" }, "Wait X Seconds": { "Type": "Wait", "SecondsPath": "$.wait_time", "Next": "Get Job Status" }, "Get Job Status": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:StepFunctionsSample-JobStatusPoll-CheckJobFunction-1JkJwY10vonI", "Next": "Job Complete?", "InputPath": "$.guid", "ResultPath": "$.status" }, "Job Complete?": { "Type": "Choice", "Choices": [ { "Variable": "$.status", "StringEquals": "FAILED", "Next": "Job Failed" }, { "Variable": "$.status", "StringEquals": "SUCCEEDED", "Next": "Get Final Job Status" } ], "Default": "Wait X Seconds" }, "Job Failed": { "Type": "Fail", "Cause": "AWS Batch Job Failed", "Error": "DescribeJob returned FAILED" }, "Get Final Job Status": { "Type": "Task", "Resource": "arn:aws::lambda:us-east-1:111122223333:function:StepFunctionsSample-JobStatusPoll-CheckJobFunction-1JkJwY10vonI", "InputPath": "$.guid", "End": true } } }