開發選項 - AWS Step Functions

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

開發選項

您可以透過多種方式實作 AWS Step Functions 狀態機器,例如使用主控台、SDK 或本機版本的 Step Functions 進行測試和開發。

Step Functions 控制台

您可以使用 Step Functions 主控台定義狀態機器。您可以使用為工作提供程式碼,在不使用本機開發環境的情況下,在雲端中撰寫複雜的狀態機器。 AWS Lambda 撰寫完成之後,您就可以使用 Step Functions 主控台使用 Amazon 州語言定義狀態機器。

建立 Lambda 狀態機器教學課程會使用此技巧來建立簡單的狀態機器、執行機器,以及檢視其結果。

數據流模擬器

您可以在 Step Functions 主控台中設計、實作和偵錯工作流程。您也可以使用JsonPath輸入和輸出處理來控制工作流程中的資料流程。使用 Step Functions 主控台中的資料流程模擬器,瞭解資訊如何從一個狀態流動到另一個狀態,並瞭解如何篩選和操作資料。此工具會模擬 Step Functions 數用來處理資料的每個欄位,例如InputPathParametersResultSelectorOutputPath、和ResultPath

如需詳細資訊,請參閱 數據流模擬器

AWS 開發套件

Step Functions 是由 Java,淨,紅寶石,PHP,Python(博托 3) JavaScript,圍棋和 C ++ 的 AWS SDK 支持。這些 SDK 提供了在多種程式設計語言中使用 Step Functions 式 HTTPS API 動作的便利方式。

您可以使用這些軟體開發套件程式庫所公開的 API 動作來開發狀態機器、活動或狀態機器啟動者。您也可以使用這些程式庫存取可見性作業,以開發自己的 Step Functions 監視和報告工具。

若要將 Step Functions 與其他 AWS 服務搭配使用,請參閱目前 AWS 開發套件和 Amazon Web Services 工具的參考文件。

注意

Step Functions 僅支援 HTTPS 端點。

標準和快速工作流程

當您建立新的狀態機時,您必須選取標準快速Type的一個。在這兩種情況下,您都可以使用 Amazon 州語言定義狀態機器。根據您選取的 Type (類型),狀態機器執行的行為會有所不同。建立狀態機後,您選擇的「型」無法變更。

如需詳細資訊,請參閱記錄使用CloudWatch日誌

HTTPS 服務介面

Step Functions 提供可透過 HTTPS 要求存取的服務作業。您可以使用這些作業直接與 Step Functions 式通訊,並以任何可透過 HTTPS 與 Step Functions 式通訊的語言來開發您自己的程式庫。

您可以使用服務 API 動作來開發狀態機器、工作者或狀態機器啟動者。您也可以透過 API 動作來存取可見度操作,以開發專屬的監控和報告工具。

如需 API 動作的詳細資訊,請參閱 AWS Step Functions API 參考資料。

開發環境

您必須設定與您計劃使用之程式設計語言相容的開發環境。

例如,若要使用 Java 開發 Step Functions 式,您必須在每個開發工作站上安裝 Java 開發環境 AWS SDK for Java,例如。如果您使用適用於 Java 開發人員的 Eclipse IDE,您也應該安裝 AWS Toolkit for Eclipse。此 Eclipse 外掛程式會新增適合在 AWS上進行開發的實用功能。

如果您的程式設計語言需要執行階段環境,則必須在每部執行這些程序的電腦上設定環境。

端點

為了減少延遲並將資料儲存在符合您需求的位置,Step Functions 在不同 AWS 區域提供端點。

Step Functions 中的每個端點是完全獨立的。狀態機器或活動只存在於其建立所在的區域內。您在某區域中建立的任何狀態機器和活動,不會與另一個區域中建立的任何狀態機器和活動共用任何資料或屬性。例如,您可以註冊STATES-Flows-1在兩個不同區域中命名的狀態機器。一個區域中的STATES-Flows-1狀態機不會與另一個地區的STATES-Flow-1狀態機共享數據或屬性。

