使用 Step Functions 開發工作流程 - AWS Step Functions

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

使用 Step Functions 開發工作流程

我們建議您開始在 Step Functions 主控台和 Workflow Studio 視覺化編輯器中建置工作流程。您可以從空白畫布開始,或針對常見案例選擇入門範本。

建置工作流程需要下列任務:

  • 定義您的工作流程

  • 執行和偵錯您的工作流程

  • 部署您的工作流程

您可以定義 Amazon States 語言的狀態機器。您可以手動建立 Amazon States 語言定義,但教學課程中會特別介紹 Workflow Studio。使用 Workflow Studio,您可以定義機器定義、視覺化和編輯步驟、執行和偵錯工作流程,以及從 Step Functions 主控台檢視所有結果。

您也可以從 AWS Command Line Interface () 使用許多 Step Functions 功能AWS CLI。例如,您可以建立狀態機器並列出現有的狀態機器。您可以在 中使用 Step Functions 命令 AWS CLI 來啟動和管理執行、輪詢活動、記錄任務活動訊號等。如需 Step Functions 命令的完整清單、可用引數的說明,以及顯示其使用方式的範例,請參閱 AWS CLI 命令參考AWS CLI 命令參考

AWS CLI 命令會密切遵循 Amazon States 語言,因此您可以使用 AWS CLI 來了解 Step Functions API動作。您也可以使用現有的API知識來建立原型程式碼,或從命令列執行 Step Functions 動作。

驗證狀態機器定義

您可以使用 API 驗證狀態機器,並在建立工作流程之前尋找潛在問題。

若要進一步了解如何驗證工作流程,請參閱步驟函數API參考ValidateStateMachineDefinition中的 。

若要開始使用最少的設定,您可以遵循建立 Lambda 狀態機器教學課程,其中說明如何使用呼叫 Lambda 函數的單一步驟來定義工作流程,然後執行工作流程,並檢視結果。

定義您的工作流程

開發工作流程的第一步是以 Amazon States 語言定義步驟。根據您的偏好設定和工具,您可以在 JSON、 YAML或 中將 Step Functions 狀態機器定義為字串化 Amazon States 語言 (ASL) 定義。

下表顯示工具支援 ASL型定義格式。

AWS 工具 支援的格式 (s)
Step Functions 主控台 JSON
HTTPS 服務 API 分層 ASL
AWS CLI 分層 ASL
Step Functions Local 分層 ASL
AWS Toolkit for Visual Studio Code JSON, YAML
AWS SAM JSON, YAML
AWS CloudFormation JSON、YAML、 分層 ASL

YAML 範本狀態機器定義的單行註解不會轉送至建立的資源定義。如果您需要保留註解,您應該在狀態機器定義中使用 Comment 屬性。如需相關資訊,請參閱 狀態機器結構

使用 AWS CloudFormation 和 AWS SAM,您可以將狀態機器定義上傳至 Amazon S3 (JSON 或 YAML 格式),並在範本中提供定義的 Amazon S3 位置。如需詳細資訊,請參閱 AWS::StepFunctions::StateMachine S3Location 頁面。

下列範例 AWS CloudFormation 範本示範如何使用不同的輸入格式提供相同的狀態機器定義。

