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

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

任务

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 甚至移动设备上举办活动。活动使用GetActivityTaskSendTaskSuccess、和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。任务启动后开始计数,例如,当 ActivityStartedLambdaFunctionStarted 记录在 Execution event history (执行事件历史记录) 中。

TimeoutSecondsPath(可选)

如果您想使用参考路径从状态输入中动态提供超时值,请使用TimeoutSecondsPath。解析后,参考路径必须选择值为正整数的字段。

注意

一个Task状态不能同时包含TimeoutSecondsTimeoutSecondsPath

HeartbeatSeconds(可选)

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

HeartbeatSecondsPath(可选)

如果要使用参考路径根据状态输入动态提供心跳值,请使用HeartbeatSecondsPath。解析后,参考路径必须选择值为正整数的字段。

注意

一个Task状态不能同时包含HeartbeatSecondsHeartbeatSecondsPath

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 是要运行的任务的类型。它为以下值之一:

  • 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 } } }