

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

# 為 Amazon ECS 規劃 EC2 容量架構
<a name="launch-type-ec2"></a>

對於必須進行成本最佳化的大型工作負載，可使用 EC2 容量。

在考慮如何透過 EC2 建置工作定義與服務的模型時，建議思考哪些程序必須一起執行，以及如何針對各元件進行擴展。

舉例來說，假設由下列元件組成的應用程式：
+ 在網頁顯示資訊的前端服務
+ 為前端服務提供 API 的後端服務
+ 資料存放區

在此範例中，請建立將用於常見用途的容器分為同一群組的任務定義。將不同的元件拆分為多個任務定義。下列的範例叢集具有在三個前端服務容器上執行的三個容器執行個體、兩個後端服務容器，以及一個資料存放區服務容器。

您可以將任務定義中的相關容器分組，例如必須一起執行的連結容器。例如，將日誌串流容器新增到您的前端服務，並將此服務包含在相同的任務定義中。

在您擁有任務定義之後，您可以從中建立服務，以維護您所需任務的可用性。如需詳細資訊，請參閱[建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)。在您的服務中，您可以建立容器與 Elastic Load Balancing 負載平衡器的關聯。如需詳細資訊，請參閱[使用負載平衡分佈 Amazon ECS 服務流量](service-load-balancing.md)。當您的應用程式需求變更時，您可以更新您的服務以調整所需任務的數量。或者，您也可以更新您的服務以部署任務中的新版容器。如需詳細資訊，請參閱[更新 Amazon ECS 服務](update-service-console-v2.md)。

![\[具有三個執行個體的應用程式架構範例。執行個體 1 具有前端服務容器和資料庫服務容器。執行個體 2 與執行個體 3 皆包含前端服務容器和後端服務容器。\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/images/application.png)


# Amazon ECS 上 EC2 與外部執行個體的容器映像提取行為
<a name="pull-behavior"></a>

容器啟動所需的時間會因底層容器映像而異。例如，比起各自的精簡版本 (Debian-slim、Ubuntu-slim 與 Amazon-slim) 或較小型的基礎映像 (Alpine)，較大型的映像 (Debian、Ubuntu 與 Amazon1/2 的完整版本) 可能需要更長的啟動時間，因為容器中執行的服務數量更多。

當 Amazon ECS 代理程式啟動任務時，會從其遠端登錄檔中提取 Docker 映像檔，然後快取一份本機副本。若為應用程式的每個版本使用新的映像標籤，此快取行為便不再必要。

`ECS_IMAGE_PULL_BEHAVIOR` 代理程式參數會決定映像提取行為。下列選項可供使用：
+ `ECS_IMAGE_PULL_BEHAVIOR`: `default`

  系統會從遠端提取映像。若提取失敗，則使用執行個體中的快取映像。
+ `ECS_IMAGE_PULL_BEHAVIOR`: `always`

  系統會從遠端提取映像。若提取失敗，則任務會失敗。

若要加速部署，請將 Amazon ECS 代理程式參數設定為下列任一值：
+ `ECS_IMAGE_PULL_BEHAVIOR`: `once`

  只有當相同容器執行個體上的前一個任務未提取過映像，或快取映像已由自動化映像清理程序移除時，才會從遠端提取該映像。否則，將使用執行個體上的快取映像。這可確保不會發生非必要的映像提取。
+ `ECS_IMAGE_PULL_BEHAVIOR`: `prefer-cached`

  如果沒有快取映像，將會從遠端提取映像。否則，將使用執行個體上的快取映像。為了確保快取映像不會被移除，容器會停用自動映像檔清理功能。

將 `ECS_IMAGE_PULL_BEHAVIOR` 參數設定為上述任一值可節省時間，因為 Amazon ECS 代理程式會直接使用已下載的現有映像。對於較大型的 Docker 映像檔，透過網路提取可能需要 10 至 20 秒的下載時間。