

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

# 規劃 Amazon ECS 解決方案架構
<a name="ecs-configuration"></a>

您必須規劃應用程式架構，使其能夠在*容器*上執行。容器是軟體開發的標準化單元，可容納軟體應用程式執行所需的所有一切。這包括相關代碼、執行時間、系統工具和系統庫。容器依據稱為*映像*的唯讀範本而建立。容器映像是靜態成品，內含應用程式及其相依性。映像通常由 Dockerfile 建立。Dockerfile 是純文字檔案，內含用於建置容器的指令。建置後，這些映像會存放在*登錄檔*(如 Amazon ECR) 中，可供下載。

建立並儲存映像後，您可以建立 Amazon ECS 任務定義。*任務定義*是您應用程式的藍圖。其是一種 JSON 格式的文字檔案，描述了構成應用程式的參數和一個或多個容器。例如，您可以使用其來指定作業系統的映像和參數、要使用的容器、要為您的應用程式開啟的連接埠，以及任務中的容器要使用的資料磁碟區。任務定義可用的特定參數取決於您特定應用程式的需求。

定義任務定義之後，您可以將其部署為叢集上的服務或任務。*叢集*是在註冊至叢集的容量基礎結構上執行的任務或服務的邏輯群組。

*任務*是在叢集內將任務定義執行個體化。您可以執行獨立任務，也可以將任務作為服務的一部分執行。您可以使用 Amazon ECS *服務*在 Amazon ECS 叢集中同時執行和維護您所需的任務數量。其運作方式為，如果有任何任務因任何原因而出現故障或停止，Amazon ECS 服務排程器就會根據您的任務定義啟動另一個執行個體。這樣就可以取代該任務，從而在服務中保持所需的任務數量。

*容器代理程式*在 Amazon ECS 叢集內的每個容器執行個體上執行。代理程式會將目前正在執行的任務和您容器的資源使用率的相關資訊傳送至 Amazon ECS。只要接收到 Amazon ECS 的請求即開始和停止任務。

部署任務或服務後，您可以使用下列任何工具來監控部署和應用程式：
+ CloudWatch
+ 執行時期監控

## Capacity
<a name="ecs-configuration-capacity"></a>

容量即容器執行所在的基礎結構。Amazon ECS 為叢集提供三種基礎結構類型：
+ Amazon ECS 受管執行個體 - AWS 完整管理您帳戶中執行的基礎 Amazon EC2 執行個體，包括佈建、修補和擴展。此選項能在效能、成本效益與操作簡易性之間實現最佳平衡。
+ 無伺服器 (Fargate) – 只需為任務實際使用的資源付費，無需管理任何基礎結構。適用於變動性工作負載與需要快速上手的案例。
+ Amazon EC2 執行個體 – 您可以直接管理底層 Amazon EC2 執行個體，包括執行個體選擇、設定與維護。

使用 Amazon ECS 受管執行個體的時機：
+ 您希望兼具 Fargate 的簡易性，同時對底層基礎結構擁有更多控制權。
+ 您需要可預測的效能與成本最佳化。
+  AWS 您想要在維持彈性的同時處理基礎設施管理。

使用 Fargate 的時機：
+ 您希望專注於應用程式，無需管理基礎結構。
+ 您的工作負載具有變動性或不可預測性。
+ 您剛接觸容器技術，希望有最簡單的部署選項。

使用 Amazon EC2 執行個體的時機：
+ 您需要特殊的硬體需求 (GPU 加速、高效能運算)。
+ 您需要容量保留或特定類型的執行個體。
+ 您需要特殊權限功能或自訂 AMI。

您可以在建立叢集時指定基礎結構。您也可以在註冊任務定義時指定基礎結構類型。任務定義將基礎結構稱為「啟動類型」。您也可以使用容量提供者。

## 服務端點
<a name="ecs-configuration-service-endpoint"></a>

服務端點是 Amazon ECS 的進入點 URL，您可透過網際網路通訊協定第 4 版 (IPv4) 或第 6 版 (IPv6)，以程式設計方式連線至該服務。依預設，您透過程式設計方式連線至 Amazon ECS 的請求，會使用僅支援 IPv4 請求的服務端點。若要透過 IPv4 或 IPv6 請求，以程式設計方式連線至 Amazon ECS，您可使用雙堆疊端點。如需有關雙堆疊端點的資訊，請參閱[使用 Amazon ECS 雙堆疊端點](dual-stack-endpoint.md)。

## 聯網
<a name="ecs-configuration-networking"></a>