JSON with Definition
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "AWS Step Functions sample template.", "Resources": { "MyStateMachine": { "Type": "AWS::StepFunctions::StateMachine", "Properties": { "RoleArn": { "Fn::GetAtt": [ "StateMachineRole", "Arn" ] }, "TracingConfiguration": { "Enabled": true }, "Definition": { "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Pass", "End": true } } } } }, "StateMachineRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { "Service": [ "states.amazonaws.com" ] } } ] }, "ManagedPolicyArns": [], "Policies": [ { "PolicyName": "StateMachineRolePolicy", "PolicyDocument": { "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "*", "Effect": "Allow" } ] } } ] } } }, "Outputs": { "StateMachineArn": { "Value": { "Ref": "MyStateMachine" } } } }
JSON with DefinitionString
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "AWS Step Functions sample template.", "Resources": { "MyStateMachine": { "Type": "AWS::StepFunctions::StateMachine", "Properties": { "RoleArn": { "Fn::GetAtt": [ "StateMachineRole", "Arn" ] }, "TracingConfiguration": { "Enabled": true }, "DefinitionString": "{\n \"StartAt\": \"HelloWorld\",\n \"States\": {\n \"HelloWorld\": {\n \"Type\": \"Pass\",\n \"End\": true\n }\n }\n}" } }, "StateMachineRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { "Service": [ "states.amazonaws.com" ] } } ] }, "ManagedPolicyArns": [], "Policies": [ { "PolicyName": "StateMachineRolePolicy", "PolicyDocument": { "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "*", "Effect": "Allow" } ] } } ] } } }, "Outputs": { "StateMachineArn": { "Value": { "Ref": "MyStateMachine" } } } }
YAML with Definition
AWSTemplateFormatVersion: 2010-09-09 Description: AWS Step Functions sample template. Resources: MyStateMachine: Type: 'AWS::StepFunctions::StateMachine' Properties: RoleArn: !GetAtt - StateMachineRole - Arn TracingConfiguration: Enabled: true Definition: # This is a YAML comment. This will not be preserved in the state machine resource's definition. Comment: This is an ASL comment. This will be preserved in the state machine resource's definition. StartAt: HelloWorld States: HelloWorld: Type: Pass End: true StateMachineRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Action: - 'sts:AssumeRole' Effect: Allow Principal: Service: - states.amazonaws.com ManagedPolicyArns: [] Policies: - PolicyName: StateMachineRolePolicy PolicyDocument: Statement: - Action: - 'lambda:InvokeFunction' Resource: "*" Effect: Allow Outputs: StateMachineArn: Value: Ref: MyStateMachine
YAML with DefinitionString
AWSTemplateFormatVersion: 2010-09-09 Description: AWS Step Functions sample template. Resources: MyStateMachine: Type: 'AWS::StepFunctions::StateMachine' Properties: RoleArn: !GetAtt - StateMachineRole - Arn TracingConfiguration: Enabled: true DefinitionString: | { "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Pass", "End": true } } } StateMachineRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Action: - 'sts:AssumeRole' Effect: Allow Principal: Service: - states.amazonaws.com ManagedPolicyArns: [] Policies: - PolicyName: StateMachineRolePolicy PolicyDocument: Statement: - Action: - 'lambda:InvokeFunction' Resource: "*" Effect: Allow Outputs: StateMachineArn: Value: Ref: MyStateMachinele
使用 開發工作流程 AWS SDKs

適用於 Java、.NET、Ruby、PHP、Python (Boto 3)、 JavaScript、Go 和 C++ 的 AWS SDKs支援 Step Functions。這些SDKs提供以多種程式設計語言使用 Step Functions HTTPSAPI動作的便利方式。您可以使用這些SDK程式庫公開API的動作來開發狀態機器、活動或狀態機器啟動器。您也可以使用這些程式庫來存取可見性操作,以開發自己的 Step Functions 監控和報告工具。請參閱適用於 Amazon Web Services 的目前 AWS SDKs和 工具的參考文件。 https://aws.amazon.com/tools/

透過HTTPS請求開發工作流程

Step Functions 提供可透過HTTPS請求存取的服務操作。您可以使用這些操作,從自己的程式庫直接與 Step Functions 通訊。您可以使用 服務API動作開發狀態機器、工作者或狀態機器啟動器。您也可以透過 API動作來存取可見性操作,以開發自己的監控和報告工具。如需詳細資訊,請參閱 AWS Step Functions API 參考

使用 AWS Step Functions 資料科學開發工作流程 SDK

資料科學家可以建立工作流程,使用 SageMaker AI 和 Step Functions 處理和發佈機器學習模型。您也可以在 Python 中建立多步驟機器學習工作流程,以大規模協調 AWS 基礎設施。 AWS Step Functions 資料科學SDK提供 PythonAPI,可建立和叫用 Step Functions 工作流程。您可以直接在 Python 以及 Jupyter 筆記本中管理和執行這些工作流程。如需詳細資訊,請參閱:AWS Github 上的 Step Functions 資料科學專案資料科學SDK文件,以及 Jupyter 筆記本SageMaker AI 範例 GitHub

執行和偵錯您的工作流程

