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

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

任务

Task 状态 ("Type": "Task") 代表状态机执行的一个工作单元。任务通过使用活动、Amazon Lambda函数或与其他支持的活动集成来执行工作Amazon Web Services。

Amazon States 语言通过将状态类型设置为,Task并为任务提供活动或 Lambda 函数的亚马逊资源名称 (ARN) 来表示任务。以下任务状态定义调用名为的 Lambda 函数。HelloFunction

"Lambda Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:HelloFunction:$LATEST" }, "End": true }

任务类型

Step Functions 支持以下任务类型,您可以在任务状态定义中指定这些类型:

您可以通过在任务状态定义Resource字段中提供其 ARN 来指定任务类型。以下示例显示了该Resource字段的语法。

提示

在任务状态定义中,将以下语法中的斜体文本替换为Amazon资源特定的信息。

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

以下列表解释了此语法中的各个组件:

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

  • service表示Amazon Web Service用于执行任务的,可以是以下值之一:

    • states,表示一个活动

    • lambda用于 Lambda 函数。如果您与其他Amazon Web Services(例如 Amazon SNS 或 Amazon DynamoDB)集成,请使用或。sns dynamodb

  • region是在其中创建 Step Functions 活动或状态机类型、Lambda 函数或任何其他Amazon资源的Amazon区域代码

  • account是您定义资源时使用的 Amazon Web Services 账户 ID。

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

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

注意

Step Functions 不支持跨分区或区域引用 ARN。例如,aws-cn无法调用aws分区中的任务,反之亦然。

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

活动

活动表示由您实现和托管的、用于执行某个特定任务的工作线程 (进程或线程)。它们只受标准工作流支持,而不受快速工作流支持。

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

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

在首次使用 Step Functions(使用CreateActivity、API 操作或 Step Functions 控制台)之前,您必须使用 Step Fun ctions 创建活动。

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

Lambda 函数

Lambda 任务使用执行函数。Amazon Lambda要指定 Lambda 函数,请在字段中使用 Lambda 函数的 ARN。Resource

根据您用于指定 Lambda 函数的集成类型(优化集成或 Amazon SDK 集成),您的 Lambda 函数字段的语法会有所不同。Resource

以下Resource字段语法是与 Lambda 函数的优化集成的示例。

"arn:aws:states:::lambda:invoke"

以下Resource字段语法是Amazon软件开发工具包与 Lambda 函数集成的示例。

"arn:aws:states:::aws-sdk:lambda:invoke"

以下Task状态定义显示了与名为的 Lambda 函数进行优化集成的示例。HelloWorld

"LambdaState": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST" }, "Next": "NextState" }

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

A 支持 Amazon Web Service

当您引用关联的资源时,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 } } }

任务状态字段

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

Resource (必需)

一个 URI,尤其是唯一标识要执行的特定任务的 ARN。

Parameters(可选)

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

Credentials(可选)

指定在调用指定Resource角色之前,状态机的执行角色必须扮演的目标角色。或者,您也可以指定 JSONPath 值或内部函数,该函数根据执行输入在运行时解析为 IAM 角色 ARN。如果指定 JSONPath 值,则必须在其前面加上符号。$.

有关在该Task州使用此字段的示例,请参阅。有关使用此字段从状态机访问跨账户Amazon资源的示例,请参阅教程:访问跨账户资源 Amazon

注意

使用 Lambda 函数任务类型的和支持的服务支持Amazon此字段。

ResultPath(可选)

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

ResultSelector(可选)

传递一组键值对,其中值是静态的或从结果中选择的。有关更多信息,请参阅ResultSelector

Retry(可选)

一个称为重试器的对象的数组,定义在状态遇到运行时错误时的重试策略。有关更多信息,请参阅使用 Retry 和 Catch 的状态机示例

Catch(可选)

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

TimeoutSeconds(可选)

指定活动或任务在因States.Timeout错误而超时并失败之前可以运行的最长时间。超时值必须为正的非零整数。默认值为 99999999

超时计数从任务启动后开始,例如,当ActivityStartedLambdaFunctionStarted事件记录在执行事件历史记录中时。对于活动,计数从GetActivityTask收到令牌时开始ActivityStarted,并记录在执行事件历史记录中。

任务启动时,Step Functions 会等待任务或活动工作人员在指定TimeoutSeconds时间内做出成功或失败的响应。如果任务或活动工作人员未能在这段时间内做出响应,Step Functions 会将工作流程执行标记为失败。

TimeoutSecondsPath(可选)

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

注意

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

HeartbeatSeconds(可选)

确定活动工作人员在任务执行期间发送的心跳信号的频率。心跳表示任务仍在运行,需要更多时间才能完成。心跳可防止活动或任务在TimeoutSeconds持续时间内超时。

HeartbeatSeconds必须是小于TimeoutSeconds字段值的正非零整数值。默认值为 99999999。如果任务两次心跳之间相隔的时间超过指定的秒数,则任务状态将失败并显示错误。States.Timeout

对于活动,计数从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

"GlueJobTask": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "myGlueJob" }, "TimeoutSecondsPath": "$.params.maxTime", "Next": "NextState" }