瞭解 Step Functions 中的活動 - AWS Step Functions

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

瞭解 Step Functions 中的活動

使用「Step Functions」活動,您可以在狀態機器中設定工作,其中實際工作是由在「Step Functions」外部執行的 Worker 執行的。例如,您可以在 Amazon 彈性計算雲(Amazon),Amazon 彈性容器服務(Amazon EC2ECS)甚至移動設備上運行一個工作者程序。

概觀

In (入) AWS Step Functions,活動是一種將在某處運行的代碼(稱為活動工作者)與狀態機器中的特定任務相關聯的方法。您可以使用 Step Functions 主控台或呼叫來建立活動CreateActivity。這會為您的任務狀態提供 Amazon 資源名稱 (ARN)。使用此ARN選項可輪詢活動 Worker 中工作的任務狀態。

注意

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

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

APIs與活動任務相關

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

下列是與活動相關APIs的「Step Functions」:

注意

透過 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 實作您的活動邏輯。

後續步驟

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