您可以透過多種方式啟動工作流程,包括從主控台、從 Amazon EventBridge 和 EventBridge Scheduler 從另一個 Step Functions 狀態機器API呼叫 (例如,從 Lambda 函數)。執行中的工作流程可以在執行時連線至第三方服務 AWS SDKs、使用和操作資料。有各種工具可以執行和偵錯執行步驟,以及流經狀態機器的資料。下列各節提供執行和偵錯工作流程的其他資源。

若要進一步了解啟動狀態機器執行的方法,請參閱 在 Step Functions 中啟動狀態機器執行

選擇要執行工作流程的端點

為了減少延遲並將資料存放在符合您需求的位置,Step Functions 會在不同的 AWS 區域提供端點。Step Functions 中的每個端點都是完全獨立的。狀態機器或活動只存在於其建立所在的區域內。您在某個區域中建立的任何狀態機器和活動都不會與在其他區域中建立的資料或屬性共用任何資料或屬性。例如,您可以在STATES-Flows-1兩個不同的區域中註冊名為 的狀態機器。一個區域中STATES-Flows-1的狀態機器不會與另一個區域中STATES-Flow-1的狀態機器共用資料或屬性。如需 Step Functions 端點的清單,請參閱 中的AWS Step Functions 區域和端點AWS 一般參考

控制工作流程中的資料流程

您可以使用 Step Functions 主控台中的資料流程模擬器,查看資訊如何從狀態流向狀態,並了解如何篩選和操作資料。使用資料流程模擬器,您可以模擬 Step Functions 用來處理資料的每個欄位,例如 InputPathParametersResultSelectorOutputPathResultPath。如需相關資訊,請參閱 資料流程模擬器 (不支援)

Step Functions 的本機開發版本

為了測試和開發目的,您可以選擇在本機機器上安裝和執行 Step Functions。在本機執行時,Step Functions 的本機版本可以在 AWS 和 中叫用 AWS Lambda 函數。您也可以協調其他支援的 AWS 服務。如需詳細資訊,請參閱使用 Step Functions Local (不支援) 測試狀態機器

使用 VS 程式碼進行本機和遠端開發

您也可以使用 VS 程式碼與遠端狀態機器互動,並在本機開發狀態機器。您可以建立或更新狀態機器、列出現有的狀態機器,以及執行或下載狀態機器。VS Code 還可讓您從範本建立新狀態機器、檢視狀態機器的視覺效果,並提供程式碼片段、程式碼完成和程式碼驗證。如需詳細資訊,請參閱 AWS Toolkit for Visual Studio Code 使用者指南

部署您的工作流程

定義並偵錯工作流程之後,您可能想要使用基礎設施做為程式碼架構進行部署。您可以選擇使用各種 IaC 選項來部署狀態機器,包括: AWS Serverless Application Model AWS CloudFormation AWS CDK、 和 Terraform。

AWS Serverless Application Model

您可以 AWS Serverless Application Model 搭配 Step Functions 使用 來建置工作流程並部署所需的基礎設施,包括 Lambda 函數APIs和事件,以建立無伺服器應用程式。您也可以將 AWS SAM CLI與 搭配使用, AWS Toolkit for Visual Studio Code 做為整合體驗的一部分。

如需詳細資訊,請參閱使用 AWS SAM 建置 Step Functions 工作流程

AWS CloudFormation

您可以直接在 AWS CloudFormation 範本中使用狀態機器定義。

如需詳細資訊,請參閱使用 AWS CloudFormation 在 Step Functions 中建立工作流程

AWS CDK

您可以使用 建置標準和快速狀態機器 AWS CDK。

若要建置標準工作流程,請參閱 用CDK來建立標準工作流程

若要建置 Express 工作流程,請參閱 用CDK來建立快速工作流程

Terraform

Terraform HashiCorp 是使用基礎設施做為程式碼 (IaC) 建置應用程式的架構。使用 Terraform,您可以建立狀態機器並使用功能,例如預覽基礎設施部署和建立可重複使用的範本。Terraform 範本透過將程式碼分解為較小的區塊,協助您維護和重複使用程式碼。

如需詳細資訊,請參閱使用地形表單在 Step Functions 中部署狀態機