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

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

活动

活动是 Amazon Step Functions 的一项特征,它使您能够在状态机中设置任务,由工作线程执行,工作线程可以托管在 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Service (Amazon ECS)、移动设备上(基本上可以在任何地方托管)。

概述

在 Amazon Step Functions 中,可以将正在某处运行的代码(称为活动工作线程)与状态机中的特定任务关联起来。您可以在 Step Functions 控制台中或通过调用 CreateActivity 创建一个活动。这样会为任务状态提供 Amazon 资源名称 (ARN)。使用此 ARN 可以轮询活动工作线程中的工作的任务状态。

注意

活动没有版本控制,并应向后兼容。如果您必须对活动执行无法向后兼容的更改,则应通过 Step Functions 使用唯一名称创建一个 活动。

活动工作线程可以是在 Amazon EC2 实例上运行的应用程序、Amazon Lambda 函数、移动设备:任何可以进行 HTTP 连接、在任何位置托管的应用程序。当 Step Functions 达到某种活动任务状态,工作流程就等待活动工作线程轮询任务。活动工作线程通过使用 GetActivityTask 并发送相关活动的 ARN 来轮询 Step Functions,GetActivityTask 返回响应,其中包括 input(任务的 JSON 字符串输入)和 taskToken(任务的唯一标识符)。活动工作线程完成其工作后,可以使用 SendTaskSuccessSendTaskFailure 提供成功或失败报告。这两个调用使用 GetActivityTask 提供的 taskToken 将结果与该任务关联起来。

与活动任务相关的 API

Step Functions 提供用于创建和列出活动、请求任务和根据工作线程结果管理状态机流程的 API。

下面是与活动相关的 Step Functions API:

注意

在某些实现中,通过 GetActivityTask 轮询活动任务可能会导致延迟。请参阅避免轮询活动任务时发生延迟

等待完成活动任务

通过在任务定义中设置 TimeoutSeconds 配置状态等待时长 要使任务保持为活动和等待状态,请在 TimeoutSeconds 中配置的时间内,定期使用 SendTaskHeartbeat 从活动工作线程发送检测信号。通过配置较长的超时时间和积极发送检测信号,Step Functions 中的活动最长可以等待一年时间以完成执行。

例如,如果需要工作流程等待长时间进程的结果,请执行以下操作:

  1. 使用控制台或者使用 CreateActivity 创建活动。记下活动 ARN。

  2. 在状态机定义中的活动任务状态中引用该 ARN 并设置 TimeoutSeconds

  3. 使用 GetActivityTask 并引用该活动 ARN 实现用于轮询工作的活动工作线程。

  4. 在状态机任务定义的 HeartbeatSeconds 所设置的时间内,定期使用 SendTaskHeartbeat,以防止任务超时。

  5. 启动状态机执行。

  6. 启动活动工作进程。

执行在相应活动任务状态时暂停,等待活动工作线程轮询任务。一旦 taskToken 提供给活动工作线程,工作流程将等待 SendTaskSuccessSendTaskFailure 提供状态。如果执行在 TimeoutSeconds 中配置的时间之前未收到上述任一状态或 SendTaskHeartbeat 调用,则执行将失败,执行历史记录将包含 ExecutionTimedOut 事件。

后续步骤

要更详细地了解如何创建使用活动工作线程的状态机,请参阅: