選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

了解 Step Functions 中的活動

焦點模式
了解 Step Functions 中的活動 - AWS Step Functions

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

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

透過 Step Functions 活動,您可以在狀態機器中設定任務,其中實際工作是由在 Step Functions 外執行的工作者執行。例如,您可以在 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Service (Amazon ECS) 或甚至行動裝置上執行工作者程式。

概觀

在 中 AWS Step Functions,活動是將執行某處 (稱為活動工作者) 的程式碼與狀態機器中特定任務建立關聯的一種方式。您可以使用 Step Functions 主控台或呼叫 來建立活動CreateActivity。這為您的任務狀態提供 Amazon Resource Name (ARN)。使用此 ARN 來輪詢任務狀態,以便在您的活動工作者中使用。

注意

活動並未進行版本控制,應該可與舊版相容。如果您必須對活動進行回溯不相容的變更,請使用唯一名稱在 Step Functions 中建立新的活動。

活動工作者可以是在 Amazon EC2 執行個體、 AWS Lambda 函數、行動裝置上執行的應用程式:任何可以進行 HTTP 連線的應用程式,託管於任何地方。當 Step Functions 達到活動任務狀態時,工作流程會等待活動工作者輪詢任務。活動工作者會使用 輪詢 Step FunctionsGetActivityTask,並傳送相關活動的 ARN。 GetActivityTask會傳回包含 input(任務的 JSON 輸入字串) 和 taskToken(任務的唯一識別符) 的回應。在活動工作者完成其工作之後,就可以使用 SendTaskSuccessSendTaskFailure 來提供成功或失敗的報告。這兩個呼叫會使用 GetActivityTask 所提供的 taskToken,將結果與該任務建立關聯。

活動任務的相關 API

Step Functions 提供 APIs用於建立和列出活動、請求任務,以及根據您的工作者結果管理狀態機器的流程。

以下是與活動相關的 Step Functions APIs:

注意

透過 GetActivityTask 輪詢活動任務,可能會導致某些實作延遲。請參閱 避免輪詢活動任務時的延遲

等待活動任務完成

在任務定義中設定 TimeoutSeconds,以設定狀態等待的時間長度。若要讓任務保持作用中並且等待,請在 TimeoutSeconds 中設定的時間內使用 SendTaskHeartbeat,定期從您的活動工作者傳送活動訊號。透過設定長時間逾時持續時間並主動傳送活動訊號,Step Functions 中的活動最多可以等待一年才能完成執行。

例如,如果您需要一個可等待冗長程序結果的工作流程,請執行下列動作:

  1. 使用主控台來建立活動,或藉由呼叫 CreateActivity 來建立它。記下活動 ARN。

  2. 在狀態機器定義的活動任務狀態中參考該 ARN,並且設定 TimeoutSeconds

  3. 使用 GetActivityTask,並且參考該 ARN,以實作可輪詢工作的活動工作者。

  4. 在您於狀態機器任務定義的 HeartbeatSeconds 中所設定的時間內,定期使用 SendTaskHeartbeat,讓任務不會逾時。

  5. 開始執行您的狀態機器。

  6. 啟動您的活動工作者程序。

執行會暫停於活動任務狀態,並等待活動工作者輪詢任務。將 taskToken 提供給活動工作者後,工作流程就會等待 SendTaskSuccessSendTaskFailure 提供狀態。如果在 TimeoutSeconds 中設定的時間前,執行並未收到這些資訊或 SendTaskHeartbeat 呼叫,則執行會失敗且執行歷史記錄中會包含 ExecutionTimedOut 事件。

範例:Ruby 中的活動工作者

下列範例活動工作者程式碼實作消費者生產者模式,其中包含可設定的輪詢器和活動工作者執行緒數量。輪詢器執行緒會持續長時間輪詢 Step Functions 中的活動任務。擷取活動任務時,會通過限制的封鎖佇列,讓活動執行緒接收。

下列程式碼是 Ruby 活動工作者範例的主要進入點。

require_relative '../lib/step_functions/activity' credentials = Aws::SharedCredentials.new region = 'us-west-2' activity_arn = 'ACTIVITY_ARN' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # Start method block contains your custom implementation to process the input activity.start do |input| { result: :SUCCESS, echo: input['value'] } end

您必須指定活動 ARN 和區域。程式碼包含您可以設定的預設值,例如執行緒和活動訊號延遲的數量。

項目 描述

require_relative

以下範例活動工作者程式碼的相對路徑。

region

AWS 活動的區域。

workers_count

您的活動工作者的執行緒數目。對於大多數實作,10 到 20 個執行緒應該就足夠。處理活動所需的時間越長,就可能需要更多執行緒。預估時,以每秒處理的活動數目乘以第 99 個百分位數活動處理延遲 (以秒為單位)。

pollers_count

您的輪詢器的執行緒數目。對於大多數實作,10 到 20 個執行緒應該就足夠。

heartbeat_delay

活動訊號之間的延遲 (以秒為單位)。

input 實作您的活動邏輯。

後續步驟

如要詳細了解建立使用活動工作者的狀態機器,請參閱:

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。