本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
任务
Task
状态 ("Type": "Task"
) 代表状态机执行的一个工作单元。
您状态机中的所有工作由任务 完成。任务通过使用活动、Amazon Lambda 函数或将参数传递给其他服务的 API 操作来执行工作。
Amazon Step Functions可以直接从任务状态调用 Lambda 函数。运行在上的云原生任务。Amazon Lambda. 您可以使用各种编程语言编写 Lambda 函数,使用Amazon Web Services Management Console或者通过将代码上传到 Lambda。有关更多信息,请参阅创建 Step Functions 状态机器这使用 Lambda.
Step Functions 可以协调一些Amazon直接来自任务状态的服务。有关更多信息,请参阅使用其他服务.
活动由程序代码组成,它们等待运算符执行操作或者提供输入。您可以在 Amazon EC2 上、在 Amazon ECS 上甚至在移动设备上托管活动。活动轮询 Step Functions 使用GetActivityTask
和SendTaskSuccess
、SendTaskFailure
, 和SendTaskHeartbeat
API 操作。
通过将州的类型设置为来呈现任务。Task
并且向任务提供活动的 Amazon 资源名称 (ARN) 或 Lambda 函数。
除了常见状态字段之外,Task
状态还具有以下字段。
-
Resource
(必需) -
一个 URI,尤其是唯一标识要执行的特定任务的 ARN。
-
Parameters
(可选) -
用于将信息传递给所连接资源的 API 操作。参数可以混合使用静态 JSON 和 JsonPath
。有关更多信息,请参阅将参数传递给服务 API。 -
ResultPath
(可选) -
指定(输入中)用于放置
Resource
中所指定任务的执行结果的位置。接下来,输入将按照OutputPath
字段(如果存在)指定的内容进行筛选,然后再用作状态输出。有关更多信息,请参阅输入和输出处理。 -
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作业,或者不在设置的时间间隔内发送心跳通知Amazon Glue任务,则将任务标记为failed
.
"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
是Amazon区域在其中创建 Step Functions 活动或状态机类型或 Lambda 函数。 -
account
是您的 Amazon 账户 ID。 -
task_type
是要运行的任务的类型。它为以下值之一:-
activity
— 一个活动. -
function
— ALambda 函数. -
— 支持的连接服务的名称(请参阅针对 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 函数,请在中使用 Lambda 函数的 ARN。Resource
字段中返回的子位置类型。
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"
}
在中指定的 Lambda 函数之后Resource
字段完成后,其输出将会发送到在中标识的状态。Next
字段(“下一个州”)。
支持的 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
}
}
}