本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
瞭解 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
(任務的唯一標識符)。在活動工作者完成其工作之後,就可以使用 SendTaskSuccess
或 SendTaskFailure
來提供成功或失敗的報告。這兩個呼叫會使用 GetActivityTask
所提供的 taskToken
,將結果與該任務建立關聯。
APIs與活動任務相關
Step Functions 提APIs供建立和列出活動、請求任務,以及根據 Worker 的結果管理狀態機器的流程。
下列是與活動相關APIs的「Step Functions」:
注意
透過 GetActivityTask
輪詢活動任務,可能會導致某些實作延遲。請參閱 輪詢活動任務時避免延遲。
等待活動任務完成
在任務定義中設定 TimeoutSeconds
,以設定狀態等待的時間長度。若要讓任務保持作用中並且等待,請在 TimeoutSeconds
中設定的時間內使用 SendTaskHeartbeat
,定期從您的活動工作者傳送活動訊號。藉由設定較長的逾時持續時間並主動傳送活動訊號,Step Functions 中的活動最多可等待一年的執行完成。
例如,如果您需要一個可等待冗長程序結果的工作流程,請執行下列動作:
-
使用主控台來建立活動,或藉由呼叫
CreateActivity
來建立它。記下活動ARN。 -
ARN在狀態機定義和設置中引用活動任務狀態
TimeoutSeconds
。 -
實現一個活動工作者
GetActivityTask
,通過使用引用該活動ARN進行輪詢工作。 -
在您於狀態機器任務定義的
HeartbeatSeconds
中所設定的時間內,定期使用SendTaskHeartbeat
,讓任務不會逾時。 -
開始執行您的狀態機器。
-
啟動您的活動工作者程序。
執行會暫停於活動任務狀態,並等待活動工作者輪詢任務。將 taskToken
提供給活動工作者後,工作流程就會等待 SendTaskSuccess
或 SendTaskFailure
提供狀態。如果在 TimeoutSeconds
中設定的時間前,執行並未收到這些資訊或 SendTaskHeartbeat
呼叫,則執行會失敗且執行歷史記錄中會包含 ExecutionTimedOut
事件。
範例:Ruby 中的活動工作者
下列範例活動工作者程式碼會實作消費者生產者模式,其中包含可供輪詢者和活動工作者使用的可設定執行緒數目。輪詢器線程不斷長時間輪詢 Step Functions 中的活動任務。當檢索活動任務時,它會通過有界阻塞隊列傳遞給活動線程來拾取。
-
如需詳細資訊,請參閱 AWS SDK for Ruby API參考。
-
若要下載此程式碼和相關資源,請參閱上 GitHub的 step-functions-ruby-activity-worker
儲存庫。
下列程式碼是此範例 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和地區。程式碼包含您可以設定的預設值,例如執行緒數目和活動訊號延遲。
項目 | 描述 |
---|---|
|
以下範例活動工作者程式碼的相對路徑。 |
|
AWS 活動的地區。 |
|
您的活動工作者的執行緒數目。對於大多數實作,10 到 20 個執行緒應該就足夠。處理活動所需的時間越長,就可能需要更多執行緒。預估時,以每秒處理的活動數目乘以第 99 個百分位數活動處理延遲 (以秒為單位)。 |
|
您的輪詢器的執行緒數目。對於大多數實作,10 到 20 個執行緒應該就足夠。 |
|
活動訊號之間的延遲 (以秒為單位)。 |
input |
實作您的活動邏輯。 |
後續步驟
如要詳細了解建立使用活動工作者的狀態機器,請參閱: