選取您的 Cookie 偏好設定

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

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

使用 Step Functions 建立活動狀態機器

焦點模式
使用 Step Functions 建立活動狀態機器 - AWS Step Functions

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

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

本教學課程會說明如何使用 Java 和 AWS Step Functions,建立以活動為基礎的狀態機器。活動可讓您控制從狀態機器其他地方執行的工作者程式碼。如需概觀,請參閱 了解 Step Functions 中的狀態機器 中的 了解 Step Functions 中的活動

為了完成本教學,您需要以下項目:

  • 適用於 Java 的 開發套件。本教學課程的範例活動是 Java 應用程式,使用 適用於 Java 的 AWS SDK 與 通訊 AWS。

  • AWS 環境中或標準 AWS 組態檔案中的 憑證。如需詳細資訊,請參閱《 適用於 Java 的 AWS SDK 開發人員指南》中的設定您的 AWS 登入資料。

步驟 1:建立活動

您必須讓 Step Functions 知道您想要建立其工作者 (程式) 的活動。Step Functions 會以建立活動身分的 Amazon Resource Name (ARN) 回應。使用此身分來協調狀態機器和工作者之間傳遞的資訊。

重要

確保您的活動任務與您的狀態機器位於相同的 AWS 帳戶。

  1. Step Functions 主控台的左側導覽窗格中,選擇活動

  2. 選擇 Create activity (建立活動)

  3. 輸入活動的名稱,例如 get-greeting,然後選擇建立活動

  4. 建立活動任務時,請記下其 ARN,如以下範例所示。

    arn:aws:states:us-east-1:123456789012:activity:get-greeting

步驟 2:建立狀態機器

建立狀態機器以決定何時呼叫您的活動,以及您的工作者何時應執行其主要工作、收集並傳回結果。若要建立狀態機器,您將使用 Workflow Studio 程式碼編輯器的 。

  1. Step Functions 主控台的左側導覽窗格中,選擇狀態機器

  2. 狀態機器頁面上,選擇建立狀態機器

  3. 選擇範本對話方塊中,選取空白

  4. 選擇選取以在 中開啟工作流程 Studio設計模式

  5. 在本教學課程中,您將在程式碼編輯器中寫入狀態機器的 Amazon States Language(ASL) 定義。若要執行此操作,請選擇程式碼

  6. 移除現有的樣板程式碼並貼上下列程式碼。請記得將 Resource 欄位中的範例 ARN 取代為您稍早在 中建立的活動任務 ARN步驟 1:建立活動

    { "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } } }

    這是使用 Amazon States Language(ASL) 的狀態機器描述。它定義名為 getGreeting 的單一 Task 狀態。如需詳細資訊,請參閱狀態機器結構

  7. 在 上圖形視覺化,請確定您新增的 ASL 定義的工作流程圖表看起來與下列圖表類似。

    以圖形顯示具有 RunActivity 任務狀態的狀態機器。
  8. 為您的狀態機器指定名稱。若要執行此操作,請選擇 MyStateMachine 預設狀態機器名稱旁的編輯圖示。然後,在狀態機器組態中,在狀態機器名稱方塊中指定名稱

    針對本教學課程,輸入名稱 ActivityStateMachine

  9. (選用) 在狀態機器組態中,指定其他工作流程設定,例如狀態機器類型及其執行角色。

    在此教學課程中,請保留狀態機器設定中的所有預設選擇。

    如果您先前已為狀態機器建立具有正確許可的 IAM 角色,並想要使用它,請在許可中選擇現有角色,然後從清單中選擇角色。或選取輸入角色 ARN,然後為該 IAM 角色提供 ARN。

  10. 確認角色建立對話方塊中,選擇確認以繼續。

    您也可以選擇檢視角色設定以返回狀態機器組態

    注意

    如果您刪除 Step Functions 建立的 IAM 角色,Step Functions 稍後無法重新建立該角色。同樣地,如果您修改角色 (例如,從 IAM 政策中的主體移除 Step Functions),Step Functions 稍後無法還原其原始設定。

步驟 3:實作工作者

建立工作者。工作者是一種程式,負責:

  • 使用 GetActivityTask API 動作輪詢活動的 Step Functions。

  • 使用您的程式碼執行活動工作 (例如,以下程式碼中的 getGreeting() 方法)。

  • 使用 SendTaskSuccessSendTaskFailureSendTaskHeartbeat API 動作傳回結果。

注意

如需活動工作者的更完整範例,請參閱 範例:Ruby 中的活動工作者。此範例根據最佳實務提供實作,可供您的活動工作者參考。此程式碼會實作可為輪詢器和活動工作者設定執行緒數量的消費者-生產者模式。

實作工作者

  1. 建立名為 GreeterActivities.java 的檔案。

  2. 新增以下程式碼至其中。

    import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.stepfunctions.AWSStepFunctions; import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder; import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest; import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult; import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest; import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest; import com.amazonaws.util.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; import java.util.concurrent.TimeUnit; public class GreeterActivities { public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; } public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build(); while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } } }
    注意

    此範例中的 EnvironmentVariableCredentialsProvider 類別假設已設定 AWS_ACCESS_KEY_ID (或 AWS_ACCESS_KEY) 和 AWS_SECRET_KEY (或 AWS_SECRET_ACCESS_KEY) 環境變數。如需提供必要登入資料給工廠的詳細資訊,請參閱《 適用於 Java 的 AWS SDK 開發人員指南》中的 適用於 Java 的 AWS SDK API 參考》中的 AWSCredentialsProvider設定登入 AWS 資料和開發區域

    根據預設, AWS 軟體開發套件最多會等待 50 秒,從伺服器接收任何操作的資料。此 GetActivityTask 操作是長時間輪詢操作,將等待最多 60 秒,以取得下一個可用任務。如要避免收到 SocketTimeoutException 錯誤,請將 SocketTimeout 設為 70 秒。

  3. GetActivityTaskRequest().withActivityArn()建構器的參數清單中,將ACTIVITY_ARN值取代為您先前在 中建立之活動任務的 ARN步驟 1:建立活動

