

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

# 上的基礎設施範例 AWS
<a name="examples"></a>

本節提供在 上 AWS 設計應用程式基礎設施的範例，可用來實作六邊形架構。我們建議您從簡單的架構開始，以建置最低可行產品 (MVP)。大多數微服務需要單一進入點來處理用戶端請求、執行程式碼的運算層，以及存放資料的持久性層。下列 AWS 服務非常適合做為六邊形架構中的用戶端、主要轉接器和次要轉接器使用：
+ **用戶端：**Amazon API Gateway、Amazon Simple Queue Service (Amazon SQS)、Elastic Load Balancing、Amazon EventBridge
+ **主要轉接器：** AWS Lambda、Amazon Elastic Container Service (Amazon ECS)、Amazon Elastic Kubernetes Service (Amazon EKS)、Amazon Elastic Compute Cloud (Amazon EC2)
+ **次要轉接器：**Amazon DynamoDB、Amazon Relational Database Service (Amazon RDS)、Amazon Aurora、API Gateway、Amazon SQS、Elastic Load Balancing、EventBridge、Amazon Simple Notification Service (Amazon SNS)

下列各節會更詳細地討論六邊形架構內容中的這些服務。

## 啟動簡單
<a name="start-simple"></a>

當您使用六邊形架構來建構應用程式時，建議您從簡單的 開始。在此範例中，API Gateway 用作用戶端 (REST API)，Lambda 用作主要轉接器 （運算），DynamoDB 用作次要轉接器 （持久性）。閘道用戶端會呼叫進入點，在此案例中，進入點是 Lambda 處理常式。

![\[簡單六邊形架構\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/hexagonal-architectures/images/simple.png)


此架構完全無伺服器，並為架構師提供良好的起點。我們建議您在網域中使用命令模式，因為它可以更輕鬆地維護程式碼，並適應新的業務和非功能需求。此架構可能足以透過幾個操作建置簡單的微服務。

## 套用 CQRS 模式
<a name="apply-cqrs"></a>

如果網域上的操作數量將擴展，我們建議您切換到 CQRS 模式。您可以使用下列範例，在 中 AWS 將 CQRS 模式套用為完全無伺服器架構。

![\[在六邊形架構中套用 CQRS 模式\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/hexagonal-architectures/images/cqrs.png)


此範例使用兩個 Lambda 處理常式，一個用於查詢，另一個用於命令。使用 API 閘道做為用戶端，以同步方式執行查詢。使用 Amazon SQS 做為用戶端，以非同步方式執行命令。

此架構包含多個用戶端 (API Gateway 和 Amazon SQS) 和多個主要轉接器 (Lambda)，由其對應的進入點 (Lambda 處理常式） 呼叫。所有元件都屬於相同的邊界內容，因此它們位於相同的網域中。

## 透過新增容器、關聯式資料庫和外部 API 來發展架構
<a name="evolve"></a>

容器是長時間執行任務的好選項。如果您有預先定義的資料結構描述，並且想要受益於 SQL 語言的強大功能，您可能也想要使用關聯式資料庫。此外，網域必須與外部 APIs通訊。您可以發展架構範例以支援這些需求，如下圖所示。

![\[透過新增容器、關聯式資料庫和外部 API 來發展六邊形架構\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/hexagonal-architectures/images/evolve.png)


此範例使用 Amazon ECS 作為啟動網域中長時間執行任務的主要轉接器。發生特定事件時，Amazon EventBridge （用戶端） 會啟動 Amazon ECS 任務 （進入點）。架構包含 Amazon RDS 作為儲存關聯式資料的另一個次要轉接器。它也會新增另一個 API 閘道做為次要轉接器，以叫用外部 API 呼叫。因此，該架構使用多個主要和次要轉接器，這些轉接器依賴一個商業網域中的不同基礎運算層。

網域一律會透過稱為*連接埠*的抽象概念，鬆散地聯結所有主要和次要轉接器。網域使用連接埠定義從外部世界所需的內容。由於轉接器必須負責實作連接埠，因此從一個轉接器切換到另一個轉接器不會影響網域。例如，您可以撰寫新的轉接器，從 Amazon DynamoDB 切換到 Amazon RDS，而不會影響網域。

## 新增更多網域 （縮小）
<a name="zoom"></a>

六角形架構非常適合微服務架構的原則。到目前為止顯示的架構範例包含單一網域 （或邊界內容）。應用程式通常包含多個網域，這些網域需要透過主要和次要轉接器進行通訊。每個網域代表微服務，與其他網域鬆散耦合。

![\[將網域新增至您的六邊形架構\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/hexagonal-architectures/images/domains.png)


在此架構中，每個網域都會使用不同的一組運算環境 （運算環境）。（每個網域也可能有多個運算環境，如先前範例所示。) 每個網域定義了透過連接埠與其他網域通訊所需的界面。連接埠是使用主要和次要轉接器來實作。如此一來，如果轉接器發生變更，網域就不會受到影響。此外，網域會彼此分離。

在上圖中顯示的架構範例中，Lambda、Amazon EC2、Amazon ECS 和 AWS Fargate 會用作主要轉接器。API Gateway、Elastic Load Balancing、EventBridge 和 Amazon SQS 用作次要轉接器。