AWS Step Functions
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

任务

Task 状态 ("Type": "Task") 代表状态机执行的一个工作单元。

除了常见状态字段之外,Task 状态还具有以下字段。

Resource (必需)

一个 URI,尤其是唯一标识要执行的特定任务的 Amazon 资源名称 (ARN)。

Parameters(可选)

用于将信息传递给所连接资源的 API 操作。参数可以混合使用静态 JSON 和 JsonPath。有关更多信息,请参阅 将参数传递给服务 API

ResultPath(可选)

指定(输入中)用于放置 Resource 中所指定任务的执行结果的位置。接下来,输入将按照 OutputPath 字段(如果存在)指定的内容进行筛选,然后再用作状态输出。有关更多信息,请参阅路径

Retry(可选)

一个称为重试器的对象的数组,定义在状态遇到运行时错误时的重试策略。有关更多信息,请参阅出错后重试

Catch(可选)

一个称为捕获器的对象的数组,用于定义回退状态。如果状态遇到运行时错误并且其重试策略已耗尽或者未定义,则执行该状态。有关更多信息,请参阅回退状态

TimeoutSeconds(可选)

如果任务运行时间超过了指定的秒数,则该状态将失败,并返回 States.Timeout 错误名称。必须为非零正整数。如果未提供,则默认值为 99999999。任务启动后开始计数,例如,当 ActivityStartedLambdaFunctionStarted 记录在 Execution event history (执行事件历史记录) 中。

HeartbeatSeconds(可选)

如果任务检测信号之间的时间超过了指定秒数,则该状态将失败,并返回 States.Timeout 错误名称。必须为非零正整数,并小于在 TimeoutSeconds 字段中指定的秒数。如果未提供,则默认值为 99999999。对于活动,当 GetActivityTask 收到令牌并且 ActivityStarted 记录在执行事件历史记录中时开始计数。

Task 状态必须将 End 字段设置为 true(如果状态结束执行),或者必须在 Next 字段中提供一个状态(该状态将在 Task 状态完成时运行)。

以下是示例。

"ActivityState": { "Type": "Task", "Resource": "arn:aws-cn:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" }

在本示例中,ActivityState 将计划在调用方 AWS 账户的 us-east-1 AWS 区域内执行 HelloWorld 活动。当 HelloWorld 完成后,将运行下一个状态 (此处名为 NextState)。

如果此任务在 300 秒内未能完成,或者未在 60 秒的间隔内发送检测信号通知,则任务会被标记为 failed。为长时间运行的活动设置超时值和检测信号间隔是一个好的做法。

在任务中指定资源 ARN

Resource 字段的 Amazon 资源名称 (ARN) 是使用以下模式指定的。

arn:partition:service:region:account:task_type:name

在该模式中:

  • partition 是要使用的 AWS Step Functions 分区,最常用的是 aws

  • service 指示用于执行任务的 AWS 服务,并且为以下之一:

  • region 是在其中创建 Step Functions 活动或状态机类型或 Lambda 函数的 AWS 区域

  • account 是您的 AWS 账户 ID。

  • task_type 是要运行的任务的类型。它为以下值之一:

  • name 是已注册的资源名称(活动名称、Lambda 函数名称或服务 API 操作)。

注意

Step Functions 不支持跨分区引用 ARN(例如:“aws-cn”不能在“aws”分区中调用任务,反之亦然)。

任务类型

支持以下任务类型:

以下各部分提供有关每种类型的更多详细信息。

Activity

活动表示由您实现和托管的、用于执行某个特定任务的工作线程 (进程或线程)。

活动 resource ARN 使用下面的语法。

arn:partition:states:region:account:activity:name

有关这些字段的更多信息,请参阅指定任务中的资源 ARN

注意

在第一次使用活动之前,必须先使用 Step Functions 创建活动(使用 CreateActivity、API 操作或 Step Functions 控制台)。

有关创建活动和实现工作线程的更多信息,请参阅活动

Lambda 函数

Lambda 使用 AWS Lambda 执行函数。要指定 Lambda 函数,请在 Resource 字段中使用 Lambda 函数的 Amazon 资源名称 (ARN)。

Lambda 函数 Resource ARN 使用下面的语法。

arn:partition:lambda:region:account:function:function_name

有关这些字段的更多信息,请参阅指定任务中的资源 ARN

例如:

"LambdaState": { "Type": "Task", "Resource": "arn:aws-cn:lambda:us-east-1:123456789012:function:HelloWorld", "Next": "NextState" }

Resource 字段中指定的 Lambda 函数完成后,其输出将会发送到在 Next 字段中标识的状态(“NextState”)。

支持的 AWS 服务

当您引用连接的资源时,Step Functions 直接调用受支持服务的 API 操作。在 Resource 字段中指定服务和操作。

所连接服务 Resource ARN 使用下面的语法。

arn:partition:states:region:account:servicename:APIname

注意

要创建与所连接资源的同步连接,请将 .sync 追加到 ARN 中的 APIname 条目。有关更多信息,请参阅 服务集成

例如:

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws-cn:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob", "JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "RetryStrategy": { "attempts": 5 } }, "End": true } } }