

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon SWF 開發工作流程元件
<a name="intro"></a>

開發分散式應用程式需要協調許多元件，並處理遠端通訊固有的延遲和不可靠性。

透過 Amazon Simple Workflow Service (Amazon SWF)，您可以提供程式設計模型和基礎設施來協調分散式元件，並以可靠的方式維護其執行狀態，藉此開發非同步和分散式應用程式。透過依賴 Amazon SWF，您可以自由地專注於建立應用程式的各個方面來區分它。

## 工作流程的元件
<a name="swf-dev-overview-concepts"></a>

[工作流程的元件工作流程元件](#swf-dev-overview-concepts) Amazon SWF 中的基本概念是*工作流程*。工作流程是一組實現一些目標的「活動」**，加上協調這些活動的邏輯。例如，工作流程可能會收到客戶訂單，並採取履行訂單所需的任何動作。

 每個工作流程都會在稱為*網域*的資源中執行，以控制工作流程的範圍。帳戶 AWS 可以有多個網域，每個網域都可以包含多個工作流程，但不同網域中的工作流程無法互動。

設計 Amazon SWF 工作流程時，您可以定義每個必要的活動。然後，您可以將每個活動註冊到 Amazon SWF 作為活動類型。您將提供名稱、版本和逾時值。例如，客戶可能預期訂單會在 24 小時內出貨。

在執行工作流程的過程中，有些活動可能需要執行多次，並可能有不同的輸入。例如，在客戶訂單工作流程中，您可能會有處理購買項目的活動。如果客戶購買多個項目，則此活動必須執行多次。Amazon SWF 具有*活動任務*的概念，代表一個活動叫用。在我們的範例中，每個項目的處理會以單一活動任務表示。

*活動工作者*是接收活動任務、執行它們並提供結果的程式。任務實際上可能由人員執行。例如，統計分析師可能會收到資料集、分析資料，然後傳回其分析。

活動任務和執行它們的活動工作者可以同步或非同步執行。工作者可以在一個位置執行或分散在多部電腦，可能位於不同的地理區域。不同的活動工作者可以使用不同的程式設計語言撰寫，並在不同的作業系統上執行。例如，一個活動工作者可能在亞洲的伺服器上執行，而另一個活動工作者可能在北美洲的行動裝置上執行。

工作流程的協調邏輯包含在稱為「決策者」**的軟體程式中。決策者會排程活動任務、向活動工作者提供輸入、處理工作流程進行時抵達的事件，並在達到目標後結束 （或關閉） 工作流程。

Amazon SWF 服務的角色是在決策者、活動工作者和其他相關實體之間交換資料的可靠中樞，例如管理工作流程的人員。Amazon SWF 也會維護每個工作流程執行的狀態，讓您的應用程式不必以耐久的方式存放狀態。

決策者透過從 Amazon SWF 接收決策任務，並以決策回應 Amazon SWF 來引導工作流程。決策代表動作或一組動作，這是工作流程中的後續步驟。一個典型的決策是排程活動任務。決策也可以用來延遲具有計時器的任務、請求取消進行中的任務，以及完成工作流程。

活動工作者和決策者接收其任務 （分別為活動任務和決策任務） 的機制是透過輪詢 Amazon SWF 服務。

Amazon SWF 透過在每個決策任務中包含目前工作流程執行歷史記錄的副本，通知決策者工作流程的狀態。工作流程執行歷史記錄是由事件組成，每個事件代表工作流程執行狀態中的一項重大變更。事件的範例包括任務完成、任務逾時或計時器過期。歷史記錄是工作流程進度之完整一致的權威記錄。

Amazon SWF 存取控制使用 AWS Identity and Access Management (IAM)，因此您可以控制對 AWS 資源的存取。例如，您可以允許使用者存取您的帳戶，但只能執行特定網域中的某些工作流程。

## 執行您的工作流程
<a name="swf-dev-overview-execution"></a>

以下概述在 Amazon SWF 中開發和執行工作流程所需的步驟：

1. 撰寫**活動工作者**以執行工作流程中的處理步驟。

1. 撰寫**決策者**來處理工作流程的協調邏輯。

1. 向 Amazon SWF 註冊您的活動和工作流程。

   您可以編寫程式或使用 執行此步驟 AWS 管理主控台。

1. 啟動您的活動工作者和決策者。

   這些演員可以在可存取 Amazon SWF 端點的任何運算裝置上執行。例如，您可以使用雲端中的運算執行個體，例如 Amazon Elastic Compute Cloud (Amazon EC2)；資料中心的伺服器；甚至是行動裝置，來託管決策者或活動工作者。啟動後，決策者和活動工作者應該開始輪詢 Amazon SWF 任務。

1. 啟動您工作流程的一或多個執行。

   您可以透過程式設計方式或透過 啟動工作流程 AWS 管理主控台。

   每個執行都獨立執行，而且您可以為每個執行提供其各自的輸入資料集。啟動執行時，Amazon SWF 會排程初始決策任務。為了回應，您的決策者會開始產生啟動活動任務的決策。執行會繼續進行，直到您的決策者決定關閉執行為止。

1. 使用 檢視工作流程執行 AWS 管理主控台。

   您可以篩選和檢視執行中和已完成執行的完整詳細資訊。例如，您可以選取開啟的執行，以查看哪些任務已完成及其結果。

## 設定開發環境
<a name="swf-dg-dev-amzn-swf"></a>

您可以選擇使用 支援的任何程式設計語言來開發 Amazon SWF AWS。對於 Java AWS Flow Framework 開發人員，也可以使用 。如需詳細資訊，請參閱 [AWS Flow Framework](https://aws.amazon.com/swf/flow/)網站，請參閱 [AWS Flow Framework Java 開發人員指南](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/)。

為了減少延遲並將資料存放在符合您需求的位置，Amazon SWF 在不同區域中提供**端點**。

Amazon SWF 中的每個端點都是完全獨立的。您在某個區域中註冊的任何網域、工作流程和活動都不會與另一個區域中的資料或屬性共用。

當您註冊 Amazon SWF 網域、工作流程或活動時，它*只會存在於您註冊它的區域內*。例如，您可以在`SWF-Flows-1`兩個不同的區域中註冊名為 的網域，但它們不會彼此共用資料或屬性，每個都充當完全獨立的網域。

如需 Amazon SWF 端點的清單，請參閱[區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

## 使用 AWS SDKs 開發
<a name="aws-sdks"></a>

Amazon SWF 受適用於 Java、.NET、Node.js、PHP、Python 和 Ruby AWS SDKs 支援，提供以您選擇的程式設計語言使用 Amazon SWF HTTP API 的便利方式。

您可以使用這些程式庫公開的 API 來開發*決策者*、*活動工作者*或*工作流程啟動者*。此外，您可以透過這些程式庫使用可見性操作，以便開發自己的 Amazon SWF 監控和報告工具。

若要下載開發和管理應用程式的工具 AWS，包括 SDKs，請前往 [開發人員中心](https://aws.amazon.com/developer/tools)。

如需每個 SDK 中 Amazon SWF 操作的詳細資訊，請參閱 SDK 的語言特定參考文件。

## 考慮 AWS Flow Framework
<a name="aws-flow-framework"></a>

 AWS Flow Framework 是增強型 SDK，用於撰寫在 Amazon SWF 上作為工作流程執行的分散式非同步程式。此架構適用於 Java 程式設計語言，並提供撰寫複雜分散式程式的類別。

使用 AWS Flow Framework，您可以使用預先設定的類型，將工作流程的定義直接映射到程式中的方法。 AWS Flow Framework 支援標準物件導向概念，例如例外型錯誤處理。使用 編寫的程式 AWS Flow Framework 可以完全在您偏好的編輯器或 IDE 內建立、執行和偵錯。如需詳細資訊，請參閱 [AWS Flow Framework](https://aws.amazon.com/swf/flow/)網站，請參閱 [AWS Flow Framework Java 開發人員指南](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/)。