步驟 4:執行狀態機器

當您開始執行狀態機器時,工作者會輪詢 Step Functions 以進行活動、執行其工作 (使用您提供的輸入),並傳回其結果。

  1. ActivityStateMachine 頁面上,選擇 Start execution (開始執行)

    隨即顯示開始執行對話方塊。

  2. 開始執行對話方塊中,執行下列動作:

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

      非 ASCII 名稱和記錄

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

    2. 輸入方塊中,輸入下列 JSON 輸入來執行您的工作流程。

      { "who": "AWS Step Functions" }
    3. 選擇 Start execution (開始執行)

    4. Step Functions 主控台會引導您前往標題為執行 ID 的頁面。此頁面稱為執行詳細資訊頁面。在此頁面上,您可以在執行進行時或完成後檢閱執行結果。

      若要檢閱執行結果,請在圖形檢視中選擇個別狀態,然後選擇步驟詳細資訊窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需您可以在執行詳細資訊頁面上檢視之執行資訊的詳細資訊,請參閱 執行詳細資訊概觀

步驟 5:執行和停用工作者

若要讓工作者輪詢您的活動狀態機器,您必須執行工作者。

  1. 在命令列上,導覽至您建立 GreeterActivities.java 的目錄。

  2. 若要使用 AWS SDK,請將 libthird-party 目錄的完整路徑新增至建置檔案的相依性,以及 Java CLASSPATH。如需詳細資訊,請參閱《 適用於 Java 的 AWS SDK 開發人員指南》中的下載和擷取 SDK

  3. 編譯檔案。

    $ javac GreeterActivities.java
  4. 執行 檔案。

    $ java GreeterActivities
  5. Step Functions 主控台上,導覽至執行詳細資訊頁面。

  6. 執行完成時,請檢查執行的結果。

  7. 停用工作者。

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