本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
任务
Task
状态 ("Type": "Task"
) 代表状态机执行的一个工作单元。
您状态机中的所有工作由任务 完成。任务通过使用活动、Amazon Lambda 函数或将参数传递给其他服务的 API 操作来执行工作。
Amazon Step Functions可以直接从任务状态调用 Lambda 函数。Lambda 函数是运行的云原生任务Amazon Lambda。您可以使用Amazon Web Services Management Console或将代码上传到 Lambda,以各种编程语言编写 Lambda 函数。有关更多信息,请参阅 创建使用 Lambda 的 Step Functions 状态机。
Step Functions 可以直接从任务状态协调某些Amazon服务。有关更多信息,请参阅 使用其他服务。
活动由程序代码组成,它们等待运算符执行操作或者提供输入。您可以在 Amazon EC2、亚马逊 ECS 甚至移动设备上举办活动。活动使用GetActivityTask
和SendTaskSuccess
、和SendTaskHeartbeat
API 操作轮询StepSendTaskFailure
Functions。
Amazon States 语言通过将状态的类型设置为Task
并向任务提供活动或 Lambda 函数的亚马逊资源名称 (ARN) 来表示任务。
目录
任务状态字段
除了常见状态字段之外,Task
状态还具有以下字段。
-
Resource
(必需) -
一个 URI,尤其是唯一标识要执行的特定任务的 ARN。
-
Parameters
(可选) -
用于将信息传递给所连接资源的 API 操作。参数可以混合使用静态 JSON 和 JsonPath
. 有关更多信息,请参阅将参数传递给服务 API: -
ResultPath
(可选) -
指定(输入中)用于放置
Resource
中所指定任务的执行结果的位置。接下来,输入将按照OutputPath
字段(如果存在)指定的内容进行筛选,然后再用作状态输出。有关更多信息,请参阅输入和输出处理。 -
ResultSelector
(可选) -
传递键为静态或从结果中选择。有关更多信息,请参阅ResultSelector:
-
Retry
(可选) -
一个称为重试器的对象的数组,定义在状态遇到运行时错误时的重试策略。有关更多信息,请参阅使用重试和使用 Catch 的示例:
-
Catch
(可选) -
一个称为捕获器的对象的数组,用于定义回退状态。如果状态遇到运行时错误并且其重试策略已耗尽或者未定义,则执行该状态。有关更多信息,请参阅回退状态。
-
TimeoutSeconds
(可选) -
如果任务运行时间超过了指定的秒数,则该状态将失败,并返回
States.Timeout
错误名称。必须为非零正整数。如果未提供,则默认值为99999999
。任务启动后开始计数,例如,当ActivityStarted
或LambdaFunctionStarted
记录在 Execution event history (执行事件历史记录) 中。 -
TimeoutSecondsPath
(可选) -
如果您想使用参考路径从状态输入中动态提供超时值,请使用
TimeoutSecondsPath
。解析后,参考路径必须选择值为正整数的字段。注意 一个
Task
状态不能同时包含TimeoutSeconds
和TimeoutSecondsPath
-
HeartbeatSeconds
(可选) -
如果任务检测信号之间的时间超过了指定秒数,则该状态将失败,并返回
States.Timeout
错误名称。必须为非零正整数,并小于在TimeoutSeconds
字段中指定的秒数。如果未提供,则默认值为99999999
。对于活动,当GetActivityTask
收到令牌并且ActivityStarted
记录在执行事件历史记录中时开始计数。 -
HeartbeatSecondsPath
(可选) -
如果要使用参考路径根据状态输入动态提供心跳值,请使用
HeartbeatSecondsPath
。解析后,参考路径必须选择值为正整数的字段。注意 一个
Task
状态不能同时包含HeartbeatSeconds
和HeartbeatSecondsPath
Task
状态必须将 End
字段设置为 true
(如果状态结束执行),或者必须在 Next
字段中提供一个状态(该状态将在 Task
状态完成时运行)。
任务状态定义示例
任务状态超时和心跳间隔
为长时间运行的活动设置超时值和检测信号间隔是一个好的做法。这可以通过指定超时和心跳值或动态设置来完成。
静态超时和心跳通知示例
当 HelloWorld
完成后,将运行下一个状态 (此处名为 NextState
)。
如果此任务在 300 秒内未能完成,或者未在 60 秒的间隔内发送检测信号通知,则任务会被标记为 failed
。
"ActivityState": {
"Type": "Task",
"Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld",
"TimeoutSeconds": 300,
"HeartbeatSeconds": 60,
"Next": "NextState"
}
动态任务超时和心跳通知示例
在此示例中,当Amazon Glue任务完成时,下一个状态将运行。
如果此任务未能在作业动态设置的间隔内完成,或者未在Amazon Glue作业设置的间隔内发送心跳通知,则该任务将标记为failed
。Amazon Glue
"ActivityState": {
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun.sync",
"Parameters": {
"JobName": "myGlueJob"
},
"TimeoutSecondsPath": "$.params.maxTime",
"HeartbeatSecondsPath": "$.params.heartbeat",
"Next": "NextState"
}
在任务中指定资源 ARN
Resource
字段的 ARN 是使用以下模式指定的。
arn:partition
:service
:region
:account
:task_type
:name
在该模式中:
-
partition
是要使用的 Amazon Step Functions 分区,最常用的是aws
。 -
service
指示用于执行任务的 Amazon 服务,并且为以下之一: -
region
是创建 Step Functions 活动或状态机类型或 Lambda 函数的Amazon区域。 -
account
是您的 Amazon 账户 ID。 -
task_type
是要运行的任务的类型。它为以下值之一:-
activity
— 一项活动。 -
function
— 一个 Lambda 函数。 -
— 支持的连接服务的名称(参见Step Functions 的优化集成)。servicename
-
-
name
是注册的资源名称(活动名称、Lambda 函数名称或服务 API 操作)。
Step Functions 不支持跨分区、区域或帐户引用 ARN(例如,aws-cn
无法调用aws
分区中的任务,反之亦然)。
任务类型
支持以下任务类型:
以下各部分提供有关每种类型的更多详细信息。
活动
活动表示由您实现和托管的、用于执行某个特定任务的工作线程 (进程或线程)。它们只受标准工作流支持,而不受快速工作流支持。
活动 resource
ARN 使用下面的语法。
arn:partition
:states:region
:account
:activity:name
有关这些字段的更多信息,请参阅指定任务中的资源 ARN。
在首次使用 Step Functions(使用CreateActivity、API 操作或 Step Functions 控制台
有关创建活动和实现工作线程的更多信息,请参阅活动。
Lambda 函数
Lambda 任务使用执行函数Amazon Lambda。要指定 Lambda 函数,请在该Resource
字段使用 Lambda 函数的 ARN。
Lambda 函数Resource
ARN 使用以下语法。
arn:partition
:lambda:region
:account
:function:function_name
有关这些字段的更多信息,请参阅指定任务中的资源 ARN。
例如:
"LambdaState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorld",
"Next": "NextState"
}
Resource
字段中指定的 Lambda 函数完成后,其输出将发送到Next
字段中标识的状态 (”NextState “)。
支持的 Amazon 服务
当您引用连接的资源时,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:states:::batch:submitJob.sync",
"Parameters": {
"JobDefinition": "preprocessing",
"JobName": "PreprocessingBatchJob",
"JobQueue": "SecondaryQueue",
"Parameters.$": "$.batchjob.parameters",
"RetryStrategy": {
"attempts": 5
}
},
"End": true
}
}
}