

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

# 亚马逊 SWF 的其他资源和参考信息
<a name="resources"></a>

本章提供了使用 Amazon SWF 开发工作流时需要的其他资源和参考信息。

**Topics**
+ [Amazon SWF 超时类型](swf-timeout-types.md)
+ [Amazon Simple Workflow Service 端点](#resources-endpoints)
+ [Amazon Simple Workflow Service 的其他文档](#resources-docs)
+ [Amazon Simple Workflow Service 的 Web 资源](#resources-web)
+ [Ruby Flow 的迁移选项](#RubyFlowOptions)

# Amazon SWF 超时类型
<a name="swf-timeout-types"></a>

为确保工作流程执行正常运行，您可以使用 Amazon SWF 设置不同类型的超时。一些超时指定工作流程的总运行时长。其它超时指定活动任务在被分配给工作程序之前所花费的时间以及从排定到完成所花费的时间。Amazon SWF API 中的所有超时都以秒为单位。Amazon SWF 还支持将字符串 `NONE` 作为超时值，表示没有超时。

对于与决策任务和活动任务相关的超时，Amazon SWF 会在工作流执行历史中添加一个事件。事件的属性提供了所发生超时类型的信息以及以及受影响的决策任务或活动任务。Amazon SWF 还会计划决策任务。当决策者收到新的决策任务时，它将在历史记录中看到超时事件，并通过调用操作来采取适当的[RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html)行动。

任务被视为从排定时开始到其关闭为止都处于开启状态。因此，当工作程序处理任务时，任务被报告为开启状态。当工作程序将任务状态报告为[已完成](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCompleted.html)、[已取消](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCanceled.html)或[失败](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskFailed.html)时，任务关闭。Amazon SWF 也可能会因超时而关闭任务。

## 工作流程和决策任务中的超时
<a name="swf-timeout-types-workflow"></a>

下图显示工作流程和决策超时如何与工作流程的生命周期相关：

![\[工作流程的生命周期，具有超时。\]](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/developerguide/images/workflow_timeouts.png)


与工作流程和决策任务相关的超时类型有两个：
+ **工作流启动到关闭 (`timeoutType: START_TO_CLOSE`)** - 该超时指定了完成工作流执行所需的最长时间。工作流程注册期间，这一超时被设置为默认值，但当工作流程启动时，可用其它值覆盖该默认值。如果超过此超时时间，Amazon SWF 将关闭工作流程执行并在工作流程执行历史中[WorkflowExecutionTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_WorkflowExecutionTimedOutEventAttributes.html)添加类型[的事件](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html)。除了 `timeoutType` 之外，事件属性还会指定对此工作流程执行有效的 `childPolicy`。子策略指定上级工作流程执行超时或终止时子工作流程执行的处理方法。例如，如果 `childPolicy` 被设置为 TERMINATE，则子工作流程执行将被终止。一旦工作流程执行超时，则不能对其执行可视性调用之外的其他任何操作。
+ **决策任务启动到关闭 (`timeoutType: START_TO_CLOSE`)** – 该超时指定了相应决策程序完成决策任务所需的最长时间。该超时在工作流程类型注册期间设置。如果超过此超时时间，则任务将在工作流程执行历史中标记为超时，Amazon SWF 会在工作流程历史记录中添加[DecisionTaskTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_DecisionTaskTimedOutEventAttributes.html)类型的事件。事件属性将包括与该决策任务 IDs 的计划时间 (`scheduledEventId`) 和启动时间 () 相对应的事件。`startedEventId`除了添加事件外，Amazon SWF 还会计划新决策任务以警告决策程序此决策任务已超时。此超时发生后，使用 `RespondDecisionTaskCompleted` 完成超时决策任务的尝试将失败。

## 活动任务中的超时
<a name="swf-timeout-types-activity"></a>

下图显示超时如何与活动任务的生命周期相关：

![\[任务的生命周期，具有超时\]](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/developerguide/images/activity_timeouts.png)


与活动任务相关的超时类型有四个：
+ **活动任务启动到关闭 (`timeoutType: START_TO_CLOSE`)** – 该超时指定了活动工作线在接收到任务后处理任务所需的最长时间。尝试使用[RespondActivityTaskCanceled](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCanceled.html)、[RespondActivityTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskCompleted.html)和关闭超时活动任务[RespondActivityTaskFailed](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondActivityTaskFailed.html)将失败。
+ **活动任务检测信号 (`timeoutType: HEARTBEAT`)** – 该超时指定了任务在通过 操作提供其进程前可以运行的最长时间。
+ **活动任务计划到开始 (`timeoutType: SCHEDULE_TO_START`)** – 该超时指定了在没有工作线执行活动任务时 Amazon SWF 在活动任务超时前等待的时间。一旦超时，过期的任务就不能分配给另一工作程序。
+ **活动任务安排到关闭 (`timeoutType: SCHEDULE_TO_CLOSE`)** – 该超时指定了任务从计划到完成所需的时间。作为最佳实践，此值不应大于任务 schedule-to-start超时和任务超时之和。 start-to-close

**注意**  
每一个超时类型都有默认值，一般设置为 `NONE` (无限)。但是任何活动执行的最长时间均被限制为一年。

您在活动类型注册期间设置这些活动的默认值，但当您[排定](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ScheduleActivityTaskDecisionAttributes.html)活动任务时您可以用新值覆盖默认值。当其中一个超时发生时，Amazon SWF 将在工作流程历史[记录中添加一个[ActivityTaskTimedOut](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ActivityTaskTimedOutEventAttributes.html)](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html)类型的事件。此事件的 `timeoutType` 值属性将指定发生了何种超时。对于其中每一个超时，`timeoutType` 的值都显示在括号中。事件属性还将包括与活动任务的 IDs 计划时间 (`scheduledEventId`) 和启动时间 () 相对应的事件。`startedEventId`除了添加事件外，Amazon SWF 还会计划新决策任务以警告决策程序已发生超时。

## Amazon Simple Workflow Service 端点
<a name="resources-endpoints"></a>

*Amazon Web Services 一般参考* 中提供了当前 [Amazon SWF 区域和端点](https://docs.aws.amazon.com/general/latest/gr/rande.html#swf_region)的列表，以及其他服务的端点。

Amazon SWF 域及所有相关工作流和活动必须在同一区域中才能互相通信。此外，一个区域中的任何已注册域、工作流程和活动不存在于其他区域中。*例如，如果您在 us-east-*1 和 us-west-* 2 中都创建了一个名为 MySampleDomain “” 的域，则它们将*作为单独的域存在*：与您的域名关联的所有工作流程、任务列表、活动或数据都不会跨区域共享。*

如果您在工作流程中使用其他 AWS 资源，例如 Amazon EC2 实例，则这些资源也必须与您的 Amazon SWF 资源位于同一区域。唯一的例外是跨区域的服务，如 Amazon S3 和 IAM。在任何支持这些服务的区域中，您都可以从工作流程访问这些服务。

## Amazon Simple Workflow Service 的其他文档
<a name="resources-docs"></a>

除了本开发人员指南之外，以下文档也很有用。

### Amazon Simple Workflow Service API Reference
<a name="resources-docs-api-ref"></a>

[Amazon Simple Workflow Service API Reference](https://docs.aws.amazon.com/amazonswf/latest/apireference/) 提供了有关 Amazon SWF HTTP API 的详细信息，包括操作、请求和响应结构以及错误代码。

### AWS Flow Framework 文档
<a name="aws-flow-framework-documentation"></a>

[AWS Flow Framework](https://aws.amazon.com/swf/details/flow/) 是一个编程框架，能够简化使用 Amazon SWF 管理其工作流和活动的分布式异步应用程序的实现过程，以便您能够集中精力实现您的工作流逻辑。

每种语言 AWS Flow Framework 都按照其设计语言的惯用语进行设计，因此您可以自然地使用自己选择的语言来实现具有 Amazon SWF 所有优势的工作流程。

有一个适用于 Java 的 AWS 流程框架。[AWS Flow Framework 适用于 Java 的开发人员指南](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/)提供了有关如何获取、设置和使用 AWS Flow Framework 适用于 Java 的信息。

### AWS 软件开发工具包文档
<a name="aws-sdk-documentation"></a>

 AWS 软件开发套件 (SDKs) 提供多种不同编程语言的 Amazon SWF 访问权限。它们严格 SDKs 遵循 HTTP API，但也为某些 Amazon SWF 功能提供了特定语言的编程接口。您可以访问以下链接了解有关每个软件开发工具包的更多信息。

**注意**  
 SDKs 此处仅列出了在撰写本文时支持 Amazon SWF 的产品。要查看可用工具的完整列表 AWS SDKs，请访问[亚马逊 Web Services 工具](https://aws.amazon.com/tools/)页面。

**Java**  
为 AWS 基础设施服务 适用于 Java 的 AWS SDK 提供了 Java API。  
要查看可用文档，请参阅 [适用于 Java 的 AWS SDK Documentation](https://aws.amazon.com/documentation/sdkforjava/) 页面。您也可以通过访问以下链接直接转到 SDK 参考中的 Amazon SWF 部分：  
+ [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html)
+ [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowAsyncClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowAsyncClient.html)
+ [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflow.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflow.html)
+ [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowAsync.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowAsync.html)

**JavaScript**  
 适用于 JavaScript 的 AWS SDK 允许开发人员使用浏览器或服务器上的 Node.js 应用程序内部提供的简单的 easy-to-use API 来构建利用 AWS 服务的库或应用程序。  
要查看可用文档，请参阅 [适用于 JavaScript 的 AWS SDK Documentation](https://aws.amazon.com/documentation/sdkforjavascript/) 页面。您也可以通过访问此链接直接转到 SDK 参考中的 Amazon SWF 部分：  
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SWF.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SWF.html)

**.NET**  
 适用于 .NET 的 AWS SDK 是一个可下载的单一软件包，其中包括 Visual Studio 项目模板、 AWS .NET 库、C\$1 代码示例和文档。 适用于 .NET 的 AWS SDK 这使得 Windows 开发人员可以更轻松地为 Amazon SWF 和其他服务构建.NET 应用程序。  
要查看可用文档，请参阅 [适用于 .NET 的 AWS SDK Documentation](https://aws.amazon.com/documentation/sdkfornet/) 页面。您也可以通过访问以下链接直接转到 SDK 参考中的 Amazon SWF 部分：  
+ [https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SimpleWorkflow/NSimpleWorkflow.html](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SimpleWorkflow/NSimpleWorkflow.html)
+ [https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SimpleWorkflow/NSimpleWorkflowModel.html](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/SimpleWorkflow/NSimpleWorkflowModel.html)

**PHP**  
为 Amazon SWF AWS SDK for PHP 提供了 PHP 编程接口。  
要查看可用文档，请参阅 [AWS SDK for PHP Documentation](https://aws.amazon.com/documentation/sdkforphp/) 页面。您也可以通过访问此链接直接转到 SDK 参考中的 Amazon SWF 部分：  
+ [https://docs.aws.amazon.com/sdk-for-php/latest/reference/class-Aws.Swf.SwfClient.html](https://docs.aws.amazon.com/sdk-for-php/latest/reference/class-Aws.Swf.SwfClient.html)

**Python**  
为亚马逊 SWF AWS SDK for Python (Boto) 提供了 Python 编程接口。  
要查看可用文档，请参阅 [boto: A Python interface to Amazon Web Services](http://docs.pythonboto.org/en/latest/) 页面。您也可以通过访问以下链接直接转到文档中的 Amazon SWF 部分：  
+ [Amazon SWF Tutorial](http://docs.pythonboto.org/en/latest/swf_tut.html)
+ [Amazon SWF Reference](http://docs.pythonboto.org/en/latest/ref/swf.html)

**Ruby**  
为 Amazon SWF 适用于 Ruby 的 AWS SDK 提供了 Ruby 编程接口。  
要查看可用文档，请参阅 [适用于 Ruby 的 AWS SDK Documentation](https://aws.amazon.com/documentation/sdkforruby/) 页面。您也可以通过访问此链接直接转到 SDK 参考中的 Amazon SWF 部分：  
+ [类别： AWS::Simple工作流程](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow.html)

### AWS CLI 文档
<a name="aws-cli-documentation"></a>

 AWS Command Line Interface (AWS CLI) 是用于管理 AWS 服务的统一工具。只需下载和配置一个工具，您就可以从命令行控制多项 AWS 服务，并通过脚本自动执行这些服务。

有关更多信息 AWS CLI，请参阅[AWS Command Line Interface](https://aws.amazon.com/cli/)页面。

有关 Amazon SWF 可用命令的概述，请参阅《AWS CLI Command Reference》**中 的 [swf](https://docs.aws.amazon.com/cli/latest/reference/swf/index.html)。

## Amazon Simple Workflow Service 的 Web 资源
<a name="resources-web"></a>

您可以使用多种 Web 资源来了解有关 Amazon SWF 的更多信息，或者获取有关使用该服务和开发工作流方面的帮助。

### Amazon SWF 论坛
<a name="resources-web-forum"></a>

Amazon SWF 论坛为您提供了一个与其 Amazon SWF 开发人员和 Amazon SWF 开发团队成员交流的场所，以便您提出问题并获得答案。

您可以通过访问该论坛，地址为：[Forum: Amazon Simple Workflow Service](https://forums.aws.amazon.com/forum.jspa?forumID=133)。

### Amazon SWF 常见问题
<a name="resources-web-faq"></a>

“Amazon SWF 常见问题”提供了有关 Amazon SWF 的常见问题的答案，包括常见使用案例的概述、Amazon SWF 与其他服务的区别等。

您可在此处访问常见问题：[Amazon SWF 常见问题](https://aws.amazon.com/swf/faqs/)。

### Amazon SWF 视频
<a name="resources-web-videos"></a>

上的 [Amazon Web Services](http://www.youtube.com/user/AmazonWebServices) 频道为包括亚马逊 SWF 在内的所有亚马逊网络服务 YouTube提供视频培训。要查看亚马逊 SWF 相关视频的完整列表，请使用以下查询：[亚马逊 Web Services 中的*简单工作流程*](http://www.youtube.com/user/AmazonWebServices/search?query=simple+workflow)

## Ruby Flow 的迁移选项
<a name="RubyFlowOptions"></a>

fo AWS Flow Framework r Ruby 的版本已不再处于积极开发阶段。现有代码仍将无限期继续运行，但不会再有新功能或新版本。本主题将介绍继续使用 Amazon SWF 的使用和迁移选项，以及有关如何迁移到 Step Functions 的信息。


****  

| 选项 | 描述 | 
| --- | --- | 
|  [继续使用 Ruby Flow Framework](#continue-to-use-ruby)  |  目前，Ruby Flow Framework 将继续使用。如果您不执行任何操作，您的代码将继续按现有方式运行。计划在不久的将来迁移出 AWS Flow Framework 适用于 Ruby 的。  | 
|  [迁移到 Java Flow Framework](#migrate-to-java-flow)  |  Java Flow Framework 仍在进行积极开发，并将继续收到新功能和更新。  | 
|  [迁移到 Step Functions](#migrate-to-step-functions)  |  Step Functions 可通过由状态机控制的可视化工作流程，来协调分布式应用程序的组件。  | 
| [直接使用 SWF API](#use-api-directly)，无需 Flow Framework | 您可以直接使用 SWF API 继续在 Ruby 中工作，而无需使用 Ruby Flow Framework。 | 

无论对于 Ruby 还是 Java，Flow Framework 提供的优势均在于，可让您专注于工作流程逻辑。该架构可处理大多数通信和协作的详细信息，并将某些复杂问题抽象化。您可以通过迁移到 Java Flow Framework 来继续使用相同级别的抽象，也可以直接与 Amazon SWF SDK 交互。

### 继续使用 Ruby Flow Framework
<a name="continue-to-use-ruby"></a>

在 AWS Flow Framework 短期内，for Ruby 将继续像现在一样发挥作用。如果您在 Ruby 中编写了 AWS Flow Framework 工作流程，那么这些工作流程将继续起作用。在没有更新、支持或安全修复的情况下，您最好制定明确的计划，以便在不久的将来从适用于 Ruby 的 AWS Flow Framework 迁移出来。

### 迁移到 Java Flow Framework
<a name="migrate-to-java-flow"></a>

 AWS Flow Framework 适用于 Java 的将继续积极开发中。从概念上讲，for Java 与 Ruby 类似：您仍然可以专注于工作流程逻辑，该框架将有助于管理您的决策者逻辑，并将使 Amazon SWF 的其他方面更易于管理。 AWS Flow Framework AWS Flow Framework 
+ [AWS Flow Framework for Java](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/welcome.html)
+ [AWS Flow Framework 适用于 Java API 参考](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/package-summary.html)

### 迁移到 Step Functions
<a name="migrate-to-step-functions"></a>

AWS Step Functions 提供的服务与 Amazon SWF 类似，但您的工作流程逻辑由状态机控制。借助 Step Functions，您可以使用可视化工作流来协调分布式应用程序和微服务的组件。您可通过能执行离散函数（或称为*任务*）的各单独组件构建应用程序，这样您能够快速扩展和更改应用程序。Step Functions 提供了一种可靠的方法来协调组件并逐步执行应用程序的函数。图形控制台可将应用程序的组件直观地展示为一系列步骤。它可以自动触发和跟踪各个步骤，并在出现错误时重试，因此您的应用程序每次都能按照预期顺序执行。Step Functions 会记录每个步骤的状态，这样在出现错误时，您就能够迅速诊断并调试问题。

在 Step Functions 中，您可以使用声明性 JSON 编写的状态机来管理各项任务的协调，该状态机是使用 [Amazon States Language](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html) 定义的。通过使用状态机，您不必编写和维护决定程序来控制您的应用程序逻辑。Step Functions 提供了一种直观、高效且敏捷的方法来使用可视化工作流协调应用程序组件。你应该考虑在所有新应用程序中使用，Step Functions AWS Step Functions 为你目前在 for Ruby 中实现的工作流程提供了一个很好的迁移平台。 AWS Flow Framework 

为了帮助您将任务迁移到 Step Functions，同时继续利用 Ruby 语言技能，Step Functions 提供了一个 Ruby 活动工作线程示例。该示例采用了实现活动工作线程的最佳实践，可用作将任务逻辑迁移到 Step Functions 的模板。有关更多信息，请参阅《AWS Step Functions Developer Guide》[https://docs.aws.amazon.com/step-functions/latest/dg/](https://docs.aws.amazon.com/step-functions/latest/dg/)中的 [https://docs.aws.amazon.com/step-functions/latest/dg/example-ruby-activity-worker.html](https://docs.aws.amazon.com/step-functions/latest/dg/example-ruby-activity-worker.html)。

**注意**  
对于许多客户来说，从 for Ruby 迁移到 Step AWS Flow Framework Functions 是最佳选择。但是，如果您要求信号干预您的进程，或者需要启动将结果返回给父进程的子进程，请考虑直接使用 Amazon SWF API，或者迁移到 for Java AWS Flow Framework 的。

有关更多信息 AWS Step Functions，请参阅：
+ [AWS Step Functions 开发人员指南](https://docs.aws.amazon.com/step-functions/latest/dg/)
+ [AWS Step Functions API 引用](https://docs.aws.amazon.com/step-functions/latest/apireference/)
+ [AWS Step Functions 命令行参考](https://docs.aws.amazon.com/cli/latest/reference/stepfunctions/)

### 直接使用 Amazon SWF API
<a name="use-api-directly"></a>

虽然 f AWS Flow Framework or Ruby 可以管理亚马逊 SWF 的某些复杂性，但你也可以直接使用亚马逊 SWF API。直接使用 API 可通过构建工作流程使您完全控制任务的执行和协作，无需担心跟踪任务进度和维持任务状态等底层复杂性。
+ [Amazon Simple Workflow Service Developer Guide](https://docs.aws.amazon.com/amazonswf/latest/developerguide/)
+ [Amazon Simple Workflow Service API Reference](https://docs.aws.amazon.com/amazonswf/latest/apireference/)