开发选项 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

开发选项

您可以通过多种方式实现 Amazon Step Functions 状态机,例如使用控制台、软件开发工具包或本地版本的 Step Functions 进行测试和开发。

Step Functions 控制台

您可以使用 Step Functions 控制台定义状态机。通过使用为任务提供代码,可以在云中编写复杂的状态机,而无需使用 Amazon Lambda 本地开发环境。编写完成后,您可以使用 Step Functions 控制台使用 Amazon States Language 定义状态机。

创建 Lambda 状态机教程使用此方法创建简单的状态机、执行该状态机并查看其结果。

数据流模拟器

您可以在 Step Functions 控制台中设计、实施和调试工作流。您还可以使用 JsonPath 输入和输出处理来控制工作流中的数据流。使用 Step Functions 控制台中的数据流模拟器来了解信息是如何从一个状态流向另一个状态的,并了解如何筛选和操作数据。此工具模拟 Step Functions 用于处理数据的每个字段,例如InputPathParametersResultSelectorOutputPathResultPath

有关更多信息,请参阅数据流模拟器

Amazon 软件开发工具包

适用于 Java、.NET、Ruby、PHP、Python(Boto 3)、Go 和 C++ 的 Amazon 软件开发工具包支持 Step F JavaScript unctions。这些开发工具包提供了在各种编程语言中使用 Step Functions HTTPS API 操作的便捷方式。

您可以利用这些开发工具包库提供的 API 操作开发状态机、活动或状态机启动器。您还可以使用这些库访问可见性操作,以开发您自己的 Step Functions 监控和报告工具。

要将 Step Functions 与其他 Amazon 服务一起使用,请参阅适用于亚马逊 Web Amazon Services 的当前软件开发工具包和工具的参考文档。

注意

Step Functions 仅支持 HTTPS 端点。

标准和快速工作流

创建新的状态机时,您必须在 Type 处选择标准快速。在这两种情况下,都可以使用 Amazon States Language 定义状态机。状态机的执行方式将有所不同,具体取决于您选择的类型。创建状态机后,无法更改您选择的类型

请参阅使用 CloudWatch Logs 进行日志记录了解更多信息。

HTTPS 服务 API

Step Functions 提供可通过 HTTPS 请求访问的服务操作。您可以使用这些操作直接与 Step Functions 通信,还可以使用任何可通过 HTTPS 与 Step Functions 通信的语言来开发自己的库。

您可以使用服务 API 操作开发状态机、工作线程或状态机启动器。您还可以通过 API 操作访问可见性操作,以开发您自己的监控和报告工具。

有关 API 操作的详细信息,请参阅 Amazon Step Functions API 参考

开发环境

您必须设置与计划使用的编程语言兼容的开发环境。

例如,要使用 Java 为 Step Functions 进行开发,必须在每个开发工作站上安装 Java 开发环境 Amazon SDK for Java,例如。如果您使用 Eclipse IDE for Java Developers,则还应安装 Amazon Toolkit for Eclipse。此 Eclipse 插件提供了在 Amazon 开发中非常有用的功能。

如果您的编程语言需要运行时环境,则必须在运行这些进程的每台计算机上设置该环境。

端点

为了减少延迟并将数据存储在符合您要求的位置,Step Functions 提供了不同 Amazon 区域的终端节点。

Step Functions 中的每个端点都完全独立。一个状态机或活动仅存在于创建它的区域中。您在一个区域中创建的任意状态机或活动,不会与在其他区域中创建的状态机或活动分享任何数据或属性。例如,您可以在两个不同区域中注册名为 STATES-Flows-1 的状态机。一个区域中的 STATES-Flows-1 状态机不会与另一个区域的 STATES-Flow-1 状态机共享数据或属性。

有关 Step Functions 端点的列表,请参阅《Amazon Web Services 一般参考》中的Amazon Step Functions 区域和端点

Amazon CLI

您可以从 Amazon Command Line Interface (Amazon CLI) 访问许多 Step Functions 功能。可以替代使用 St Amazon CLI ep Functions 控制台,或者在某些情况下,也可以替代使用 Step Functions API 操作进行编程。例如,您可以使用 Amazon CLI 创建状态机,然后列出您现有的状态机。

您可以在 Amazon CLI 中使用 Step Functions 命令来启动和管理执行、轮询活动、记录任务检测信号等。有关 Step Functions 命令的完整列表、可用参数的说明以及展示它们使用方法的示例,请参阅 Amazon CLI 命令参考

Amazon CLI 命令严格遵循亚马逊州立大学的语言,因此您可以使用 Amazon CLI 来了解 Step Functions API 操作。您还可以使用现有 API 知识创建代码原型,或者从命令行执行 Step Functions 操作。

Step Functions Local

要进行测试和开发,您可以在本地计算机上安装并运行 Step Functions。使用 Step Functions Local,您可以在任何计算机上启动执行。

本地版本的 Step Functions 可以在本地运行 Amazon 和运行时调用 Amazon Lambda 函数。您还可以协调其他支持的 Amazon 服务。有关更多信息,请参阅在本地测试状态机

注意

Step Functions Local 使用虚拟账户来工作。

Amazon Toolkit for Visual Studio Code

您可以使用 VS Code 与远程状态机交互,并在本地开发状态机。您可以创建或更新状态机、列出现有状态机、执行或下载这些状态机。VS Code 还允许您从模板创建新的状态机,查看状态机的可视化效果,并提供代码片段、代码完成和代码验证。

有关更多信息,请参阅《 Amazon Toolkit for Visual Studio Code 用户指南》

Amazon Serverless Application Model 和 Step Functions

Step Functions 与集成 Amazon Serverless Application Model,允许您将工作流程与 Lambda 函数、API 和事件集成在一起,以创建无服务器应用程序。

您也可以将 Amazon SAM CLI 与结合使用 Amazon Toolkit for Visual Studio Code ,作为集成体验的一部分。

有关更多信息,请参阅 Amazon Step Functions 和 Amazon SAM

Terraform 和 Step Functions

Terraform by HashiCorp 是一个使用基础设施即代码 (IaC) 构建应用程序的框架。借助 Terraform,您可以创建状态机并使用特征,例如预览基础架构部署和创建可重复使用的模板。Terraform 模板通过将代码分解为多个较小的块来帮助您维护和重用代码。

有关更多信息,请参阅使用 Terraform 部署状态机

定义格式支持

Step Functions 提供了多种工具,可让您以不同的格式提供状态机定义。指定状态机详细信息的 Amazon States Language (ASL) 定义可以作为字符串提供,也可以使用 JSON 或 YAML 作为序列化对象提供。

注意

YAML 允许使用单行注释。模板的状态机定义部分中提供的任何 YAML 注释都不会延续到所创建资源的定义中。相反,您可以在状态机定义中使用 Comment 属性。有关更多信息,请参阅状态机结构页面。

下表显示了哪些工具支持基于 ASL 的定义。

各工具支持定义格式
JSON YAML Stringified Amazon States Language
Step Functions 控制台
HTTPS 服务 API
Amazon CLI
Step Functions Local
Amazon Toolkit for Visual Studio Code
Amazon SAM
Amazon CloudFormation
注意

Amazon CloudFormation Amazon SAM 还允许您将状态机定义以 JSON 或 YAML 格式上传到 Amazon S3,并在模板中提供定义的 Amazon S3 位置。当状态机定义很复杂时,这可以提高模板的可读性。欲了解更多信息,请参阅 AWS::StepFunctions::StateMachine S3Location 页面

以下示例 Amazon 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