AWS 資源是在子網路中建立的。若使用 EC2 執行個體，Amazon ECS 會在您建立叢集時指定的子網路中啟動執行個體。任務將在執行個體子網路中執行。若使用 Fargate 或內部部署虛擬機器，您需要在執行任務或建立服務時指定子網路。

根據您的應用程式，子網路可以是私有或公有子網路，子網路可以位於下列任何 AWS 資源中：
+ 可用區域
+ 本機區域
+ Wavelength 區域
+ AWS 區域
+ AWS Outposts 

如需詳細資訊，請參閱 [共用子網路、Local Zone 與 Wavelength Zone 中的 Amazon ECS 應用程式](cluster-regions-zones.md) 或 [上的 Amazon Elastic Container Service AWS Outposts](using-outposts.md) 。

您可以透過下列任一方法，將應用程式連線至網際網路：
+ 具有網際網路閘道的公有子網路

  若公開應用程式需要大量頻寬或極低延遲，請使用公有子網路。適用案例包括影片串流與遊戲服務。
+ 具有 NAT 閘道的私有子網路

   若要保護容器免受外部直接存取，請使用私有子網路。適用案例包括支付處理系統或儲存使用者資料與密碼的容器。
+ AWS PrivateLink

  使用 AWS PrivateLink 在 VPCs、 AWS 服務和內部部署網路之間建立私有連線，而不會將您的流量暴露到公有網際網路。

## 功能存取
<a name="ecs-configuration-features"></a>

您可以使用 Amazon ECS 帳戶設定存取下列功能：
+ Container Insights

  CloudWatch Container Insights 會從您的容器化應用程式和微型服務收集、彙總及總結指標和日誌。指標包含 CPU、記憶體、磁碟和網路這類資源的使用率。
+ `awsvpc` 主幹功能

  對於某些 EC2 執行個體類型，您可以在新啟動的容器執行個體上提供額外的網路介面 (ENI)。
+ 標記授權

  使用者必須擁有建立資源的動作許可，例如 `ecsCreateCluster`。如果在資源建立動作中指定標籤， 會對`ecs:TagResource`動作 AWS 執行額外的授權，以驗證使用者或角色是否具有建立標籤的許可。
+ Fargate FIPS-140 法規遵循

  Fargate 支援聯邦資訊處理標準 (FIPS-140)，該標準具體說明了保護敏感資訊的加密模組的安全要求。這是目前的美國和加拿大政府標準，且適用於需要符合聯邦資訊安全管理法案 (FISMA) 或聯邦風險和授權管理計劃 (FedRAMP) 的系統。
+ Fargate 任務淘汰時間變更

  您可以設定 Fargate 任務淘汰以進行修補之前的等待期間。
+ 雙堆疊 VPC

  允許任務透過 IPv4 和/或 IPv6 進行通訊。
+ Amazon Resource Name (ARN) 格式

  部分功能 (例如標籤授權) 需要使用新的 Amazon Resource Name (ARN) 格式。

如需詳細資訊，請參閱[透過帳戶設定使用 Amazon ECS 功能](ecs-account-settings.md)。

## IAM 角色
<a name="ecs-configuration-iam-roles"></a>

IAM 角色是您可以在帳戶中建立的另一種 IAM 身分，具有特定的許可。在 Amazon ECS 中，您可以建立角色，將相關許可授予 Amazon ECS 資源 (例如容器或服務)。

部分 Amazon ECS 功能需要角色才能使用。如需詳細資訊，請參閱[適用於 Amazon ECS 的 IAM 角色](ecs-iam-role-overview.md)。

## 記錄
<a name="monitor-logging"></a>

記錄與監控是維護 Amazon ECS 工作負載可靠性、可用性與效能的重要環節。下列選項可供使用：
+ Amazon CloudWatch 日誌 - 將日誌路由到 Amazon CloudWatch
+ FireLens for Amazon ECS - 將日誌路由到 AWS 服務或 AWS Partner Network 目的地，以進行日誌儲存和分析。 AWS Partner Network 是一個全球合作夥伴社群，利用計劃、專業知識和資源來建置、行銷和銷售客戶產品。

## 容器映像最佳實務
<a name="ecs-configuration-container-best-practices-summary"></a>

以下是建構 Amazon ECS 容器映像的核心原則：
+ 映像中包含所有相依性
+ 每個容器執行一個程序
+ 處理 `SIGTERM` 實現優雅關閉
+ 將日誌寫入 `stdout` 與 `stderr`
+ 使用唯一標籤，避免在生產中使用 `latest`