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

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

开发选项

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

Step Functions 控制台

您可以使用定义状态机Step Functions 控制台。您可以在云中编写复杂的状态机而无需使用本地开发环境,通过使用Amazon Lambda为任务提供代码,并通过 Step Functions 控制台使用亚马逊 State 语言定义状态机。

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

数据流模拟器

您可以在 “Step Functions” 控制台中设计、实施和调试工作流。了解 JsonPath 输入和输出处理的工作方式可帮助您了解如何控制状态机中的数据流。使用Step Functions 控制台中的数据流模拟器了解信息如何从州到州之间流动,并了解如何过滤和操作日期。此工具允许您模拟每个字段Step Functions 用于处理数据,例如InputPathParametersResultSelectorOutputPath, 和ResultPath

Amazon 开发工具包

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

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

将 Step Functions 与其他Amazon服务的参考文档,请参阅当前Amazon开发工具包和用于 Amazon Web Services 的工具

注意

Step Functions 仅支持 HTTPS 终端节点。

标准和快速工作流

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

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

HTTPS 服务 API

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

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

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

开发环境

您必须根据计划使用的编程语言设置适用的开发环境。

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

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

Endpoints

为了降低延迟并将数据存储在符合要求的位置,Step Functions 在不同的Amazon区域。

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

有关 Step Functions 终端节点的列表,请参阅。区域和终端节点:Amazon Step Functions中的Amazon一般参考

Amazon CLI

您可以通过访问多种 Step Functions 功能功能,Amazon Command Line Interface(Amazon CLI)。这些区域有:Amazon CLI提供了一种替代使用Step Functions 控制台或者,在有些情况下,可以使用 Step Functions API 操作来编程。例如,您可以使用 Amazon CLI 创建状态机,然后列出您的状态机。

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

这些区域有:Amazon CLI命令与 Amazon 状态语言密切相关,因此,您可以使用Amazon CLI以了解有关 Step Functions API 操作的信息。您还可以使用现有 API 知识创建代码原型,或者从命令行执行 Step Functions 操作。

Step Functions Local

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

Step Functions 的本地版本可以调用Amazon Lambda函数,这两个函数都在Amazon和在本地运行。您还可以协调其他支持的 Amazon 服务。有关更多信息,请参阅在本地设置 Step Functions(可下载版本)

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

定义格式支持

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

注意

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

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

通过工具支持定义格式
JSON YAML 字符串化的 Amazon 状态语言
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