如需 Step Functions 端點的清單,請參閱AWS Step FunctionsAWS 一般參考.

AWS CLI

您可以從 AWS Command Line Interface (AWS CLI) 存取許多 Step Functions。 AWS CLI 這是使用「Step Functions」主控台的替代方法,或在某些情況下,使用 Step Functions API 動作進行程式設計。例如,您可以使用建立狀態機器,然後列出現有的狀態機器。 AWS CLI

您可以使用中的「Step Functions」命令 AWS CLI 來啟動和管理執行、輪詢活動、記錄工作活動訊號等。如需 Step Functions 命令的完整清單、可用引數的描述以及顯示其用法的範例,請參閱《命AWS CLI 令參考》。

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

Step Functions 本地

為了測試和開發目的,您可以在本機電腦上安裝和執行 Step Functions。隨著 Step Functions 局部,你可以在任何機器上開始執行。

Step Functions 的本機版本可以叫用 AWS Lambda 函式,無論是在 AWS 本機執行或執行時。您也可以協調其他支援的 AWS 服務。如需詳細資訊,請參閱 在本地測試狀態機

注意

Step Functions 本地使用虛擬帳戶工作。

AWS Toolkit for Visual Studio Code

您可以使用 VS Code 與遠端狀態機器互動,並在本機開發狀態機器。您可以建立或更新狀態機、列出現有的狀態機器,以及執行或下載狀態機器。VS Code 還可讓您從範本建立新狀態機器、檢視狀態機器的視覺效果,並提供程式碼片段、程式碼完成和程式碼驗證。

若要取得更多資訊,請參閱使 AWS Toolkit for Visual Studio Code 用者指南

AWS Serverless Application Model 和 Step Functions

Step Functions 與整合 AWS Serverless Application Model,可讓您整合工作流程與 Lambda 函數、API 和事件,以建立無伺服器應用程式。

您也可以將 AWS SAM CLI 與 AWS Toolkit for Visual Studio Code 作為整合體驗的一部分結合使用。

如需更多資訊,請參閱AWS Step Functions 和 AWS SAM

地形和 Step Functions

Terraform by HashiCorp 是使用基礎架構作為代碼(IaC)構建應用程序的框架。使用 Terraform,您可以建立狀態機器並使用功能,例如預覽基礎結構部署和建立可重複使用的範本。Terraform 範本可協助您維護和重複使用程式碼,方法是將程式碼分解成較小的區塊。

如需詳細資訊,請參閱 使用地形部署狀態機

定義格式支援

Step Functions 提供了各種工具,可讓您以不同的格式提供狀態機定義。指定狀態機器詳細資料的 Amazon 州語言 (ASL) 定義可以作為字串提供,也可以使用 JSON 或 YAML 作為序列化物件提供。

注意

YAML 允許單行註釋。範本的狀態機器定義部分中提供的任何 YAML 註解都不會結轉至建立的資源定義中。相反地,您可以使用狀態機器定義中的內Comment容。如需詳細資訊,請參閱国家机结构頁面。

下表顯示哪些工具支援以 ASL 為基礎的定義。

工具定義格式支援
JSON YAML 字符串化的 Amazon 國家語言
Step Functions 控制台
HTTPS 服務接口
AWS CLI
Step Functions 本地
AWS Toolkit for Visual Studio Code
AWS SAM
AWS CloudFormation
注意

AWS CloudFormation AWS SAM 也可讓您以 JSON 或 YAML 格式將狀態機器定義上傳到 Amazon S3,並在範本中提供定義的 Amazon S3 位置。當您的狀態機定義很複雜時,這可以提高模板的可讀性。如需詳細資訊,請參閱 AWS::StepFunctions::StateMachine S3 位置頁面。

下列 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: MyStateMachine