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

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

开发选项

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

Step Functions ca

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

创建 Lambda 状态机教程使用此技术来创建简单的状态机、执行它并查看其结果。

数据流模拟器

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

Amazon 软件开发工具包

适用于 Java、.NET、Ruby、PHP、Python、Python、Python、Python、Python JavaScript、Python、Python、Amazon这些 SDK 提供了一种在多种编程语言中使用 Step Functions HTTPS API 操作的便捷方式。

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

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

注意

Step Functions 仅支持 HTTPS 端点。

标准和快速工作流程

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

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

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 开发中非常有用的功能。

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

端点

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

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

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

Amazon CLI

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

您可以使用中的 Step Functions 命令Amazon CLI来启动和管理执行、轮询活动、记录任务心跳等。有关 Step Functions 命令的完整列表、可用参数的描述以及说明其用法的示例,请参阅Amazon CLI命令参考

Amazon CLI命令严格遵循亚马逊状态语言,因此您可以使用 Step Functions API 操作Amazon CLI来了解 Step Functions API 操作。您还可以使用现有的 API 知识对代码进行原型设计或通过命令行执行 Step Functions 操作。

Step Functions ca

出于测试和开发目的,可以在本地计算机上安装和运行 Step Functions。使用 Step Functions Local,可以在任何计算机上开始执行。

本地版本的 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 提供了多种工具,可让您以不同的格式提供状态机定义。指定状态机详细信息的亚马逊状态语言 (ASL) 定义可以以字符串形式提供,也可以使用 JSON 或 YAML 作为序列化对象提供。

注意

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

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

工具支持的定义格式
JSON YAML 字符串化Amazon 状态语言
Step Functions 控制台
HTTPS 服务 API
Amazon CLI
本地Step Functions
Amazon Toolkit for Visual Studio Code
Amazon SAM
Amazon CloudFormation
注意

Amazon CloudFormationAmazon 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