

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

# Amazon ECS 叢集
<a name="clusters"></a>

Amazon ECS 叢集是任務或服務邏輯分組，可為容器化應用程式提供基礎結構容量。建立叢集時，可從三種主要基礎結構類型中選擇，每種類型都針對不同的使用案例與操作需求進行最佳化。

## 選擇合適的叢集類型
<a name="cluster-types-overview"></a>

Amazon ECS 為叢集提供三種基礎結構類型。選擇最符合工作負載需求、操作偏好設定與成本最佳化目標的類型：

Amazon ECS 受管執行個體 (建議)  
**最適合大多數工作負載** - AWS 完整管理基礎 Amazon EC2 執行個體，包括佈建、修補和擴展。此選項能在效能、成本效益與操作簡易性之間實現最佳平衡。  
**使用時機：**  
+  AWS 您想要處理基礎設施管理
+ 需要具成本效益、帶自動最佳化功能的運算
+ 想要專注於應用程式而不是基礎結構
+ 需要具有彈性擴展的可預測效能

Fargate  
**無伺服器運算** – 只需為任務實際使用的資源付費，無需管理任何基礎結構。適用於變動性工作負載與需要快速上手的案例。  
**使用時機：**  
+ 想要完全無伺服器營運
+ 有無法預測或可變的工作負載
+ 想要將營運開銷降至最低
+ 需要快速部署與擴展

Amazon EC2 執行個體  
**完全控制** – 您可以直接管理底層 Amazon EC2 執行個體，包括執行個體選擇、設定與維護。  
**使用時機：**  
+ 需要特定的執行個體類型或組態
+ 現有 Amazon EC2 基礎結構可以利用
+ 需要自訂 AMI 或專用軟體
+ 需要對底層基礎結構擁有最大控制

**注意**  
Amazon ECS 受管執行個體是大多數新工作負載的建議選擇，因為它提供最佳的效能、成本最佳化和操作簡單性，同時允許 AWS 處理基礎設施管理任務。

## 叢集元件
<a name="cluster-components"></a>

除基礎結構容量外，叢集還包含下列資源：
+ 執行任務和服務的網路 (VPC 和子網路)

  當您將 Amazon ECS 受管執行個體或 Amazon EC2 執行個體用於容量時，子網路可以位於可用區域、Local Zones、Wavelength 區域或 AWS Outposts。
+ 選用的命名空間

  命名空間用於與 Service Connect 進行服務間通訊。
+ 監控選項

  CloudWatch Container Insights 需要額外付費，且為全受管服務。此服務會自動收集、彙總及總結 Amazon ECS 指標和日誌。

## 叢集概念
<a name="cluster-concepts"></a>

以下是有關 Amazon ECS 叢集的一般概念。
+ 可透過建立叢集來分隔資源。
+ 叢集是 AWS 區域 特定的。
+ 叢集可以處於如下任一狀態。  
ACTIVE  
叢集已準備好接受任務，如果適用，您可以向叢集註冊容器執行個體。  
佈建中  
叢集具有與其相關聯的容量提供者，並且將建立容量提供者所需的資源。  
取消佈建中  
叢集具有與其相關聯的容量提供者，並且將刪除容量提供者所需的資源。  
失敗  
叢集具有與其相關聯的容量提供者，並且無法建立容量提供者所需的資源。  
非作用中  
已刪除叢集。具有 `INACTIVE` 狀態的叢集可能會在您的帳戶中保持可探索一段時間。此行為未來可能會變更，因此請確保您不會依賴 `INACTIVE` 叢集的留存。
+ 叢集可以包含託管於 Amazon ECS Managed Instances、 AWS Fargate、Amazon EC2 執行個體或外部執行個體上的任務組合。任務可以當作啟動類型或容量提供者策略在 Amazon ECS 受管執行個體、Fargate 或 EC2 基礎結構上執行。如果您使用 EC2 容量提供者，Amazon ECS 不會追蹤和擴展 Amazon EC2 Auto Scaling 群組的容量。
+ 叢集可以同時包含 Amazon ECS 受管執行個體容量提供者、Auto Scaling 群組容量提供者以及 Fargate 容量提供者。容量提供者策略只能包含 Amazon ECS 受管執行個體容量提供者、Auto Scaling 群組容量提供者或 Fargate 容量提供者。
+ 您可以針對 Amazon ECS 受管執行個體與 EC2 或 Auto Scaling 群組容量提供者，分別採用不同的執行個體類型。一個執行個體一次只能註冊到一個叢集。
+ 您可以透過建立自訂 IAM 政策來限制對叢集的存取。如需詳細資訊，請參閱 [Amazon ECS 叢集範例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)中的 [Amazon Elastic Container Service 身分型政策範例](security_iam_id-based-policy-examples.md)一節。
+ 您可以使用服務自動擴展功能實現 Fargate 任務擴展。如需詳細資訊，請參閱[自動擴展您的 Amazon ECS 服務](service-auto-scaling.md)。
+ 您可以為叢集設定預設的 Service Connect 命名空間。設定預設的 Service Connect 命名空間之後，藉由開啟 Service Connect，在叢集中建立的任何新服務都可新增為命名空間中的用戶端服務。不需任何其他設定。如需詳細資訊，請參閱[使用 Service Connect 以利用簡稱連線 Amazon ECS 服務](service-connect.md)。

## 容量提供者
<a name="capacity-providers"></a>

Amazon ECS 容量提供者會管理叢集中任務的基礎設施擴展。每個叢集可以有一或多個容量提供者和選用的容量提供者策略。您可以將預設容量提供者策略指派給叢集。容量提供者策略會決定任務在叢集的容量提供者之間分散的方式。當您執行獨立任務或建立服務時，可以使用叢集的預設容量提供者策略，也可以使用能覆寫預設值的容量提供者策略。僅當您未為任務或服務指定啟動類型或容量提供者策略時，叢集的預設容量提供者策略才適用。若提供任一參數，則不會使用預設策略。

Amazon ECS 為叢集提供三種類型的容量提供者：

Amazon ECS 受管執行個體容量提供者  
AWS 完整管理基礎 Amazon EC2 執行個體，包括佈建、修補、擴展和生命週期管理。這能在效能、成本效益與操作簡易性之間實現最佳平衡。Amazon ECS 受管執行個體容量提供者會依據工作負載需求，自動最佳化執行個體選擇與擴展。  
透過 Amazon ECS 受管執行個體可享如下優勢：  
+ 執行個體自動佈建與擴展
+ 受管修補與安全性更新
+ 透過智慧型執行個體選擇實現成本最佳化
+ 降低營運開銷

Fargate 容量提供者  
無伺服器運算：只需為任務實際使用的資源付費，無需管理任何基礎結構。您只需要將預先定義的容量提供者 (Fargate 及 Fargate Spot) 與叢集建立關聯。

Auto Scaling 群組容量提供者  
當您為容量使用 Amazon EC2 執行個體時，可以使用 Auto Scaling 群組管理 Amazon EC2 執行個體。Auto Scaling 能確保您有正確的 Amazon EC2 執行個體數量來處理應用程式負載。您可以完全控制底層基礎結構。

叢集可以包含託管於 Amazon ECS Managed Instances、 AWS Fargate、Amazon EC2 執行個體或外部執行個體上的任務組合。任務可以當作啟動類型或容量提供者策略在 Amazon ECS 受管執行個體、Fargate 或 EC2 基礎結構上執行。如果您使用 EC2 作為啟動類型，Amazon ECS 就不會追蹤和擴展 Amazon EC2 Auto Scaling 群組的容量。

叢集可以同時包含 Amazon ECS 受管執行個體容量提供者、Auto Scaling 群組容量提供者以及 Fargate 容量提供者。容量提供者策略只能包含 Amazon ECS 受管執行個體容量提供者、Auto Scaling 群組容量提供者或 Fargate 容量提供者。

# Amazon ECS 受管執行個體叢集
<a name="managed-instance-clusters"></a>

Amazon ECS 容量提供者會管理叢集中任務的基礎設施擴展。建立叢集之後，您需為該叢集建立一或多個容量提供者，以及選用的容量提供者策略。容量提供者策略會決定任務在叢集的容量提供者之間分散的方式。當您執行獨立任務或建立服務時，可以使用叢集的預設容量提供者策略，也可以使用能覆寫預設值的容量提供者策略。

Amazon ECS 受管執行個體具有如下容量提供者。


| Type | 執行個體選擇準則 | 
| --- | --- | 
| 預設 | 符合下列任務定義與服務參數需求且最具成本效益的執行個體：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/managed-instance-clusters.html) | 
| Custom | 符合您建立叢集時指定的屬性與類型需求的執行個體。如需有關這些屬性的資訊，請參閱 [Amazon ECS 容器執行個體屬性](task-placement-constraints.md#attributes)。如需有關執行個體類型的資訊，請參閱 Amazon EC2 Instance Types 中的 [Amazon EC2 instance type specifications](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-type-specifications.html)。 | 

Amazon ECS 會啟動執行個體，並將這些執行個體與 Amazon ECS 受管執行個體容量提供者建立關聯。對於自訂容量提供者，Amazon ECS 也會建立容量提供者。

# 為 Amazon ECS 受管執行個體建立叢集
<a name="create-cluster-managed-instances"></a>

您可以透過建立叢集，定義任務與服務執行所在的基礎結構。

當您為 Amazon ECS 受管執行個體建立叢集時，Amazon ECS 會自動使用預設組態建立受管執行個體容量提供者。此容量提供者會為您的工作負載選取成本最佳化最高的執行個體類型。如果您需要特定的執行個體屬性或類型，也可以建立自訂容量提供者。

為了盡量簡化叢集建立程序，主控台有許多選擇的預設選項。
+ 在 中建立與叢集 AWS Cloud Map 同名的預設命名空間。命名空間可讓您在叢集中建立的服務連線到命名空間中的其他服務，而不需要額外的組態。

  如需詳細資訊，請參閱[互連 Amazon ECS 服務](interconnecting-services.md)。

您可以修改下列選項：
+ 變更與叢集相關聯的預設命名空間。

  命名空間可讓您在叢集中建立的服務連線到命名空間中的其他服務，而不需要額外的組態。預設命名空間與叢集名稱相同。如需詳細資訊，請參閱[互連 Amazon ECS 服務](interconnecting-services.md)。
+ 為您的受管儲存指派 AWS KMS 金鑰。如需有關如何建立金鑰的資訊，請參閱 *AWS Key Management Service User Guide* 中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 新增標籤以協助您識別叢集。

## 先決條件
<a name="create-cluster-managed-instances-prerequisites"></a>

開始之前，請務必先完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟，並指派適當的 IAM 許可。如需詳細資訊，請參閱[Amazon ECS 叢集範例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。

建立叢集的使用者必須具有額外許可：`iam:CreateServiceLinkedRole`。

當您未指定 時`instanceRequirements`，Amazon ECS 會根據您的任務定義需求，自動選取成本最佳化最高的執行個體類型。若要使用特定執行個體屬性或類型，請使用 建立容量提供者`instanceRequirements`。

了解如何選擇執行個體。如需詳細資訊，請參閱[Amazon ECS 受管執行個體的執行個體選擇最佳實務](managed-instances-instance-selection-best-practices.md)。

您有 Amazon ECS 受管執行個體所需的 IAM 角色。其中包含：
+ **基礎設施角色** - 允許 Amazon ECS 代表您呼叫 AWS 服務，以管理 Amazon ECS 受管執行個體基礎設施。

  如需詳細資訊，請參閱[Amazon ECS 基礎結構 IAM 角色](infrastructure_IAM_role.md)。
+ **執行個體設定檔** – 為在受管執行個體上執行的 Amazon ECS 容器代理程式與 Docker 常駐程式提供許可。

  如需詳細資訊，請參閱[Amazon ECS 受管執行個體執行個體設定檔](managed-instances-instance-profile.md)。

## 主控台程序
<a name="create-cluster-managed-instances-console"></a>

**建立新叢集 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇 **Create cluster** (建立叢集)。

1. 在**叢集組態**下，設定下列項目：
   + 在**叢集名稱**下輸入唯一的名稱。

     名稱可以包含最多 255 個字母 (大小寫)、數字與連字號。
   + (選用) 若要讓 Service Connect 使用的命名空間與叢集名稱不同，請在**命名空間**中輸入唯一的名稱。

1. 若是**自訂容量提供者**，請執行以下步驟：
   + 對於**選取 EC2 容量取得方式**，選擇 **Amazon ECS 受管執行個體**。
   + 對於「執行個體設定檔」，選擇對應的執行個體設定檔角色。
   + 在「基礎結構角色」欄位中，選擇對應的基礎結構角色。
   + 若要使用自訂容量提供者，請在**執行個體選擇**欄位中選擇**使用自訂**。然後，為各屬性輸入對應的**屬性值**。

1. (選用) 使用 Container Insights，展開**監控**區段，然後選擇下列任一選項：
   + 若要使用建議的具有增強可觀測性的 Container Insights，請選擇**具有增強可觀測性的 Container Insights**。
   + 若要使用 Container Insights，請選擇 **Container Insights**。

1. (選用) 加密受管儲存上的資料。在**加密**下，針對**受管儲存**，輸入您要用來加密受管儲存資料的 AWS KMS 金鑰 ARN。

1. (選用) 為協助識別您的叢集，請展開 **Tags** (標籤)，然後設定標籤。

   [新增標籤] 選擇**新增標籤**，並執行下列動作：
   + 在**金鑰**欄位中，輸入金鑰名稱。
   + 在**值**欄位中，輸入金鑰值。

1. 選擇**建立**。

## AWS CLI 程序
<a name="create-cluster-managed-instances-cli"></a>

您可以使用 AWS CLI為 Amazon ECS 受管執行個體建立叢集。使用 AWS CLI的最新版本。如需有關如何升級至最新版本的詳細資訊，請參閱 [Installing or updating to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**注意**  
您可以使用雙堆疊服務端點，透過 IPv4 和 IPv6 AWS AWS CLI從 、 SDKs 和 Amazon ECS API 與 Amazon ECS 互動。如需詳細資訊，請參閱[使用 Amazon ECS 雙堆疊端點](dual-stack-endpoint.md)。

**建立新的叢集 (AWS CLI)**

1. 使用下列命令以唯一名稱建立叢集：

   ```
   aws ecs create-cluster --cluster-name managed-instances-cluster
   ```

   輸出：

   ```
   {
       "cluster": {
           "status": "ACTIVE", 
           "defaultCapacityProviderStrategy": [], 
           "statistics": [], 
           "capacityProviders": [], 
           "tags": [], 
           "clusterName": "managed-instances-cluster", 
           "settings": [
               {
                   "name": "containerInsights", 
                   "value": "disabled"
               }
           ], 
           "registeredContainerInstancesCount": 0, 
           "pendingTasksCount": 0, 
           "runningTasksCount": 0, 
           "activeServicesCount": 0, 
           "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster"
       }
   }
   ```

1. (選用) 若要為叢集啟用具有增強可觀測性的 Container Insights，請使用下列命令：

   ```
   aws ecs put-account-setting --name containerInsights --value enhanced
   ```

1. (選用) 若要將標籤新增至叢集，請使用下列命令：

   ```
   aws ecs tag-resource --resource-arn arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster --tags key=Environment,value=Production
   ```

## 後續步驟
<a name="cluster-next-steps-managed-instances"></a>

為 Amazon ECS 受管執行個體建立任務定義。如需詳細資訊，請參閱[使用主控台建立 Amazon ECS 任務定義](create-task-definition.md)。

將應用程式作為獨立任務執行，或作為服務的組成分執行。如需詳細資訊，請參閱下列內容：
+ [將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md)
+ [建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)

# 更新叢集以使用 Amazon ECS 受管執行個體
<a name="update-cluster-managed-instances"></a>

您可以將現有叢集更新為使用 Amazon ECS 受管理執行個體。

當您將 Amazon ECS 受管執行個體新增至叢集時，Amazon ECS 會自動使用預設組態建立受管執行個體容量提供者。此容量提供者會為您的工作負載選取成本最佳化程度最高的一般用途執行個體類型。如果您需要特定的執行個體屬性或類型，也可以建立自訂容量提供者。

## 先決條件
<a name="update-cluster-managed-instances-prerequisites"></a>

當您未指定 時`instanceRequirements`，Amazon ECS 會根據您的任務定義需求，自動選取成本最佳化最高的執行個體類型。若要使用特定執行個體屬性或類型，請使用 建立容量提供者`instanceRequirements`。

您有 Amazon ECS 受管執行個體所需的 IAM 角色。其中包含：
+ **基礎設施角色** - 允許 Amazon ECS 代表您呼叫 AWS 服務，以管理 Amazon ECS 受管執行個體基礎設施。

  如需詳細資訊，請參閱[Amazon ECS 基礎結構 IAM 角色](infrastructure_IAM_role.md)。
+ **執行個體設定檔** – 為在受管執行個體上執行的 Amazon ECS 容器代理程式與 Docker 常駐程式提供許可。

  如需詳細資訊，請參閱[Amazon ECS 受管執行個體執行個體設定檔](managed-instances-instance-profile.md)。

## 更新考量
<a name="cluster-update-considerations-managed-instances"></a>

為 Amazon ECS 受管執行個體更新叢集時，建議考量下列事項：
+ 執行中的任務 – 更新叢集設定不會影響目前執行中的任務。變更將套用至更新後啟動的新任務。
+ 容量提供者變更 – 如果修改容量提供者設定，現有的受管執行個體將持續執行，但新的執行個體將使用更新的組態。
+ 監控變更 – 啟用或停用 Container Insights 將影響整個叢集的指標集合。

## 主控台程序
<a name="update-cluster-managed-instances-console"></a>

**更新叢集 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上選取要更新的叢集。

1. 選擇**更新叢集**。

1. (選用) 若要修改容量提供者設定，請在**自訂容量提供者**區段中視需要更新下列項目：
   + 在**執行個體設定檔**欄位中，視需要選擇不同的執行個體設定檔角色。
   + 在**基礎結構角色**欄位中，視需要選擇不同的基礎結構角色。
   + 若要使用自訂容量提供者，請在**執行個體選擇**欄位中更新**屬性值**設定。

1. 選擇**更新**。

## AWS CLI 程序
<a name="update-cluster-managed-instances-cli"></a>

您可以使用 AWS CLI為 Amazon ECS 受管執行個體更新叢集。使用 AWS CLI的最新版本。如需有關如何升級至最新版本的詳細資訊，請參閱 [Installing or updating to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**注意**  
您可以使用雙堆疊服務端點，透過 IPv4 和 IPv6 AWS AWS CLI從 、 SDKs 和 Amazon ECS API 與 Amazon ECS 互動。如需詳細資訊，請參閱[使用 Amazon ECS 雙堆疊端點](dual-stack-endpoint.md)。

**更新叢集 (AWS CLI)**

1. 為叢集建立容量提供者。執行以下命令：

   將 *user-input* 取代為實際值。

   ```
   aws ecs create-capacity-provider \
       --name my-managed-instances-provider \
       --managed-instances-provider \
       --instance-profile arn:aws:iam::123456789012:instance-profile/ecsInstanceProfile \
       --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRole \
       --instance-requirements '{
           "vCpuCount": {"min": 2, "max": 8},
           "memoryMiB": {"min": 4096, "max": 16384}
       }
   ```

1. 使用下列命令將容量提供者新增至叢集：

   將 *user-input* 取代為實際值。

   ```
   aws ecs put-cluster-capacity-providers --cluster managed-instances-cluster --capacity-providers my-managed-instances-provider --default-capacity-provider-strategy capacityProvider=my-managed-instances-provider,weight=1
   ```

# Amazon ECS 受管執行個體容量提供者
<a name="managed-instances-capacity-providers-concept"></a>

Amazon ECS 受管執行個體容量提供者提供容器運算模型，可讓您存取完整範圍 AWS 的功能和 Amazon EC2 產品，同時 AWS 管理操作和安全性責任。 會 AWS 處理軟體和作業系統修補、執行個體擴展和維護，讓您享有 Fargate 的操作優勢，同時維持對所有 AWS 功能和整合的存取。

Amazon ECS 會為 Amazon ECS 受管執行個體建立啟動範本。這定義了 Amazon ECS 啟動 Amazon ECS 受管執行個體的方式，包括任務的執行個體設定檔、網路與儲存組態、容量選項，以及彈性執行個體類型選擇的執行個體需求。

## 自訂容量提供者適用時機
<a name="when-to-use-managed-instances"></a>

若工作負載需要下列項目時，建議採用自訂容量提供者：
+ 特定運算需求：需要加速運算、特定 CPU 指令集、高網路效能或大型記憶體組態的應用程式，這些組態不適用於標準 Fargate 選項。
+ GPU 工作負載：機器學習推論、即時影像轉譯、影片編碼，或其他需要存取 NVIDIA 或 AMD GPUs 的 GPU 加速應用程式。
+ 容量保留：需要可預測容量可用性的任務關鍵工作負載。
+ 進階可觀測性：需要對基礎作業系統進行特殊權限存取的安全性和監控工具，例如 eBPF 型監控解決方案或網路分析工具。
+ 成本最佳化：可以受益於多任務置放、共用基礎設施元件，或需要最大化較大執行個體類型的使用率的工作負載。

## 監控選項
<a name="monitoring-options-managed-instances"></a>

Amazon ECS 受管執行個體提供全方位的監控功能，可協助追蹤容器化工作負載的效能、運作狀態與資源使用率。您可以根據營運需求，從不同的監控層級中進行選擇。
+ **基本監控** – 針對大多數指標以 5 分鐘為間隔提供基本指標，針對狀態檢查以 1 分鐘為間隔提供基本指標。此功能為預設啟用，不會產生額外的費用。
+ **詳細監控** –以 1 分鐘為間隔提供所有指標，藉此提供增強的可見性，從而能夠更快地偵測並回應營運問題。如需詳細資訊，請參閱[Amazon ECS 受管執行個體的詳細監控](monitoring-managed-instances.md#detailed-monitoring-managed-instances)。

這兩個監控選項都與 CloudWatch 無縫整合，可提供儀表板、警示與自動化回應，有助於維持最佳的應用程式效能與可用性。

## 容量提供者考量事項
<a name="capacity-provider-considerations-managed-instances"></a>

叢集可以同時包含 Amazon ECS 受管執行個體容量提供者、Auto Scaling 群組容量提供者以及 Fargate 容量提供者。容量提供者策略只能包含 Amazon ECS 受管執行個體容量提供者、Auto Scaling 群組容量提供者或 Fargate 容量提供者。

## 標籤傳播
<a name="tag-propagation-managed-instances"></a>

Amazon ECS 受管執行個體的容量提供者支援標籤傳播功能。透過標籤傳播功能，容量提供者管理的所有資源 (受管執行個體、Amazon ECS 容器執行個體、啟動範本、磁碟區、彈性網路介面)，皆會以在容量提供者層級指定的相同標籤進行標記。您可以在容量提供者建立期間指定標籤，同時將 `propagateTags` 參數指定為 `CAPACITY_PROVIDER` 來啟用標籤傳播功能。

如需有關標記 Amazon ECS 受管執行個體的詳細資訊，請參閱 [Amazon ECS 受管執行個體的標籤](instance-details-tags-managed-instances.md)。

# 更新 Amazon ECS 受管執行個體容量提供者的最佳實務
<a name="capacity-provider-managed-instances-best-practices"></a>

對於最高層級的安全與復原支援，建議將容量提供者視為不可變資源。若需更新容量提供者組態，請遵循以下建議的工作流程：

1. 透過更新後的組態**建立新容量提供者**，而不是修改現有的容量提供者。

1. **更新每個服務**以採用新的容量提供者，並允許完成部署作業。

1. 在確認新組態如預期般運作後，刪除**舊的容量提供者**。

此方法具備如下優勢：
+ **受控推展** – 每次更新一個服務，並監控相關影響。
+ **輕易復原** – 發生問題時可快速將服務復原為使用先前的容量提供者。
+ **縮小影響範圍** – 新組態的問題不會立即影響所有工作負載。

**注意**  
如果您使用的是 CloudFormation，請考慮保留舊容量提供者，直到稍後部署為止，以保留復原堆疊變更的能力。

雖然您可以就地更新容量提供者，但此方法會導致更大的未受控影響範圍。就地更新會將新設定套用至往後佈建的所有新容量，但不會觸發服務部署。這意味著，您可能要等到服務需要擴展時，才會發現組態問題。

# 為 Amazon ECS 受管執行個體建立容量提供者
<a name="create-capacity-provider-managed-instances"></a>

Amazon ECS 受管執行個體會使用容量提供者來管理工作負載的運算容量。當您在不指定 的情況下建立容量提供者時`instanceRequirements`，Amazon ECS 會自動選取最具成本最佳化的一般用途執行個體類型。您可以使用 建立容量提供者`instanceRequirements`，以指定執行個體屬性，例如執行個體類型、CPU 製造商、加速器類型和其他需求。

自訂容量提供者採用屬性型執行個體類型選擇機制，可讓您將執行個體需求表達為一組屬性。這些需求會自動轉換為所有相符的 Amazon EC2 執行個體類型，由此簡化執行個體類型組態的建立與維護。若要進一步了解執行個體需求與屬性型選擇，請參閱 *Amazon EC2 User Guide* 中的 [Amazon EC2 Fleet attribute-based instance type selection](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html) 文件。

## 先決條件
<a name="create-capacity-provider-managed-instances-prerequisites"></a>

開始之前，請確保您已完成下列事項：
+ 決定要使用的監控類型。如需詳細資訊，請參閱[Amazon ECS 受管執行個體的詳細監控](monitoring-managed-instances.md#detailed-monitoring-managed-instances)。
+ 已有現有的叢集，或計劃建立新叢集。如需詳細資訊，請參閱[為 Amazon ECS 受管執行個體建立叢集](create-cluster-managed-instances.md)。
+ 您有 Amazon ECS 受管執行個體所需的 IAM 角色。其中包含：
  + **基礎設施角色** - 允許 Amazon ECS 代表您呼叫 AWS 服務，以管理 Amazon ECS 受管執行個體基礎設施。

    如需詳細資訊，請參閱[Amazon ECS 基礎結構 IAM 角色](infrastructure_IAM_role.md)。
  + **執行個體設定檔** – 為在受管執行個體上執行的 Amazon ECS 容器代理程式與 Docker 常駐程式提供許可。

    如需詳細資訊，請參閱[Amazon ECS 受管執行個體執行個體設定檔](managed-instances-instance-profile.md)。

了解如何選擇執行個體。如需詳細資訊，請參閱[Amazon ECS 受管執行個體的執行個體選擇最佳實務](managed-instances-instance-selection-best-practices.md)。

## 主控台程序
<a name="create-capacity-provider-managed-instances-console"></a>

**為 Amazon ECS 受管執行個體建立容量提供者 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集的名稱。

1. 在叢集頁面上，選擇**基礎結構**索引標籤。

1. 在**容量提供者**區段，選擇**建立容量提供者**。

1. 在**容量提供者組態**區段，設定下列項目：
   + 在**容量提供者名稱**欄位中，輸入容量提供者的唯一名稱。
   + 在**容量提供者類型**欄位中，選擇 **Amazon ECS 受管執行個體**。

1. 在**執行個體組態**區段，設定下列項目：
   + 在**執行個體設定檔**欄位中，選擇為 Amazon ECS 受管執行個體建立的執行個體設定檔角色。
   + 在**基礎結構角色**欄位中，選擇為 Amazon ECS 受管執行個體建立的基礎結構角色。

1. 在**執行個體需求**區段下，指定執行個體的屬性。您可以設定下列項目的任意組合：
   + **vCPU 計數** – 指定 vCPU 的數量 (例如 `4` 或 `8-16` 的範圍)。
   + **記憶體 (MiB)** – 指定 MiB 中的記憶體數量 (例如 `8192` 或 `16384-32768` 的範圍)。
   + **執行個體類型** – 指定特定執行個體類型 (例如 `m5.large,m5.xlarge,c5.large`)。
   + **CPU 製造商** – 從 `intel`、`amd` 或 `amazon-web-services` 中選擇。
   + **加速器類型** – 指定加速器類型 (例如 `gpu`、`fpga` 或 `inference`)。
   + **加速器計數** – 指定加速器數量 (例如 `1` 或 `2-4` 的範圍)。

1. 在**進階組態**區段，選擇下列任一監控選項：
   + 若要讓 CloudWatch 傳送狀態檢查指標，請選擇**基本**。
   + 若要讓 CloudWatch 傳送所有指標指標，請選擇**詳細**。

1. (選用) 為協助識別容量提供者，請展開**標籤**區段，然後設定標籤。

   若要啟用從容量提供者到受管資源的標籤傳播，例如從容量提供者啟動的執行個體，請在**傳播標籤來源**欄位中選擇**容量提供者**。

   [新增標籤] 選擇**新增標籤**，並執行下列動作：
   + 在**金鑰**欄位中，輸入金鑰名稱。
   + 在**值**欄位中，輸入金鑰值。

1. 選擇**建立**。

## AWS CLI 程序
<a name="create-capacity-provider-managed-instances-cli"></a>

您可以使用 AWS CLI為 Amazon ECS 受管執行個體建立容量提供者。使用 AWS CLI的最新版本。如需有關如何升級至最新版本的詳細資訊，請參閱 [Installing or updating to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**為 Amazon ECS 受管執行個體建立容量提供者 (AWS CLI)**

1. 執行以下命令：

   ```
   aws ecs create-capacity-provider --cli-input-json file://capacity-provider-definition.json
   ```

   下列 `capacity-provider-definition.json` 可用來指定基本執行個體需求與執行個體儲存體大小，以及啟用標籤傳播：

   ```
   {
       "name": "my-managed-instances-provider",
       "cluster": "my-cluster",
       "tags": [ 
           { 
               "key": "version",
               "value": "test"
           }
       ],    
       "managedInstancesProvider": {
           "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole",
           "instanceLaunchTemplate": {
               "ec2InstanceProfileArn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole",
               "instanceRequirements": {
                   "vCpuCount": {
                       "min": 4,
                       "max": 8
                   },
                   "memoryMiB": {
                       "min": 8192,
                       "max": 16384
                   }
               },
               "networkConfiguration": {
                   "subnets": [
                       "subnet-abcdef01234567",
                       "subnet-bcdefa98765432"
                   ],
                   "securityGroups": [
                       "sg-0123456789abcdef"
                   ]
               },
               "storageConfiguration": {
                   "storageSizeGiB": 100
               },
               "monitoring": "basic"
           },
           "propagateTags": "CAPACITY_PROVIDER"
       }
   }
   ```

1. 驗證容量提供者是否建立成功：

   ```
   aws ecs describe-capacity-providers \
       --capacity-providers my-managed-instances-provider
   ```

## 後續步驟
<a name="capacity-provider-managed-instances-next-steps"></a>

建立容量提供者之後，即可在建立服務或執行任務時使用：
+ 若要將容量提供者用於服務，請參閱[建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)。
+ 若要將容量提供者用於獨立任務，請參閱[將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md)。

# 更新 Amazon ECS 受管執行個體監控
<a name="update-capacity-provider-managed-instances"></a>

您可以修改 Amazon ECS 受管執行個體容量提供者的監控選項，在基本監控與詳細監控之間進行變更。您可以透過監控選項調整監控資料的收集層級，無需重新建立容量提供者。

如需監控選項的詳細資訊，請參閱[監控 Amazon ECS 受管執行個體](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/monitoring-managed-instances.html)。

## 主控台程序
<a name="update-capacity-provider-managed-instances-console"></a>

**更新 Amazon ECS 受管執行個體的監控 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集的名稱。

1. 在叢集頁面上，選擇**基礎結構**索引標籤。

1. 在**進階組態**區段，選擇下列任一監控選項：
   + 若要讓 CloudWatch 傳送狀態檢查指標，請選擇**基本**。
   + 若要讓 CloudWatch 傳送所有指標指標，請選擇**詳細**。

1. 選擇**更新**。

若要更新與現有 Amazon ECS 受管執行個體容量提供者相關聯的標籤，請遵循如下步驟：

1. 在導覽窗格中，選擇**叢集**。

1. 在叢集頁面上，選擇**基礎結構**。

1. 在基礎結構頁面上，選擇已建立的容量提供者。

1. 在容量提供者頁面上，選擇**標籤**。

1. 在 **Tags (標籤)** 下，選擇 **Manage tags (管理標籤)**。

1. 若要新增標籤，請指定要新增之標籤的鍵值，然後選擇**儲存**。若要一次新增多個標籤，請為每個要新增的標籤選擇**新增標籤**。您最多可新增 50 個標籤。

   若要移除標籤，請選擇 **Remove** (移除)。
**注意**  
如果啟用標籤傳播，在建立容量提供者之後新增或移除的標籤，皆不適用於容量提供者先前建立的資源。

## AWS CLI 程序
<a name="update-capacity-provider-managed-instances-cli"></a>

您可以使用 AWS CLI為 Amazon ECS 受管執行個體更新容量提供者。使用 AWS CLI的最新版本。如需有關如何升級至最新版本的詳細資訊，請參閱 [Installing or updating to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**更新 Amazon ECS 受管執行個體的監控 (AWS CLI)**

1. 若要啟用詳細監控，請使用如下命令：

   ```
   aws ecs update-capacity-provider \
       --name my-managed-instances-provider \
       --managed-instances-provider '{
           "instanceLaunchTemplateUpdate": {
               "monitoring": "DETAILED"
           }
       }'
   ```

1. 若要啟用基本監控，請使用如下命令：

   ```
   aws ecs update-capacity-provider \
       --name my-managed-instances-provider \
       --managed-instances-provider '{
           "instanceLaunchTemplateUpdate": {
               "monitoring": "BASIC"
           }
       }'
   ```

# 刪除 Amazon ECS 受管執行個體容量提供者
<a name="delete-capacity-provider-managed-instances-console-v2"></a>

如果 Amazon ECS 受管執行個體容量提供者已使用完畢，即可將其刪除。刪除群組後，Amazon ECS 受管執行個體容量提供者會轉換為 `INACTIVE` 狀態。具有 `INACTIVE` 狀態的容量提供者可能會在您的帳戶中保持可探索一段時間。不過，此行為未來可能變動，因此不建議依賴 `INACTIVE` 容量提供者得以保存。刪除 Amazon ECS 受管執行個體容量提供者之前，必須從所有服務的容量提供者策略中移除容量提供者。您可以使用 `UpdateService` API 或 Amazon ECS 主控台中的更新服務工作流程，從服務的容量提供者策略中移除容量提供者。使用**強制執行新部署**選項，可確保使用容量提供者提供之 Amazon ECS 受管執行個體容量的任何任務都會轉換，以使用剩餘容量提供者的容量。

**刪除叢集的容量提供者 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集。

1. 在**叢集：*名稱***頁面上，選擇**基礎結構**、Amazon ECS 受管執行個體容量提供者，然後選擇**刪除**。

1. 在確認方塊中，輸入 **delete *Amazon ECS Managed Instances capacity provider name***

1. 選擇 **刪除**。

# 安全地停止在 Amazon ECS 受管執行個體上執行的 Amazon ECS 工作負載
<a name="managed-instance-task-scale-in-protect"></a>

您可以使用 Amazon ECS 任務縮減保護來保護任務，避免任務因服務擴展或部署的縮減事件終止。

某些應用程式需要一種機制來保護關鍵任務，避免任務在使用率較低時或服務部署期間因縮減事件終止。例如：
+ 您擁有佇列處理非同步應用程式，例如影片轉碼工作，即使累積服務使用率很低，其中部分任務仍需要執行數小時。
+ 遊戲應用程式會以任務的形式執行遊戲伺服器，即使所有使用者都已登出，也需要繼續執行，以減少伺服器重新開機的啟動延遲。
+ 部署新的程式碼版本時，您需要繼續執行任務，因為重新處理的費用很昂貴。

若要保護屬於服務的任務不會在縮減事件中終止，請將 `ProtectionEnabled` 屬性設定為 `true`。在將 `ProtectionEnabled` 設定為 true 時，任務預設會受到 2 小時保護。您隨後可以使用 `ExpiresInMinutes` 屬性自訂保護期間。任務的保護時間最短可至 1 分鐘，最長可達 2880 分鐘 (48 小時)。如果您使用的是 AWS CLI，您可以指定 `--protection-enabled`選項。

任務完成必要的工作之後，您可以將 `ProtectionEnabled` 屬性設定為 `false`，以便隨後的縮減事件終止任務。如果您使用的是 AWS CLI，您可以指定 `--no-protection-enabled`選項。

## 任務縮減保護機制
<a name="managed-instance-task-scale-in-protection-mechanisms"></a>

您可以使用 Amazon ECS 容器代理程式端點或 Amazon ECS API 來設定和取得任務縮減保護。
+ **Amazon ECS 容器代理程式端點**

  我們建議將 Amazon ECS 容器代理程式端點，用於可自行判斷是否需要保護的任務。針對以佇列為基礎或工作處理的工作負載使用此方法。

  當容器開始處理工作時 (例如使用 SQS 訊息)，您可以從容器內透過任務縮減保護端點路徑 `$ECS_AGENT_URI/task-protection/v1/state` 來設定 `ProtectionEnabled` 屬性。Amazon ECS 不會在縮減事件期間終止此任務。在任務完成工作之後，您可以使用相同的端點清除對 `ProtectionEnabled` 屬性的設定，使任務符合在後續縮減事件期間終止的資格。

  如需有關 Amazon ECS 容器代理程式端點的詳細資訊，請參閱 [Amazon ECS 任務縮減保護端點](managed-instance-task-scale-in-protection-endpoint.md)。
+ **Amazon ECS API**

  如果應用程式具有追蹤作用中任務狀態的元件，則可使用 Amazon ECS API 來設定與擷取任務縮減保護。使用 `UpdateTaskProtection` 將一或多個任務標記為受保護。使用 `GetTaskProtection` 擷取保護狀態。

  如果應用程式以 Amazon ECS 任務的形式託管遊戲伺服器工作階段，則可使用此方法。當使用者登入伺服器 (任務) 上的工作階段時，您可以將任務標示為受保護。使用者登出後，您可以清除專門針對此任務的保護設定，或根據您希望伺服器保持閒置的需求，定期清除不再具有作用中工作階段的類似任務的保護設定。

  如需詳細資訊，請參閱 *Amazon Elastic Container Service API Reference* 中的 [UpdateTaskProtection](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateTaskProtection.html) 與 [GetTaskProtection](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_GetTaskProtection.html)。

您可以將這兩種方法結合起來使用。例如，使用 Amazon ECS 代理程式端點，從容器內設定任務保護，並使用 Amazon ECS API，從外部控制器服務移除對任務保護的設定。

## 考量事項
<a name="managed-instance-task-scale-in-protection-considerations"></a>

使用任務縮減保護之前，請考量下列幾點：
+ 任務縮減保護僅支援從服務部署的任務。
+ 任務縮減保護支援從在 Amazon ECS 受管執行個體上執行的服務部署的任務。
+ 建議使用 Amazon ECS 容器代理程式端點，因為 Amazon ECS 代理程式具有內建的重試機制和更簡單的介面。
+ 您可以為已開啟保護的任務呼叫 `UpdateTaskProtection`，以重設任務縮減保護過期期間。
+ 判斷任務需要多久才能完成其必要的工作，並相應地設定 `expiresInMinutes` 屬性。如果您設定的保護過期期間超過必要的時間，則會產生費用，並會在部署新任務時面臨延遲。
+ 部署考量事項：
  + 如果服務使用滾動更新，則會建立新任務，但在 `protectionEnabled` 設定清除或過期之前執行舊版本的任務都不會終止。您可以將部署組態中的 `maximumPercentage` 參數調整為可允許在舊任務受保護時建立新任務的值。
  + 如果您使用 CloudFormation，則更新堆疊會有 3 小時的逾時。因此，如果您將任務保護設定為 3 小時以上，則 CloudFormation 部署可能會導致失敗和復原。

    在您的舊任務受到保護期間，CloudFormation 堆疊會顯示 `UPDATE_IN_PROGRESS`。如果任務縮減保護遭移除或在 3 小時視窗內過期，部署將會成功並變為 `UPDATE_COMPLETE` 狀態。如果部署停滯在 `UPDATE_IN_PROGRESS` 的時間超過 3 小時，其將失敗並顯示 `UPDATE_FAILED` 狀態，然後會復原至舊任務集。
  + 當受保護的任務導致部署 (滾動或藍/綠) 無法進入穩定狀態，Amazon ECS 會傳送服務事件，以便您採取補救措施。嘗試更新任務的受保護狀態時，如果您收到 `DEPLOYMENT_BLOCKED` 錯誤訊息，則表示該服務的受保護任務比服務所需的任務計數更多。若要解決此錯誤，請執行以下其中一個動作：
    + 等待目前的任務保護過期。然後設定任務保護。
    + 判斷可以停止哪些任務。然後使用 `UpdateTaskProtection`，並將 `protectionEnabled` 選項設為 `false` 來完成這些任務。
    + 將服務的所需任務計數提高到超過受保護任務的數目。

## 任務縮減保護所需的 IAM 許可
<a name="managed-instance-task-scale-in-protection-iam"></a>

任務必須具備具有如下許可的 Amazon ECS 任務角色：
+ `ecs:GetTaskProtection`：允許 Amazon ECS 容器代理程式呼叫 `GetTaskProtection`。
+ `ecs:UpdateTaskProtection`：允許 Amazon ECS 容器代理程式呼叫 `UpdateTaskProtection`。

# Amazon ECS 任務縮減保護端點
<a name="managed-instance-task-scale-in-protection-endpoint"></a>

Amazon ECS 容器代理程式會自動將 `ECS_AGENT_URI` 環境變體注入 Amazon ECS 任務的容器中，以提供與容器代理程式 API 端點互動的方法。

我們建議將 Amazon ECS 容器代理程式端點，用於可自行判斷是否需要保護的任務。

當容器開始處理工作時，您可以從容器內透過任務縮減保護端點路徑 `$ECS_AGENT_URI/task-protection/v1/state` 來設定 `protectionEnabled` 屬性。

從容器內對此 URI 發送 PUT 請求，設定任務縮減保護。對此 URI 的 GET 請求將傳回任務的目前保護狀態。

## 任務縮減保護請求參數
<a name="managed-instance-task-scale-in-protection-request"></a>

您可以使用具有下列請求參數的 `${ECS_AGENT_URI}/task-protection/v1/state` 端點來設定任務縮減保護。

`ProtectionEnabled`  
指定 `true` 來標記任務以實現保護。指定 `false` 以移除保護，並讓任務符合終止資格。  
類型：布林值  
必要：是

`ExpiresInMinutes`  
任務受到保護的分鐘數。您可以指定最短 1 分鐘到最長 2,880 分鐘 (48 小時)。在此期間，您的任務不會因 Service Auto Scaling 或部署中的縮減事件而終止。在此時段過後，將 `protectionEnabled` 參數設為 `false`。  
如未指定時間，則會自動保護任務 120 分鐘 (2 小時)。  
類型：整數  
必要：否

下列範例示範如何設定具有不同時段的任務保護。

**如何使用預設時段保護任務的範例**

此範例示範如何保護預設時段為 2 小時的任務。

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true}'
```

**60 分鐘保護任務的範例**

此範例示範如何使用 `expiresInMinutes` 參數保護任務 60 分鐘。

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":60}'      
```

**24 小時保護任務的範例**

此範例示範如何使用 `expiresInMinutes` 參數保護任務 24 小時。

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}'      
```

PUT 請求將傳回以下回應。

```
{
  "protection": {
    "ExpirationDate": "2023-12-20T21:57:44.837Z",
    "ProtectionEnabled": true,
    "TaskArn": "arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0"
  }
}
```

## 任務縮減保護回應參數
<a name="managed-instance-task-scale-in-protection-response"></a>

JSON 回應中的任務縮減保護端點 `${ECS_AGENT_URI}/task-protection/v1/state` 會傳回下列資訊。

`ExpirationDate`  
任務保護將到期的時間 (以 Epoch 時間表示)。如果任務未受到保護，則此值將為空。

`ProtectionEnabled`  
任務的保護狀態。如果已針對任務啟用縮減保護，則值為 `true`。否則為 `false`。

`TaskArn`  
容器所屬任務的完整 Amazon Resource Name (ARN)。

下列範例顯示了為受保護任務傳回的詳細資訊。

```
curl --request GET ${ECS_AGENT_URI}/task-protection/v1/state
```

```
{
    "protection":{
        "ExpirationDate":"2023-12-20T21:57:44Z",
        "ProtectionEnabled":true,
        "TaskArn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0"
    }
}
```

發生失敗時會傳回下列資訊。

`Arn`  
任務的完整 Amazon Resource Name (ARN)。

`Detail`  
與失敗相關的詳細資訊。

`Reason`  
失敗的原因。

下列範例顯示了為未保護任務傳回的詳細資訊。

```
{
    "failure":{
        "Arn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0",
        "Detail":null,
        "Reason":"TASK_NOT_VALID"
    }
}
```

發生例外狀況時會傳回下列資訊。

`requestID`  
造成例外狀況的 Amazon ECS API 呼叫 AWS 請求 ID。

`Arn`  
任務或服務的完整 Amazon Resource Name (ARN)。

`Code`  
錯誤代碼。

`Message`  
錯誤訊息。  
如果出現 `RequestError` 或 `RequestTimeout` 錯誤，則可能是聯網問題。嘗試對 Amazon ECS 使用 VPC 端點。

以下範例顯示了發生錯誤時傳回的詳細資訊。

```
{
    "requestID":"12345-abc-6789-0123-abc",
    "error":{
        "Arn":"arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0",
        "Code":"AccessDeniedException",
        "Message":"User: arn:aws:sts::444455556666:assumed-role/my-ecs-task-role/1234567890abcdef0 is not authorized to perform: ecs:GetTaskProtection on resource: arn:aws:ecs:us-west-2:555555555555:task/test/1234567890abcdef0 because no identity-based policy allows the ecs:GetTaskProtection action"
    }    
}
```

如果 Amazon ECS 代理程式因為網路問題或 Amazon ECS 控制平面關閉等原因而無法從 Amazon ECS 端點獲得回應，則會出現下列錯誤。

```
{
  "error": {
    "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0",
    "Code": "RequestCanceled",
    "Message": "Timed out calling Amazon ECS Task Protection API"
  }
}
```

當 Amazon ECS 代理程式從 Amazon ECS 中取得限流例外狀況時，會出現下列錯誤。

```
{
  "requestID": "12345-abc-6789-0123-abc",
  "error": {
    "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0",
    "Code": "ThrottlingException",
    "Message": "Rate exceeded"
  }
}
```

# Fargate 的 Amazon ECS 叢集
<a name="fargate-capacity-providers"></a>

使用 AWS Fargate 容量提供者的 Amazon ECS，您可以將 Fargate 和 Fargate Spot 容量與 Amazon ECS 任務搭配使用。

透過 Fargate Spot，您能以折扣價 (與 Fargate 價格相比) 執行可接受中斷的 Amazon ECS 任務。Fargate Spot 在備用運算容量上執行任務。當 AWS 需要恢復容量時，您的任務會因兩分鐘警告而中斷。

當使用 Fargate 和 Fargate Spot 容量提供者的任務停止時，系統會將任務狀態變更事件傳送至 Amazon EventBridge。停止原因說明其原因。如需詳細資訊，請參閱[Amazon ECS 任務狀態變更事件](ecs_task_events.md)。

叢集可以同時包含 Fargate 和 Auto Scaling 群組容量提供者。不過，容量提供者策略只能包含 Fargate 或 Auto Scaling 群組容量提供者，不能同時包含兩者。如需詳細資訊，請參閱 [Auto Scaling 群組容量提供者](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-auto-scaling.html#asg-capacity-providers)。

使用容量提供者時，請考慮下列事項：
+ 將容量提供者與容量提供者策略相關聯之前，必須先將容量提供者與叢集建立關聯。
+ 您最多可以為容量提供者策略指定 20 個容量提供者。
+ 您無法將使用 Auto Scaling 群組容量提供者的服務更新為使用 Fargate 容量提供者。反之亦然。
+ 在容量提供者策略中，如果沒有在主控台中對容量提供者指定 `weight` 值，則會使用預設值 `1`。如果使用 API 或 AWS CLI，`0`則會使用 的預設值。
+ 在容量提供者策略中指定多個容量提供者時，至少有一個容量提供者必須具有大於零的權重值。任何權重為零的容量提供者都不會用來置放任務。如果您在策略中指定多個容量提供者權重均為零，則使用容量提供者策略的任何 `RunTask` 或 `CreateService` 動作都會失敗。
+ 在容量提供者策略中，只有一個容量提供者已定義*基準*值。如果未指定基準值，則會使用預設值零。
+ 叢集可以同時包含 Auto Scaling 群組容量提供者以及 Fargate 容量提供者。不過，容量提供者策略只能包含 Auto Scaling 群組或 Fargate 容量提供者，不能同時包含兩者。
+ 一個叢集可以包含同時使用這兩種容量提供者的服務與獨立任務。服務可以更新為使用容量提供者策略，而非啟動類型。不過，若要執行此操作，您必須強制執行新部署。

## Fargate Spot 終止通知
<a name="fargate-capacity-providers-termination"></a>

在需求極高期間，Fargate Spot 容量可能無法使用。這可能會導致 Fargate Spot 任務延遲。發生此狀況時，Amazon ECS 服務會重試啟動任務，直到所需的容量可用為止。Fargate 不會以隨需容量取代 Spot 容量。

當使用 Fargate Spot 容量的任務因 Spot 中斷而停止時，在任務停止之前會傳送兩分鐘的警告。警告會以任務狀態變更事件的形式傳送至 Amazon EventBridge，並作為 SIGTERM 訊號傳送給正在執行的任務。如果您使用 Fargate Spot 作為服務的一部分，在此情況中，服務排程器會收到中斷訊號，並嘗試在容量可用時啟動其他任務。只有一項任務的服務會中斷，直到容量可用為止。如需正常關機的詳細資訊，請參閱[使用 ECS 正常關機](https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/)。

若要確保您的容器在任務停止之前正常結束，可設定下列項目：
+ 您可以在任務所使用的容器定義中指定 `120` 秒數的 `stopTimeout` 值 (或更少)。預設 `stopTimeout` 值為 30 秒。您可以指定更長的 `stopTimeout` 值，讓您從收到任務狀態變更事件到容器強制停止之間有更多時間。如需詳細資訊，請參閱[容器逾時](task_definition_parameters.md#container_definition_timeout)。
+ SIGTERM 信號必須從容器內接收，以執行任何清理動作。無法處理此信號將導致任務在設定 `stopTimeout` 後收到 SIGKILL 信號，甚至可能導致資料遺失或毀損。

以下是任務狀態變更事件的程式碼片段。此程式碼片段顯示停止原因和 Fargate Spot 中斷的停止程式碼。

```
{
  "version": "0",
  "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab",
  "detail-type": "ECS Task State Change",
  "source": "aws.ecs",
  "account": "111122223333",
  "resources": [
    "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef"
  ],
  "detail": {
    "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default",
    "createdAt": "2016-12-06T16:41:05.702Z",
    "desiredStatus": "STOPPED",
    "lastStatus": "RUNNING",
    "stoppedReason": "Your Spot Task was interrupted.",
    "stopCode": "SpotInterruption",
    "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE",
    ...
  }
}
```

以下是用來建立 Amazon ECS 任務狀態變更事件之 EventBridge 規則的事件模式。您可以選擇在 `detail` 欄位中指定叢集。若指定，則表示您會收到該叢集的任務狀態變更事件。如需有關建立 EventBridge 規則的詳細資訊，請參閱 *Amazon EventBridge User Guide* 中的 [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)。

```
{
    "source": [
        "aws.ecs"
    ],
    "detail-type": [
        "ECS Task State Change"
    ],
    "detail": {
        "clusterArn": [
            "arn:aws:ecs:us-west-2:111122223333:cluster/default"
        ]
    }
}
```

# 為 Fargate 工作負載建立 Amazon ECS 叢集
<a name="create-cluster-console-v2"></a>

您可以透過建立叢集，定義任務與服務執行所在的基礎結構。

開始之前，請務必先完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟，並指派適當的 IAM 許可。如需詳細資訊，請參閱[Amazon ECS 叢集範例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。Amazon ECS 主控台會透過建立 CloudFormation 堆疊來建立 Amazon ECS 叢集所需的資源。

主控台會自動將 Fargate 及 Fargate Spot 容量提供者與叢集建立關聯。

您可以修改下列選項：
+ 將命名空間新增至叢集。

  命名空間可讓您在叢集中建立的服務連線到命名空間中的其他服務，而不需要額外的組態。如需詳細資訊，請參閱[互連 Amazon ECS 服務](interconnecting-services.md)。
+ 啟用任務事件以接收任務狀態變更的 EventBridge 通知。
+ 新增標籤以協助您識別叢集。
+ 為您的受管儲存指派 AWS KMS 金鑰。如需有關如何建立金鑰的資訊，請參閱 *AWS Key Management Service User Guide* 中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 為您的 Fargate 暫時性儲存指派 AWS KMS 金鑰。如需有關如何建立金鑰的資訊，請參閱 *AWS Key Management Service User Guide* 中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 設定 ECS Exec 的 AWS KMS 金鑰和記錄。

## 程序
<a name="create-cluster-console-v2-procedure"></a>

**建立新叢集 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇 **Create cluster** (建立叢集)。

1. 在**叢集組態**下，設定下列項目：
   + 在**叢集名稱**下輸入唯一的名稱。

     名稱可以包含最多 255 個字母 (大小寫)、數字與連字號。
   + (選用) 若要讓 Service Connect 使用的命名空間與叢集名稱不同，請在 **Service Connect 預設值**區段的**預設命名空間**欄位中，選擇或輸入命名空間名稱。若要使用共用命名空間，請選擇或輸入命名空間 ARN。如需有關使用共用命名空間的詳細資訊，請參閱 [具有共用 AWS Cloud Map 命名空間的 Amazon ECS Service Connect](service-connect-shared-namespaces.md)。

1. (選用) 使用 Container Insights，展開**監控**區段，然後選擇下列任一選項：
   + 若要使用建議的具有增強可觀測性的 Container Insights，請選擇**具有增強可觀測性的 Container Insights**。
   + 若要使用 Container Insights，請選擇 **Container Insights**。

1. （選用） 若要啟用任務事件，請展開**任務事件**，然後開啟**啟用任務事件**。

   當您啟用任務事件時，Amazon ECS 會將任務狀態變更事件傳送至 EventBridge。這可讓您自動監控和回應任務生命週期變更。

1. (選用) 若要使用 ECS Exec 在叢集中偵錯任務，請展開**疑難排解組態**區段，然後設定下列項目：
   + （選用） 對於 **AWS KMS ECS Exec 的金鑰**，輸入您要用來加密 ECS Exec 工作階段資料的 AWS KMS 金鑰 ARN。
   + (選用) 在 **ECS Exec 記錄**欄位中，選擇日誌目的地：
     + 若要將日誌傳送至 CloudWatch Logs，請選擇 **Amazon CloudWatch**。
     + 若要將日誌傳送至 Amazon S3，請選擇 **Amazon S3**。
     + 若要停用記錄，請選擇**無**。

1. (選用) 在**加密**區段，您可以設定下列項目：
   + 在 Fargate 暫時性儲存上加密資料。在**加密**下，針對 **Fargate 暫時性儲存**，輸入您要用來加密 Fargate 暫時性儲存資料的 AWS KMS 金鑰 ARN。
   + 加密受管儲存上的資料。在**加密**下，針對**受管儲存**，輸入您要用來加密受管儲存資料的 AWS KMS 金鑰 ARN。

1. (選用) 為協助識別您的叢集，請展開 **Tags** (標籤)，然後設定標籤。

   [新增標籤] 選擇**新增標籤**，並執行下列動作：
   + 在**金鑰**欄位中，輸入金鑰名稱。
   + 在**值**欄位中，輸入金鑰值。

   [移除標籤] 選擇標籤「金鑰」和「值」右側的**移除**。

1. 選擇**建立**。

## 後續步驟
<a name="fargate-cluster-next-steps"></a>

建立叢集之後，您可以為應用程式建立任務定義，然後將它們當做獨立任務或服務的一部分執行。如需詳細資訊，請參閱下列內容：
+ [Amazon ECS 任務定義](task_definitions.md)
+ [將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md)
+ [建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)

# EC2 工作負載的 Amazon ECS 容量提供者
<a name="asg-capacity-providers"></a>

當您針對容量使用 Amazon EC2 執行個體時，可使用 Auto Scaling 群組來管理註冊到其叢集的 Amazon EC2 執行個體。Auto Scaling 能確保您有正確的 Amazon EC2 執行個體數量來處理應用程式負載。

您可以使用受管擴展功能讓 Amazon ECS 管理 Auto Scaling 群組的縮減和橫向擴充動作，也可以自行管理擴展動作。如需詳細資訊，請參閱[使用叢集自動擴展自動管理 Amazon ECS 容量](cluster-auto-scaling.md)。

建議您建立新的空白 Auto Scaling 群組。如果您使用現有的 Auto Scaling 群組，則任何與執行中群組相關聯以及註冊至 Amazon ECS 叢集的 Amazon EC2 執行個體在使用 Auto Scaling 群組建立容量提供者之前，可能無法正確的註冊容量提供者。在容量提供者策略中使用容量提供者時，這可能會造成問題。使用 `DescribeContainerInstances` 可以確認容器執行個體是否與容量提供者建立關聯。

**注意**  
若要建立空白 Auto Scaling 群組，請將所需的計數設定為零。建立容量提供者並將其與叢集關聯後，您就可以進行橫向擴展。  
當您使用 Amazon ECS 主控台時，Amazon ECS 會代表您建立 Amazon EC2 啟動範本和 Auto Scaling 群組，做為 CloudFormation 堆疊的一部分。名稱字首皆為 `EC2ContainerService-<ClusterName>`。您可以使用 Auto Scaling 群組作為該叢集的容量提供者。

建議使用受管執行個體排空功能，允許優雅終止 Amazon EC2 執行個體，不會中斷工作負載。預設會啟用此功能。如需詳細資訊，請參閱[安全地停止在 EC2 執行個體上執行的 Amazon ECS 工作負載](managed-instance-draining.md)

在主控台中使用 Auto Scaling 群組容量提供者時應考慮以下事項：
+ Auto Scaling 群組的 `MaxSize` 必須大於零，才能水平擴展。
+ Auto Scaling 群組不能具有執行個體權重設定。
+ 如果 Auto Scaling 群組無法橫向擴展以容納執行的任務數目，則任務將無法轉換超出 `PROVISIONING` 狀態。
+ 不要修改與容量提供者管理的 Auto Scaling 群組關聯的擴展政策資源。
+ 如果在建立容量提供者時開啟受管擴展，則可將 Auto Scaling 群組所需的計數設定為 `0`。開啟受管擴展時，Amazon ECS 會管理 Auto Scaling 群組的縮減和橫向擴展動作。
+ 將容量提供者與容量提供者策略相關聯之前，必須先將容量提供者與叢集建立關聯。
+ 您最多可以為容量提供者策略指定 20 個容量提供者。
+ 您無法將使用 Auto Scaling 群組容量提供者的服務更新為使用 Fargate 容量提供者。反之亦然。
+ 在容量提供者策略中，如果沒有在主控台中對容量提供者指定 `weight` 值，則會使用預設值 `1`。如果使用 API 或 AWS CLI，`0`則會使用 的預設值。
+ 在容量提供者策略中指定多個容量提供者時，至少有一個容量提供者必須具有大於零的權重值。任何權重為零的容量提供者都不會用來置放任務。如果您在策略中指定多個容量提供者權重均為零，則使用容量提供者策略的任何 `RunTask` 或 `CreateService` 動作都會失敗。
+ 在容量提供者策略中，只有一個容量提供者已定義*基準*值。如果未指定基準值，則會使用預設值零。
+ 叢集可以同時包含 Auto Scaling 群組容量提供者以及 Fargate 容量提供者。不過，容量提供者策略只能包含 Auto Scaling 群組或 Fargate 容量提供者，不能同時包含兩者。
+ 叢集可以同時包含使用容量提供者和啟動類型的各種服務和獨立任務。服務可以更新為使用容量提供者策略，而非啟動類型。不過，若要執行此操作，您必須強制執行新部署。
+ Amazon ECS 支援 Amazon EC2 Auto Scaling 暖集區。暖集區是一組準備投入使用的預先初始化 Amazon EC2 執行個體。每當應用程式需要橫向擴充時，Amazon EC2 Auto Scaling 都會使用暖集區中的預初始化執行個體 (而不是啟動冷執行個體)。這可讓任何最終初始化程序執行，然後將執行個體投入使用。如需詳細資訊，請參閱[為 Amazon ECS Auto Scaling 群組設定預先初始化的執行個體](using-warm-pool.md)。

如需有關建立 Amazon EC2 Auto Scaling 啟動範本的詳細資訊，請參閱 *Amazon EC2 Auto Scaling User Guide* 中的 [Auto Scaling launch templates](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-templates.html)。如需有關建立 Amazon EC2 Auto Scaling 群組的詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南**》中的 [Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)。

# Amazon ECS 的 Amazon EC2 容器執行個體安全考量
<a name="ec2-security-considerations"></a>

您應該考量單一容器執行個體及其在威脅模型中的存取。例如，單一受影響的任務可能在相同執行個體上利用未受感染任務的 IAM 許可。

建議您採用下列動作以協助防止此種情況：
+ 執行任務時，請勿使用管理員權限。
+ 為您的任務指派具有最低權限存取的任務角色。

  容器代理程式會自動建立具有唯一憑證 ID 的字符，此字符可用於存取 Amazon ECS 資源。
+ 針對任務中採用 `awsvpc` 網路模式的容器，如欲避免其存取提供給 Amazon EC2 執行個體設定檔的憑證資訊 (同時仍然允許任務角色所提供的許可)，請在代理程式組態檔案中將 `ECS_AWSVPC_BLOCK_IMDS` 代理程式組態變數設定為 true，並重新啟動代理程式。
+ 使用 Amazon GuardDuty 執行期監控來偵測 AWS 環境中叢集和容器的威脅。執行時期監控使用 GuardDuty 安全代理程式，將執行時期可見性新增至個別 Amazon ECS 工作負載，例如檔案存取、程序執行與網路連線。如需詳細資訊，請參閱 *GuardDuty User Guide* 中的 [GuardDuty Runtime Monitoring](https://docs.aws.amazon.com/guardduty/latest/ug/runtime-monitoring.html)。

# 為 Amazon EC2 工作負載建立 Amazon ECS 叢集
<a name="create-ec2-cluster-console-v2"></a>

您可以透過建立叢集，定義任務與服務執行所在的基礎結構。

開始之前，請務必先完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟，並指派適當的 IAM 許可。如需詳細資訊，請參閱[Amazon ECS 叢集範例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。Amazon ECS 主控台提供簡單的方法，透過建立 CloudFormation 堆疊來建立 Amazon ECS 叢集所需的資源。

為了使叢集建立程序盡可能簡單，主控台提供了許多可供選擇的預設選項，我們將在下方加以說明。主控台的大多數區段還有說明面板，以提供更多上下文。

您可以在建立叢集時註冊 Amazon EC2 執行個體，或在建立叢集之後用叢集註冊其他執行個體。

您可以修改下列預設選項：
+ 變更執行個體啟動所在的子網路。
+ 變更用於控制容器執行個體流量的安全群組。
+ 將命名空間新增至叢集。

  命名空間可讓您在叢集中建立的服務連線到命名空間中的其他服務，而不需要額外的組態。如需詳細資訊，請參閱[互連 Amazon ECS 服務](interconnecting-services.md)。
+ 啟用任務事件以接收任務狀態變更的 EventBridge 通知。
+ 為您的受管儲存指派 AWS KMS 金鑰。如需有關如何建立金鑰的資訊，請參閱 *AWS Key Management Service User Guide* 中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 為您的 Fargate 暫時性儲存指派 AWS KMS 金鑰。如需有關如何建立金鑰的資訊，請參閱 *AWS Key Management Service User Guide* 中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 設定 ECS Exec 的 AWS KMS 金鑰和記錄。
+ 新增標籤以協助您識別叢集。

## Auto Scaling 群組選項
<a name="capacity-providers"></a>

如果使用 Amazon EC2 執行個體，則必須指定 Auto Scaling 群組來管理任務和服務執行所在的基礎設施。

當您選擇建立新的 Auto Scaling 群組時，系統會自動設定為以下行為：
+ Amazon ECS 管理 Auto Scaling 群組的縮減和水平擴展動作。
+ Amazon ECS 不會防止包含任務和位於 Auto Scaling 群組中的 Amazon EC2 執行個體在縮減動作期間被終止。如需詳細資訊，請參閱 *AWS Auto Scaling 使用者指南*中的[執行個體保護](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html#instance-protection)。

您可以設定以下 Auto Scaling 群組屬性，以確定要為群組啟動的執行個體類型和數量：
+ Amazon ECS 最佳化 AMI。
+ 執行個體類型。
+ 連線到執行個體時證明您身分的 SSH 金鑰對。如需有關如何建立 SSH 金鑰的資訊，請參閱 *Amazon EC2 User Guide* 中的 [Amazon EC2 key pairs and Linux instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。
+ 要為 Auto Scaling 群組啟動的最小執行個體數量。
+ 將為 Auto Scaling 群組啟動的最大執行個體數量。

  為了水平擴展群組，最大值必須大於 0。

作為 CloudFormation 堆疊的一部分，Amazon ECS 代表您建立 Amazon EC2 Auto Scaling 啟動範本和 Auto Scaling 群組。您為 AMI、執行個體類型和 SSH 金鑰對指定的值為啟動範本的一部分。範本字首會加上 `EC2ContainerService-<ClusterName>`，這使得它們容易識別。Auto Scaling 群組的字首為 `<ClusterName>-ECS-Infra-ECSAutoScalingGroup`。

為 Auto Scaling 群組啟動的執行個體使用啟動範本。

## 聯網選項
<a name="networking-options"></a>

根據預設，執行個體會啟動至「區域」的預設子網路中。系統會使用目前與子網路相關聯的安全群組，此群組可控制容器執行個體的流量。您可以變更執行個體的子網路和安全群組。

您可以選擇現有的子網路。您可以使用現有的安全群組，或建立新的安全群組。若要以純 IPv6 組態建立任務，請使用僅包含 IPv6 CIDR 區塊的子網路。

建立新的安全群組時，必須指定至少一個傳入規則。

傳入規則會決定哪些流量可以連接到您的容器執行個體，並包含下列屬性：
+ 要允許的通訊協定
+ 要允許的連接埠範圍
+ 傳入流量 (來源)

若要允許來自特定位址或 CIDR 區塊的傳入流量，請針對**來源**使用**自訂**選項，且具有允許的 CIDR。

若要允許來自所有目的地的傳入流量，請針對**來源**使用**隨處**。此選項會自動新增 0.0.0.0/0 IPv4 CIDR 區塊和 ::/0 IPv6 CIDR 區塊。

若要允許來自本機電腦的傳入流量，請針對**來源**使用**來源群組**。這會自動將您本機電腦目前的 IP 地址新增為允許的來源。

**建立新叢集 (Amazon ECS 主控台)**

在開始之前，請指派適當的 IAM 許可。如需詳細資訊，請參閱[Amazon ECS 叢集範例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇 **Create cluster** (建立叢集)。

1. 在**叢集組態**下，設定下列項目：
   + 在**叢集名稱**下輸入唯一的名稱。

     名稱可以包含最多 255 個字母 (大小寫)、數字與連字號。
   + (選用) 若要讓 Service Connect 使用的命名空間與叢集名稱不同，請在 **Service Connect 預設值**區段的**預設命名空間**欄位中，選擇或輸入命名空間名稱。若要使用共用命名空間，請選擇或輸入命名空間 ARN。如需有關使用共用命名空間的詳細資訊，請參閱 [具有共用 AWS Cloud Map 命名空間的 Amazon ECS Service Connect](service-connect-shared-namespaces.md)。

1. 將 Amazon EC2 執行個體新增至叢集，展開**基礎結構**區段，然後選取 **Fargate 與自行管理執行個體**。

   接下來，設定作為容量提供者的 Auto Scaling 群組：

   1. 要使用現有 Auto Scaling 群組，請從 **Auto Scaling group (ASG)** (Auto Scaling 群組 (ASG)) 中選取該群組。

   1. 若要建立 Auto Scaling 群組，請從 **Auto Scaling group (ASG)** (Auto Scaling 群組 (ASG)) 中選取 **Create new group** (建立新群組)，然後提供有關該群組的下列詳細資訊：
      + 在**佈建模型**欄位中，選擇要使用**隨需**執行個體或是 **Spot** 執行個體。
      + 如果選擇使用 Spot 執行個體，請在**配置策略**欄位中，選擇執行個體要使用的 Spot 容量集區 (執行個體類型與可用區域)。

        對於大多數工作負載，您可以選擇**價格容量最佳化**。

        如需詳細資訊，請參閱《Amazon EC2 使用者指南》**中的 [Spot 執行個體的分配策略](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html)。
      + 在**容器執行個體 Amazon Machine Image (AMI)**欄位中，選擇適用於 Auto Scaling 群組執行個體的 Amazon ECS 最佳化 AMI。
      + 對於 **EC2 instance type** (EC2 執行個體類型)，選擇適合您工作負載的執行個體類型。

         如果 Auto Scaling 群組使用相同或類似的執行個體類型，則受管擴展效果最佳。
      + 在 **EC2 執行個體角色**欄位中，您可以選擇現有的容器執行個體角色，也可以建立新的容器執行個體角色。

        如需詳細資訊，請參閱[Amazon ECS 容器執行個體 IAM 角色](instance_IAM_role.md)。
      + 對於**容量**，輸入 Auto Scaling 群組中要啟動的最小執行個體數和最大執行個體數。
      + 對於 **SSH key pair** (SSH 金鑰對)，選擇在連線到執行個體時證明您身分的金鑰對。
      + 若要允許較大的映像與儲存空間，在**根 EBS 磁碟區大小**欄位中，請輸入以 GiB 為單位的值。

1. (選用) 若要變更 VPC 和子網路，請在 **Amazon EC2 執行個體的聯網能力**下，執行下列任一操作：
   + 若要移除子網路，請在 **Subnets** (子網路) 下，對您要移除之每一個子網路選擇 **X**。
   + 若要變更為非**預設** VPC，請在 **VPC** 下，選擇現有的 **VPC**，然後在**子網路**下選擇子網路。對於純 IPv6 組態，選擇具有 IPv6 CIDR 區塊的 VPC，以及僅具有 IPv6 CIDR 區塊的子網路。
   + 選擇安全群組。在**安全群組**下，選擇以下其中一個選項：
     + 若要使用現有的安全群組，請選擇**使用現有安全群組**，然後選擇安全群組。
     + 若要建立安全群組，請選擇**建立新的安全群組**。然後，針對傳入規則選擇**新增規則**。

       如需傳入規則的資訊，請參閱 [聯網選項](#networking-options)。
   + 若要自動將公有 IP 地址指派給 Amazon EC2 容器執行個體，針對**自動指派公有 IP**，請選擇下列其中一個選項：
     + **使用子網路設定**：當執行個體啟動的子網路為公有子網路時，將公有 IP 地址指派給行個體。
     + **開啟**：將公有 IP 位址指派給執行個體。

1. (選用) 使用 Container Insights，展開**監控**區段，然後選擇下列任一選項：
   + 若要使用建議的具有增強可觀測性的 Container Insights，請選擇**具有增強可觀測性的 Container Insights**。
   + 若要使用 Container Insights，請選擇 **Container Insights**。

1. （選用） 若要啟用任務事件，請展開**任務事件**，然後開啟**啟用任務事件**。

   當您啟用任務事件時，Amazon ECS 會將任務狀態變更事件傳送至 EventBridge。這可讓您自動監控和回應任務生命週期變更。

1. (選用) 若要使用 ECS Exec 在叢集中偵錯任務，請展開**疑難排解組態**區段，然後設定下列項目：
   + （選用） 對於 **AWS KMS ECS Exec 的金鑰**，輸入您要用來加密 ECS Exec 工作階段資料的 AWS KMS 金鑰 ARN。
   + (選用) 在 **ECS Exec 記錄**欄位中，選擇日誌目的地：
     + 若要將日誌傳送至 CloudWatch Logs，請選擇 **Amazon CloudWatch**。
     + 若要將日誌傳送至 Amazon S3，請選擇 **Amazon S3**。
     + 若要停用記錄，請選擇**無**。

1. (選用)

   如果搭配手動選項使用執行時期監控，而且想讓 GuardDuty 監控此叢集，請選擇**新增標籤**並執行下列動作：
   + 在**鍵**欄位中，輸入 **guardDutyRuntimeMonitoringManaged**
   + 針對**數值**，輸入 **true**。

1. (選用) 加密受管儲存上的資料。在**加密**下，針對**受管儲存**，輸入您要用來加密受管儲存資料的 AWS KMS 金鑰 ARN。

1. (選用) 若要管理叢集標籤，請展開**標籤**，然後執行下列其中一項操作：

   [新增標籤] 選擇**新增標籤**，並執行下列動作：
   + 在**金鑰**欄位中，輸入金鑰名稱。
   + 在**值**欄位中，輸入金鑰值。

   [移除標籤] 選擇標籤「金鑰」和「值」右側的**移除**。

1. 選擇**建立**。

## 後續步驟
<a name="ec2-cluster-next-steps"></a>

建立叢集之後，您可以為應用程式建立任務定義，然後將它們當做獨立任務或服務的一部分執行。如需詳細資訊，請參閱下列內容：
+ [Amazon ECS 任務定義](task_definitions.md)
+ [將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md)
+ [建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)

# 使用叢集自動擴展自動管理 Amazon ECS 容量
<a name="cluster-auto-scaling"></a>

Amazon ECS 可管理在您的叢集註冊的 Amazon EC2 執行個體的擴展。這稱為 Amazon ECS* 叢集自動擴展*。在建立 Amazon ECS Auto Scaling 群組容量提供者時，您可以啟用受管擴展。然後，您可以為此 Auto Scaling 群組中的執行個體使用率設定目標百分比 (`targetCapacity`)。Amazon ECS 會為 Auto Scaling 群組建立兩個自訂 CloudWatch 指標與一個目標追蹤擴展政策。Amazon ECS 接著會根據任務使用的資源使用率來管理縮減與橫向擴充動作。

針對每個與叢集關聯的 Auto Scaling 群組容量提供者，Amazon ECS 會建立並管理以下資源：
+ 低指標值 CloudWatch 警示
+ 高指標值 CloudWatch 警示
+ 目標追蹤擴展政策
**注意**  
Amazon ECS 會建立目標追蹤擴展政策，並將其連接到 Auto Scaling 群組。若要更新目標追蹤擴展政策，請更新容量提供者受管擴展設定，而不是直接更新擴展政策。

如果關閉受管擴展或解除容量提供者與叢集的關聯，Amazon ECS 會移除 CloudWatch 指標和目標追蹤擴展政策資源。

Amazon ECS 使用以下指標來判定要採取的動作：

`CapacityProviderReservation`  
特定容量提供者正在使用的容器執行個體的百分比。Amazon ECS 會產生此指標。  
Amazon ECS 將 `CapacityProviderReservation` 值設定為 0-100 之間的數字。Amazon ECS 使用下列公式來表示 Auto Scaling 群組中剩餘容量的比率。之後，Amazon ECS 會將指標發佈到 CloudWatch。如需有關指標計算方式的詳細資訊，請參閱 [ Deep Dive on Amazon ECS Cluster Auto Scaling](https://aws.amazon.com/blogs/containers/deep-dive-on-amazon-ecs-cluster-auto-scaling/)。  

```
CapacityProviderReservation = (number of instances needed) / (number of running instances) x 100
```

`DesiredCapacity`  
Auto Scaling 群組的容量。此指標不會發布至 CloudWatch。

之後，Amazon ECS 會在 `AWS/ECS/ManagedScaling` 命名空間中將 `CapacityProviderReservation` 指標發佈到 CloudWatch。`CapacityProviderReservation` 指標會導致發生下列其中一個動作：

**`CapacityProviderReservation` 值等於 `targetCapacity`**  
Auto Scaling 群組不需要橫向擴展或縮減。已達到目標使用率百分比。

**`CapacityProviderReservation` 值大於 `targetCapacity`**  
有更多任務使用比您的 `targetCapacity` 百分比高的容量百分比。`CapacityProviderReservation` 指標增加的值會導致相關聯的 CloudWatch 警示採取動作。此警示會更新 Auto Scaling 群組的 `DesiredCapacity` 值。Auto Scaling 群組會使用此值啟動 EC2 執行個體，然後向叢集註冊這些執行個體。  
當 `targetCapacity` 的預設值為 100% 時，新任務會在橫向擴展期間處於 `PENDING` 狀態，因為執行個體上沒有可用容量來執行任務。新執行個體向 ECS 註冊後，這些任務將在新執行個體上開始執行。

**`CapacityProviderReservation` 值小於 `targetCapacity`**  
使用容量百分比低於 `targetCapacity` 的百分比的任務更少，並且至少有一個可以終止的執行個體。`CapacityProviderReservation` 指標減少的值會導致相關聯的 CloudWatch 警示採取動作。此警示會更新 Auto Scaling 群組的 `DesiredCapacity` 值。Auto Scaling 群組會使用此值終止 EC2 容器執行個體，然後向叢集取消註冊這些執行個體。  
Auto Scaling 群組遵循群組終止政策來確定在縮減事件期間首先終止哪些執行個體。此外，它還可以避免開啟執行個體縮減保護設定的執行個體。如果您開啟受管終止保護，叢集自動擴展可以管理哪些執行個體具有執行個體縮減保護設定。如需有關受管終止保護的詳細資訊，請參閱 [控制 Amazon ECS 終止的執行個體](managed-termination-protection.md)。如需 Auto Scaling 群組終止執行個體的詳細資訊，請參閱 *Amazon EC2 Auto Scaling 使用者指南*中的[控制在縮減期間會終止的 Auto Scaling 執行個體](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html)。

使用叢集自動擴展時應考慮以下事項：
+ 請勿以任何擴展政策變更或管理與容量提供者相關聯的 Auto Scaling 群組所需的容量，Amazon ECS 管理的政策除外。
+ 當 Amazon ECS 從 0 個執行個體橫向擴充時，會自動啟動 2 個執行個體。
+ Amazon ECS 會將`AWSServiceRoleForECS`服務連結 IAM 角色用於 AWS Auto Scaling 代表您呼叫 所需的許可。如需詳細資訊，請參閱[使用 Amazon ECS 的服務連結角色](using-service-linked-roles.md)。
+ 將容量提供者與 Auto Scaling 群組搭配使用時，建立容量提供者的使用者、群組或角色需要 `autoscaling:CreateOrUpdateTags` 許可。這是因為當群組與容量提供者產生關聯時，Amazon ECS 會將標籤加入至 Auto Scaling 群組。
**重要**  
確保您使用的任何工具不會將 `AmazonECSManaged` 標籤從 Auto Scaling 群組中移除。如果已移除此標籤，則 Amazon ECS 無法管理擴展。
+ 叢集自動擴展不會修改群組的 **MinimumCapacity** (容量下限) 或 **MaximumCapacity** (容量上限)。為了讓群組進行橫向擴展，**MaximumCapacity** (容量上限) 必須大於零。
+ 當自動擴展 (受管擴展) 開啟時，一個容量提供者一次只能連接到一個叢集。如果容量提供者已關閉受管擴展，您可以將其關聯到多個叢集。
+ 當受管擴展關閉時，容量提供者不會縮減或橫向擴展。您可以使用容量提供者策略在容量提供者之間平衡您的任務。
+ 就容量而言，`binpack` 策略是最有效率的策略。
+ 當目標容量小於 100% 時，在置放策略中，`binpack` 策略的有限順序必須高於 `spread` 策略。這可防止容量提供者橫向擴充，直至每個任務都有專用執行個體或達到限制為止。

## 開啟叢集自動擴展
<a name="cluster-auto-scale-use"></a>

您可以使用主控台或 AWS CLI啟用叢集自動擴展。

當您透過主控台建立使用 EC2 容量提供者的叢集時，Amazon ECS 會代為建立 Auto Scaling 群組並設定目標容量。如需詳細資訊，請參閱[為 Amazon EC2 工作負載建立 Amazon ECS 叢集](create-ec2-cluster-console-v2.md)。

您也可以建立 Auto Scaling 群組，然後將群組指派給叢集。如需詳細資訊，請參閱[更新 Amazon ECS 容量提供者](update-capacity-provider-console-v2.md)。

當您使用 時 AWS CLI，在您建立叢集之後

1. 建立容量提供者前，您需要建立 Auto Scaling 群組。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南**》中的 [Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)。

1. 使用 `put-cluster-capacity-providers` 修改叢集容量提供者。如需詳細資訊，請參閱[啟用 Amazon ECS 叢集自動擴展](turn-on-cluster-auto-scaling.md)。

# 最佳化 Amazon ECS 叢集自動擴展
<a name="capacity-cluster-speed-up-ec2"></a>

在 Amazon EC2 上執行 Amazon ECS 的客戶，可以利用叢集自動擴展來管理 Amazon EC2 Auto Scaling 群組的擴展。透過叢集自動擴展，您可以設定 Amazon ECS 自動擴展 Auto Scaling 群組，從而專注於執行任務。Amazon ECS 將確保 Auto Scaling 群組視需求進行擴展與縮減，無需額外人工介入。Amazon ECS 容量提供者可用來管理叢集中的基礎結構，確保有足夠的容器執行個體可滿足應用程式需求。若要了解叢集自動擴展的底層運作機制，請參閱 [Deep Dive on Amazon ECS Cluster Auto Scaling](https://aws.amazon.com/blogs/containers/deep-dive-on-amazon-ecs-cluster-auto-scaling/)。

叢集自動擴展依賴於 CloudWatch 與 Auto Scaling 群組的整合機制來調整叢集容量。因此存在以下固有延遲：
+ 發布 CloudWatch 指標。
+ 指標 `CapacityProviderReservation` 觸發 CloudWatch 高低閾值警報所需的處理時間
+ 新啟動的 Amazon EC2 執行個體完成暖機所需的時間。您可以採取下列動作提高叢集自動擴展的回應速度，加速實現部署：

## 容量提供者步進擴展大小
<a name="cas-step-size"></a>

Amazon ECS 容量提供者將擴增/縮小容器執行個體，以滿足應用程式的需求。將 Amazon ECS 會啟動的執行個體數量下限預設為 1。如果需要多個執行個體來放置待處理任務，可能會增加部署所需的時間。您可以透過 Amazon ECS API 增加 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html)，提高 Amazon ECS 每次可縮減或擴展的執行個體數量下限。太低的 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html) 會限制每次可縮減或擴展的容器執行個體數量，進而拖慢部署速度。

**注意**  
此組態目前只能透過 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html) 或 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html) API 使用。

## 執行個體暖機期間
<a name="instance-warmup-period"></a>

執行個體暖機期間是指新啟動的 Amazon EC2 執行個體納入 Auto Scaling 群組 CloudWatch 指標統計前的一段時間。在指定的暖機期到期後，執行個體才會納入 Auto Scaling 群組的彙總指標計算；而叢集自動擴展會接著進行其下一輪計算，以估算所需的執行個體數量。

[https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html#ECS-Type-ManagedScaling-instanceWarmupPeriod](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ManagedScaling.html#ECS-Type-ManagedScaling-instanceWarmupPeriod) 的預設值為 300 秒，您可以透過 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCapacityProvider.html) 或 [https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateCapacityProvider.html) API 將其設定為較低的值，從而實現更即時的擴展。建議將該值設定為大於 60 秒，避免過度佈建。

## 備用容量
<a name="spare-capacity"></a>

如果容量提供者沒有可用於置放任務的容器執行個體，就必須透過即時啟動 Amazon EC2 執行個體來增加 (橫向擴充) 叢集容量，並等待這些執行個體啟動完成後才能在其上部署容器。這會大幅降低任務啟動速率。對此，您有兩種選擇。

 在這種情況下，若事先啟動並準備好可用於執行任務的 Amazon EC2 備用容量，即能提高有效的任務啟動速率。您可以透過 `Target Capacity` 組態來指定希望叢集維持的備用容量。例如，將 `Target Capacity` 設定為 80%，即指定叢集需隨時保留 20% 的備用容量。這些備用容量可讓任何獨立任務立即啟動，確保任務啟動不會受到限流。但此方法的權衡在於，維持叢集備用容量可能會增加成本。

另一種替代方法是為服務增加緩衝空間，而非為容量提供者設定。這意味著，您不必透過降低 `Target Capacity` 組態來啟動備用容量，而是可以藉由修改服務自動擴展的目標追蹤擴展指標或步進擴展閾值，直接增加服務中的副本數量。請注意，此方法僅對突發性工作負載有效；在部署新服務並首次從 0 擴展至 N 個任務時，則無法發揮作用。如需有關相關擴展政策的詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》**中的[目標追蹤擴展政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-autoscaling-targettracking.html)或[步進擴展政策](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-autoscaling-stepscaling.html)。

# Amazon ECS 受管擴展行為
<a name="managed-scaling-behavior"></a>

如果您的 Auto Scaling 群組容量提供者使用受管擴展，Amazon ECS 會估計要新增至叢集的最佳執行個體數量的下限，並使用此值來決定要請求或發放的執行個體數量。

## 受管向外擴展行為
<a name="managed-scaling-scaleout"></a>

Amazon ECS 會依照服務、獨立任務或叢集預設的容量提供者策略，為每個任務選取容量提供者。Amazon ECS 會針對單一容量提供者執行下列後續步驟。

沒有容量提供者策略的任務會被容量提供者忽略。沒有容量提供者策略的等待中任務不會導致任何容量提供者橫向擴展。如果任務或服務設定了啟動類型，則任務或服務無法設定容量提供者策略。

以下詳細說明向外擴展行為。
+ 將此容量提供者的所有佈建任務分組，以便每個群組具有相同的精確資源需求。
+ 當您在 Auto Scaling 群組中使用多個執行個體類型時，Auto Scaling 群組中的執行個體會依其參數排序。這些參數包含 vCPU、記憶體、彈性網路介面 (ENI)、連接埠和 GPU。為每個參數選取最小和最大的執行個體類型。如需有關如何選擇執行個體類別的詳細資訊，請參閱 [Amazon ECS 的 Amazon EC2 容器執行個體](create-capacity.md)。
**重要**  
如果一組任務的資源需求大於 Auto Scaling 群組中最小執行個體類型，則該任務群組無法使用此容量提供者執行。容量提供者不會擴展 Auto Scaling 群組。任務會維持在 `PROVISIONING` 狀態。  
為了防止任務停留在 `PROVISIONING` 狀態，建議您針對不同的最低資源需求，建立個別的 Auto Scaling 群組和容量提供者。當您執行任務或建立服務時，請僅將容量提供者新增至可以在 Auto Scaling 群組中最小執行個體類型上執行任務的容量提供者策略。對於其他參數，您可以使用置放條件限制
+ 針對每個任務群組，Amazon ECS 會計算執行未放置任務所需的執行個體數目。此計算會使用 `binpack` 策略。此策略會說明任務的 vCPU、記憶體、彈性網路介面 (ENI)、連接埠和 GPU 需求。其也會說明 Amazon EC2 執行個體的資源可用性。最大執行個體類型的值會被視為所計算執行個體數目的最大值。最小執行個體類型的值會作為保護使用。如果最小的執行個體類型無法執行任務至少一個執行個體，則計算會認為該任務不相容。因此，任務會排除在橫向擴展計算之外。當所有任務都與最小執行個體類型不相容時，叢集自動擴展將會停止，而且 `CapacityProviderReservation` 值仍為 `targetCapacity` 值。
+ 如果是下列情況之一，Amazon ECS 會依照 `minimumScalingStepSize` 將 `CapacityProviderReservation` 指標發佈到 CloudWatch：
  + 計算出的執行個體數量上限，小於擴展步驟大小下限。
  + 為 `maximumScalingStepSize` 或計算出的執行個體數量上限中的較小值。
+ CloudWatch 警示會使用容量提供者的 `CapacityProviderReservation` 指標。當 `CapacityProviderReservation` 指標大於 `targetCapacity` 值時，警示也會增加 Auto Scaling 群組的 `DesiredCapacity`。`targetCapacity` 值是在叢集自動擴展活動期間，傳送到 CloudWatch 警示的容量提供者設定。

  預設 `targetCapacity` 為 100%。
+ Auto Scaling 群組會啟動其他 EC2 執行個體。為了防止過度佈建，Auto Scaling 確保最近啟動的 EC2 執行個體容量已穩定，然後才會啟動新執行個體。Auto Scaling 會檢查是否所有現有的執行個體都已超過 `instanceWarmupPeriod` (現在時間減去執行個體啟動時間)。處於 `instanceWarmupPeriod` 內的執行個體會封鎖橫向擴充。

  新啟動執行個體的暖機預設秒數為 300 秒。

如需詳細資訊，請參閱 [Deep dive on Amazon ECS cluster auto scaling](https://aws.amazon.com/blogs/containers/deep-dive-on-amazon-ecs-cluster-auto-scaling/) (《深入瞭解 Amazon ECS 叢集自動擴展》)。

### 擴增注意事項
<a name="scale-out-considerations"></a>

 使用擴增程序時，請注意以下事項：
+ 儘管存在多個置放限制條件，我們建議您只使用 `distinctInstance` 任務置放限制條件。此舉可以防止橫向擴展程序停止，因為您使用的置放限制條件與取樣的執行個體不相容。
+ 如果 Auto Scaling 群組使用相同或類似的執行個體類型，則受管擴展效果最佳。
+ 當需要橫向擴展程序且目前沒有正在執行的容器執行個體時，Amazon ECS 一開始會一律橫向擴展至兩個執行個體，再執行額外橫向擴展或縮減程序。任何額外的橫向擴展都會等待執行個體暖機期間。關於縮減流程，Amazon ECS 會在橫向擴展程序後等待 15 分鐘，然後隨時開始縮減程序。
+ 第二個橫向擴展步驟需要等到 `instanceWarmupPeriod` 過期，這可能會影響整體擴展限制。如需縮短此時間，請確保該 `instanceWarmupPeriod` 足夠大，足以 EC2 執行個體啟動並執行 Amazon ECS 代理程式 (防止過度佈建)。
+ 叢集自動擴展支援容量提供者 Auto Scaling 群組中的啟動組態、啟動範本和多種執行個體類型。您還可以使用屬性型執行個體類型選取範圍，而不使用多種執行個體類型。
+ 將 Auto Scaling 群組與隨需執行個體和多個執行個體類型或 Spot 執行個體搭配使用時，較大的執行個體類型的優先級更高，並且不要指定權重。目前不支援指定權重。如需詳細資訊，請參閱 *AWS Auto Scaling 使用者指南*中的[具有多個執行個體類型的 Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html)。
+ 然後，如果計算出的執行個體計數上限小於擴展步驟大小下限，或為 `maximumScalingStepSize` 或計算出的執行個體計數上限中的較小者，則 Amazon ECS 會啟動 `minimumScalingStepSize`。
+ 如果 Amazon ECS 服務或 `run-task` 啟動一個任務，而容量提供者容器執行個體沒有足夠的資源來啟動任務，則 Amazon ECS 會限制每個叢集具有此狀態的任務數目，防止任何任務執行時超越此限制。如需詳細資訊，請參閱[Amazon ECS 服務配額](service-quotas.md)。

## 受管縮減行為
<a name="managed-scaling-scalein"></a>

Amazon ECS 會監控叢集中每個容量提供者的容器執行個體。當容器執行個體未執行任務時，容器執行個體會被視為空白，Amazon ECS 會開始縮減程序。

CloudWatch 縮減警示需要 15 個資料點 (15 分鐘)，然後才能開始 Auto Scaling 群組的縮減程序。在縮減程序開始後直到 Amazon ECS 需要減少已註冊的容器執行個體數量，Auto Scaling 群組將 `DesireCapacity` 值設定為大於一個執行個體且每分鐘小於 50%。

如果 Amazon ECS 在縮減程序進行期間請求橫向擴展 (`CapacityProviderReservation` 大於 100 時)，縮減程序將停止，並在需要時從頭開始。

以下內容會詳細介紹縮減行為：

1. Amazon ECS 會計算空白容器執行個體的數量。即使常駐程式任務正在執行，則會將容器執行個體視為空白。

1. Amazon ECS 會將 `CapacityProviderReservation` 值設定為介於 0-100 之間的數字，此數字會使用下列公式來表示 Auto Scaling 群組需要相對於其實際大小的比率，並以百分比表示。之後，Amazon ECS 會將指標發佈到 CloudWatch。如需指標計算方式的詳細資訊，請參閱[深入了解 Amazon ECS 叢集自動擴展](https://aws.amazon.com/blogs/containers/deep-dive-on-amazon-ecs-cluster-auto-scaling/) 

   ```
   CapacityProviderReservation = (number of instances needed) / (number of running instances) x 100
   ```

1. `CapacityProviderReservation` 指標會產生 CloudWatch 警示。此警示會更新 Auto Scaling 群組的 `DesiredCapacity` 值。然後，執行下列其中一個動作：
   + 如果您不使用容量提供者受管終止，Auto Scaling 群組會選擇使用 Auto Scaling 群組終止政策的 EC2 執行個體，並終止執行個體，直到 EC2 執行個體數量達到 `DesiredCapacity`。之後，從叢集中取消註冊容器執行個體。
   + 如果所有容器執行個體都使用受管終止保護，則 Amazon ECS 會移除空白容器執行個體的縮減保護。之後，Auto Scaling 群組能夠終止 EC2 執行個體。之後，從叢集中取消註冊容器執行個體。

# 控制 Amazon ECS 終止的執行個體
<a name="managed-termination-protection"></a>

**重要**  
您必須在 Auto Scaling 群組上開啟 Auto Scaling *執行個體縮減保護*，才能使用叢集自動擴展的受管終止保護功能。

受管終止保護可讓叢集自動擴展控制哪些執行個體會終止。使用受管終止保護時，Amazon ECS 只會終止沒有執行 Amazon ECS 任務的 EC2 執行個體。系統會忽略使用 `DAEMON` 排程策略的服務執行的任務，而且即使執行個體正在執行這些任務，叢集自動擴展也可以終止執行個體。這是因為叢集中的所有執行個體都在執行這些任務。

Amazon ECS 會先針對 Auto Scaling 群組中的 EC2 執行個體啟用*執行個體縮減保護*選項。然後，Amazon ECS 會將任務放置在執行個體上。在執行個體上停止所有非常駐程式任務時，Amazon ECS 會啟動縮減程序並關閉 EC2 執行個體的縮減保護。之後，Auto Scaling 群組就能終止執行個體。

Auto Scaling *執行個體縮減保護*可控制 Auto Scaling 要終止哪些 EC2 執行個體。在縮減過程中，無法終止已啟用縮減功能的執行個體。如需有關防止 Auto Scaling 執行個體縮減保護的詳細資訊，請參閱 *Amazon EC2 Auto Scaling 使用者指南*中的[使用執行個體縮減保護](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html)。

您可以設定 `targetCapacity` 百分比，保有備用容量。此設定能加速後續任務啟動，因為 Auto Scaling 群組無需額外啟動執行個體。Amazon ECS 使用目標容量值來管理服務建立的 CloudWatch 指標。Amazon ECS 會管理 CloudWatch 指標。Auto Scaling 群組被視為穩定狀態，無需觸發擴展動作。值可以介於 0-100% 之間。例如，若要設定 Amazon ECS，使其在用於 Amazon ECS 任務時能保持 10% 的可用容量，請將該目標容量值設定為 90%。設定容量提供者的 `targetCapacity` 值時，請考慮以下事項。
+ 小於 100% 的 `targetCapacity` 值，表示叢集中需要具備的可用容量數量 (Amazon EC2 執行個體)。可用容量代表沒有執行中的任務。
+ 在沒有其他 `binpack` 的情況下，置放限制條件 (如可用區域) 會強制 Amazon ECS 最終為各執行個體執行一個任務，但這可能不是必要行為。

您必須在 Auto Scaling 群組上開啟 Auto Scaling 執行個體縮減保護，才能使用受管終止保護功能。如果您未開啟縮減保護，則開啟受管終止保護可能會產生不良行為。例如，您可能會讓執行個體停留在消耗狀態。如需詳細資訊，請參閱 [Amazon EC2 Auto Scaling 使用者指南](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html)中的*使用執行個體縮減保護*。

當您搭配容量提供者使用終止保護時，請勿在與容量提供者相關聯的 Auto Scaling 群組上執行任何手動動作 (例如分離執行個體)。手動動作可能會中斷容量提供者的縮減作業。如果您從 Auto Scaling 群組中分離執行個體，您還需要從 Amazon ECS 叢集中[取消註冊已分離的執行個體](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deregister_container_instance.html)。

# 更新 Amazon ECS 容量提供者的受管終止保護
<a name="update-managed-termination-protection"></a>

使用受管終止保護時，您需要更新現有容量提供者的設定。

## 主控台
<a name="update-managed-termination-protection-console"></a>

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在**叢集**頁面上，選擇叢集。

1. 在叢集頁面上，選擇**基礎結構**索引標籤。

1. 選擇對應的容量提供者。

1. 選擇**更新**，修改容量提供者設定。

1. 在 **Auto Scaling 群組設定**區段，切換**受管終止保護**開關，啟用或停用此功能。

1. 選擇**更新**。

## AWS CLI
<a name="update-managed-termination-protection-cli"></a>

您可以使用 `update-capacity-provider` 命令更新容量提供者的受管終止保護設定：

啟用受管終止保護：

```
aws ecs update-capacity-provider \
  --name CapacityProviderName \
  --auto-scaling-group-provider "managedScaling={status=ENABLED,targetCapacity=70,minimumScalingStepSize=1,maximumScalingStepSize=10},managedTerminationProtection=ENABLED"
```

停用受管終止保護：

```
aws ecs update-capacity-provider \
  --name CapacityProviderName \
  --auto-scaling-group-provider "managedScaling={status=ENABLED,targetCapacity=70,minimumScalingStepSize=1,maximumScalingStepSize=10},managedTerminationProtection=DISABLED"
```

**注意**  
可能需要幾分鐘的時間，變更才能在叢集中生效。啟用受管終止保護時，正在執行任務的執行個體將受到保護，不受縮減事件影響。停用受管終止保護時，保護旗標將於下個 ECS 容量提供者管理週期時從執行個體中移除。

## 執行任務的主控台
<a name="update-managed-termination-protection-console"></a>

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在**叢集**頁面上，選擇叢集。

1. 在叢集頁面上，選擇**任務**索引標籤。

1. 選擇對應任務。

1. 在**組態**區段，切換**受管終止保護**開口，啟用或停用此功能。

1. 選擇**設定任務縮減保護**。

   **設定任務縮減保護**對話方塊隨即顯示

   1. 在**任務縮減保護**區段，切換**啟用**開關。

   1. 在**有效時長 (分鐘)** 欄位中，輸入任務縮減保護到期前的分鐘數。

   1. 選擇 **Update** (更新)

# 啟用 Amazon ECS 叢集自動擴展
<a name="turn-on-cluster-auto-scaling"></a>

您需要啟用叢集自動擴展，以便 Amazon ECS 管理已註冊至叢集的 Amazon EC2 執行個體的擴展作業。

若想透過主控台啟用叢集自動擴展，請參閱[建立 Amazon ECS 容量提供者](create-capacity-provider-console-v2.md)。

開始之前，請先建立 Auto Scaling 群組和容量提供者。如需詳細資訊，請參閱[EC2 工作負載的 Amazon ECS 容量提供者](asg-capacity-providers.md)。

若要啟用叢集自動擴展，請將容量提供者與叢集建立關聯，然後啟用叢集自動擴展。

1. 使用 `put-cluster-capacity-providers` 命令，將一或多個容量提供者關聯到叢集。

   若要新增 AWS Fargate 容量提供者，請在請求中包含 `FARGATE`和 `FARGATE_SPOT` 容量提供者。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[put-cluster-capacity-providers](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-cluster-capacity-providers.html)`。

   ```
   aws ecs put-cluster-capacity-providers \
     --cluster ClusterName \
     --capacity-providers CapacityProviderName FARGATE FARGATE_SPOT \
     --default-capacity-provider-strategy capacityProvider=CapacityProvider,weight=1
   ```

   若要為 EC2 新增 Auto Scaling 群組，請在請求中包含 Auto Scaling 群組名稱。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[put-cluster-capacity-providers](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-cluster-capacity-providers.html)`。

   ```
   aws ecs put-cluster-capacity-providers \
     --cluster ClusterName \
     --capacity-providers CapacityProviderName \
     --default-capacity-provider-strategy capacityProvider=CapacityProvider,weight=1
   ```

1. 使用 `describe-clusters` 命令來確認關聯是否成功。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-clusters.html)`。

   ```
   aws ecs describe-clusters \
     --cluster ClusterName \
     --include ATTACHMENTS
   ```

1. 使用 `update-capacity-provider` 命令，啟用容量提供者的受管自動擴展。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[update-capacity-provider](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-capacity-provider.html)`。

   ```
   aws ecs update-capacity-provider \
     --name CapacityProviderName \
     --auto-scaling-group-provider "managedScaling={status=ENABLED}"
   ```

# 關閉 Amazon ECS 叢集自動擴展
<a name="turn-off-cluster-auto-scaling"></a>

如需更精細地控制已註冊至叢集的 EC2 執行個體，您可以停用叢集自動擴展。

若要關閉叢集的叢集自動擴展，您可以解除容量提供者與透過叢集啟用之受管擴展的關聯，或者更新容量提供者來關閉受管擴展。

## 解除與容量提供者之間的關聯
<a name="disassociate-capacity-provider"></a>

使用下列步驟解除容量提供者與叢集之間的關聯。

1. 使用 `put-cluster-capacity-providers` 命令解除 Auto Scaling 群組容量提供者與叢集之間的關聯。叢集可以保持與 AWS Fargate 容量提供者的關聯。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[put-cluster-capacity-providers](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-cluster-capacity-providers.html)`。

   ```
   aws ecs put-cluster-capacity-providers \
     --cluster ClusterName \
     --capacity-providers FARGATE FARGATE_SPOT \
     --default-capacity-provider-strategy '[]'
   ```

   使用 `put-cluster-capacity-providers` 命令解除 Auto Scaling 群組容量提供者與叢集之間的關聯。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[put-cluster-capacity-providers](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-cluster-capacity-providers.html)`。

   ```
   aws ecs put-cluster-capacity-providers \
     --cluster ClusterName \
     --capacity-providers [] \
     --default-capacity-provider-strategy '[]'
   ```

1. 使用 `describe-clusters` 命令來確認是否成功解除關聯。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-clusters.html)`。

   ```
   aws ecs describe-clusters \
     --cluster ClusterName \
     --include ATTACHMENTS
   ```

## 關閉容量提供者的受管擴展
<a name="turn-off-managed-scaling"></a>

使用下列步驟關閉容量提供者的受管擴展。
+ 使用 `update-capacity-provider` 命令，關閉容量提供者的受管自動擴展。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 `[update-capacity-provider](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-capacity-provider.html)`。

  ```
  aws ecs update-capacity-provider \
    --name CapacityProviderName \
    --auto-scaling-group-provider "managedScaling={status=DISABLED}"
  ```

# 建立 Amazon ECS 容量提供者
<a name="create-capacity-provider-console-v2"></a>

叢集建立完成後，即可為 EC2 建立新的容量提供者 (Auto Scaling 群組)。容量提供者可協助管理並擴展應用程式的基礎結構。

建立容量提供者前，您需要建立 Auto Scaling 群組。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南**》中的 [Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)。

**建立叢集的容量提供者 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集。

1. 在 **Cluster:*name*** (叢集：名稱) 頁面中，選擇 **Infrastructure** (基礎設施)，然後選擇 **Create** (建立)。

1. 在 **Create capacity providers** (建立容量提供者) 頁面中，設定下列選項。

   1. 在 **Basic details** (基本詳細資訊) 下的 **Capacity provider name** (容量提供者名稱) 中，輸入容量提供者名稱。

   1. 在 **Auto Scaling group** (Auto Scaling 群組) 下的 **Use an existing Auto Scaling group** (使用現有 Auto Scaling 群組) 欄位中，選擇 Auto Scaling 群組。

   1. (選用) 若要設定擴展政策，請在 **Scaling policies** (擴展政策) 下設定下列選項。
      + 若要讓 Amazon ECS 管理縮減和橫向擴展動作，請選取 **Turn on managed scaling** (開啟受管擴展)。
      + 若要防止具有執行中 Amazon ECS 任務的 EC2 執行個體遭到終止，請選取 **Turn on scaling protection** (開啟擴展保護)。
      + 在 **Set target capacity** (設定目標容量) 欄位中，輸入在 Amazon ECS 受管目標追蹤擴展政策中使用的 CloudWatch 指標的目標值。

1. 選擇**建立**。

# 更新 Amazon ECS 容量提供者
<a name="update-capacity-provider-console-v2"></a>

使用 Auto Scaling 群組作為容量提供者時，您可以修改群組的擴展政策。

**更新叢集的容量提供者 (Amazon ECS 新主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面中，選擇 **Infrastructure** (基礎設施)，然後選擇 **Update** (更新)。

1. 在 **Create capacity providers** (建立容量提供者) 頁面中，設定下列選項。

   1. 在 **Auto Scaling 群組**下的**擴展政策**下，設定下列選項。
     + 若要讓 Amazon ECS 管理縮減和橫向擴展動作，請選取 **Turn on managed scaling** (開啟受管擴展)。
     + 若要防止具有執行中 Amazon ECS 任務的 EC2 執行個體遭到終止，請選取**開啟擴展保護**。
     + 在 **Set target capacity** (設定目標容量) 欄位中，輸入在 Amazon ECS 受管目標追蹤擴展政策中使用的 CloudWatch 指標的目標值。

1. 選擇**更新**。

# 刪除 Amazon ECS 容量提供者
<a name="delete-capacity-provider-console-v2"></a>

如果 Auto Scaling 群組容量提供者已使用完畢，則可將其刪除。刪除群組後，Auto Scaling 群組容量提供者將轉換為 `INACTIVE` 狀態。具有 `INACTIVE` 狀態的容量提供者可能會在您的帳戶中保持可探索一段時間。不過，此行為未來可能變動，因此不建議依賴 `INACTIVE` 容量提供者得以保存。刪除 Auto Scaling 群組容量提供者之前，必須從所有服務的容量提供者策略中移除容量提供者。您可以使用 `UpdateService` API 或 Amazon ECS 主控台中的更新服務工作流程，從服務的容量提供者策略中移除容量提供者。使用**強制執行新部署**選項，可確保使用容量提供者提供之 Amazon EC2 執行個體容量的任何任務都會轉換，以使用剩餘容量提供者的容量。

**刪除叢集的容量提供者 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面中，選擇 **Infrastructure** (基礎設施)、Auto Scaling 群組，然後選擇 **Delete** (刪除)。

1. 在確認方塊中，輸入 **delete *Auto Scaling 群組名稱***

1. 選擇 **刪除**。

# 安全地停止在 EC2 執行個體上執行的 Amazon ECS 工作負載
<a name="managed-instance-draining"></a>

受管執行個體排空有助於優雅終止 Amazon EC2 執行個體。該機制可讓工作負載安全地停止，再重新排程至未終止的執行個體。基礎結構維護與更新作業可順利執行，且無需擔心工作負載受到中斷。透過受管執行個體排空，您可以簡化需要替代 Amazon EC2 執行個體的基礎結構管理工作流程，同時確保應用程式的彈性與可用性。

Amazon ECS 受管執行個體排空適用於 Auto Scaling 群組執行個體替代。根據執行個體重新整理與執行個體生命週期上限，客戶可以確保容量符合最新的作業系統與安全性要求。

受管執行個體排空只能與 Amazon ECS 容量提供者搭配使用。當您使用 Amazon ECS 主控台或 SDK 建立或更新 Auto Scaling 群組容量提供者時 AWS CLI，可以開啟受管執行個體耗盡。

Amazon ECS 受管執行個體排空會涵蓋下列事件。
+ [Auto Scaling 群組執行個體重新整理](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-refresh.html) – 使用執行個體重新整理來執行 Auto Scaling 群組中 Amazon EC2 執行個體的滾動替代，而不是手動分批執行。當您需要替換大量執行個體時，此方法非常實用。執行個體重新整理透過 Amazon EC2 主控台或 `StartInstanceRefresh` API 啟動。如果使用受管終止保護，請務必在呼叫 `StartInstanceRefresh` 時為縮減保護選取 `Replace`。
+ [執行個體生命週期上限](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-max-instance-lifetime.html) – 您可以在替換 Auto Scaling 群組執行個體時定義生命週期上限。此設定有助於根據內部安全政策或合規要求來排程替代執行個體。
+ Auto Scaling 群組縮減 – 根據擴展政策與排程擴展動作，Auto Scaling 群組支援執行個體的自動擴展。使用 Auto Scaling 群組作為 Amazon ECS 容量提供者，您可以在其中沒有任務執行時縮減 Auto Scaling 群組執行個體。
+ [Auto Scaling 群組運作狀態檢查](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-health-checks.html) – Auto Scaling 群組支援許多運作狀態檢查，可管理運作狀態不良的執行個體的終止。
+ [CloudFormation 堆疊更新](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-direct.html) - 您可以在 CloudFormation 堆疊中新增 `UpdatePolicy` 屬性，以在群組變更時執行滾動更新。
+ [Spot 容量重新平衡](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) – Auto Scaling 群組會根據 Amazon EC2 容量重新平衡通知，主動嘗試替換中斷風險較高的 Spot 執行個體。Auto Scaling 群組會在替代執行個體完成啟動且運作狀態良好時，終止舊執行個體。Amazon ECS 受管執行個體排空功能排空 Spot 執行個體的方式，與排空非 Spot 執行個體的方式相同。
+ [Spot 中斷](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html) – Spot 執行個體會在兩分鐘通知後終止。Amazon ECS 受管執行個體排空會讓執行個體進入排空狀態，以此作為回應。

**具有受管執行個體排空的 Amazon EC2 Auto Scaling lifecycle hook**  
Auto Scaling 群組 lifecycle hook 可讓客戶建立由執行個體生命週期中特定事件觸發的解決方案，並在發生此特定事件時執行自訂動作。Auto Scaling 群組最多允許 50 個勾點。可同時存在多組終止勾點平行執行，Auto Scaling 群組會等待所有勾點完成後才終止執行個體。

除 Amazon ECS 受管勾點終止外，您也可以自行設定生命週期終止勾點。Lifecycle hook 具有 `default action`，因此建議將 `continue` 設定為預設值，確保 Amazon ECS 受管勾點等其他勾點不受自訂勾點任何錯誤的影響。

如果您已設定 Auto Scaling 群組終止 lifecycle hook 並啟用 Amazon ECS 受管執行個體排空，則會執行兩個 lifecycle hook。不過，相對時間點無法保證。Lifecycle hook 具有 `default action` 設定，可指定逾時之時要採取的動作。如果失敗，建議在自訂勾點中使用 `continue` 作為預設結果。這可確保其他勾點，特別是 Amazon ECS 受管勾點不受自訂 lifecycle hook 中任何錯誤的影響。`abandon` 的替代結果會略過所有其他勾點，應避免此類狀況發生。如需有關 Auto Scaling 群組 lifecycle hook 的詳細資訊，請參閱 *Amazon EC2 Auto Scaling User Guide* 中的 [Amazon EC2 Auto Scaling lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)。

**任務與受管執行個體排空**  
Amazon ECS 受管執行個體排空功能會使用在容器執行個體中找到的現有排空功能。[容器執行個體排空](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-draining.html)功能會針對屬於 Amazon ECS 服務的副本任務執行替代與停止作業。處於 `PENDING` 或 `RUNNING` 狀態的獨立任務與 `RunTask` 調用的任務一樣，不會受到影響。您必須等待這些任務完成，或手動將其停止。容器執行個體會維持 `DRAINING` 狀態，直至所有任務停止或超過 48 小時為止。常駐程式任務是所有副本任務停止後最後停止的任務。

**受管執行個體排空與受管終止保護**  
即使停用受管終止，受管執行個體排空仍可運作。如需有關受管終止保護的資訊，請參閱[控制 Amazon ECS 終止的執行個體](managed-termination-protection.md)。

下表摘要說明受管終止與受管排空的不同組合的行為。


|  受管終止  |  受管排空  |  結果  | 
| --- | --- | --- | 
|  已啟用  | 已啟用 | Amazon ECS 可保護正在執行任務的 Amazon EC2 執行個體，避免因縮減事件而終止。任何正在終止的執行個體，例如未設定終止保護、收到 Spot 中斷通知或受執行個體重新整理強制處理的執行個體，皆會優雅排空。 | 
|  Disabled  | 已啟用 | Amazon ECS 不會保護執行任務的 Amazon EC2 執行個體免受縮減影響。不過，任何正在終止的執行個體皆會優雅排空。 | 
|  已啟用  | Disabled | Amazon ECS 可保護正在執行任務的 Amazon EC2 執行個體，避免因縮減事件而終止。不過，如果發生 Spot 中斷、強制執行個體重新整理或執行個體未執行任何任務，執行個體仍會終止。Amazon ECS 不會對這些執行個體執行優雅排空，並會在其停止後啟動替代服務任務。 | 
|  Disabled  | Disabled | Amazon EC2 執行個體可以隨時縮減或終止，即使正在執行 Amazon ECS 任務。Amazon ECS 會在這些執行個體停止後啟動替代服務任務。 | 

**受管執行個體排空與 Spot 執行個體排空**  
透過 Spot 執行個體排空功能，您可以在 Amazon ECS 代理程式上設定環境變數 `ECS_ENABLE_SPOT_INSTANCE_DRAINING`，這能讓 Amazon ECS 因應為期兩分鐘的 Spot 中斷通知時，將執行個體設為排空狀態。Amazon ECS 受管執行個體排空功能可促進 Amazon EC2 執行個體的優雅關閉，這些執行個體的終止可能源於多種原因，而非僅限於 Spot 中斷。例如，您可以使用 Amazon EC2 Auto Scaling 容量重新平衡功能，在高中斷風險的情況下主動替換 Spot 執行個體，且受管執行個體排空會對要替換的 Spot 執行個體執行優雅關閉。透過受管執行個體排空功能，您不需要個別啟用 Spot 執行個體排空，因此 Auto Scaling 群組使用者資料中的 `ECS_ENABLE_SPOT_INSTANCE_DRAINING` 是多餘的。如需有關 Spot 執行個體排空的詳細資訊，請參閱 [Spot 執行個體](create-capacity.md#container-instance-spot)。

## 受管執行個體排空如何與 EventBridge 搭配使用
<a name="managed-instance-draining-eventbridge"></a>

Amazon ECS 受管執行個體排空事件會發布至 Amazon EventBridge，Amazon ECS 會在您帳戶的預設匯流排中建立 EventBridge 受管規則，用以支援受管執行個體排空。您可以將這些事件篩選到 Lambda、Amazon SNS 和 Amazon SQS 等 AWS 其他服務，以監控和疑難排解。
+ Amazon EC2 Auto Scaling 會在調用 lifecycle hook 時，將事件傳送至 EventBridge。
+ Spot 中斷通知會發布至 EventBridge。
+ Amazon ECS 會產生錯誤訊息，您可以透過 Amazon ECS 主控台與 API 擷取這些訊息。
+ EventBridge 內建重試機制，可作為暫時故障的緩解措施。

# 設定 Amazon ECS 容量提供者以安全地關閉執行個體
<a name="enable-managed-instance-draining"></a>

當您透過 Amazon ECS 主控台與 AWS CLI建立或更新 Auto Scaling 群組容量提供者時，即可啟用受管執行個體排空。

**注意**  
當您建立容量提供者時，受管執行個體排空預設為啟用。

以下是使用 AWS CLI 建立已啟用受管執行個體耗盡的容量提供者，以及為叢集現有容量提供者啟用受管執行個體耗盡的範例。

**建立已啟用受管執行個體排空的容量提供者**  
若要建立已啟用受管執行個體排空的容量提供者，請使用 `create-capacity-provider` 命令。將 `managedDraining` 參數設為 `ENABLED`。

```
aws ecs create-capacity-provider \
--name capacity-provider \
--auto-scaling-group-provider '{
  "autoScalingGroupArn": "asg-arn",
  "managedScaling": {
    "status": "ENABLED",
    "targetCapacity": 100,
    "minimumScalingStepSize": 1,
    "maximumScalingStepSize": 1
  },
  "managedDraining": "ENABLED",
  "managedTerminationProtection": "ENABLED",
}'
```

回應：

```
{
    "capacityProvider": {
        "capacityProviderArn": "capacity-provider-arn",
        "name": "capacity-provider",
        "status": "ACTIVE",
        "autoScalingGroupProvider": {
            "autoScalingGroupArn": "asg-arn",
            "managedScaling": {
                "status": "ENABLED",
                "targetCapacity": 100,
                "minimumScalingStepSize": 1,
                "maximumScalingStepSize": 1
            },
            "managedTerminationProtection": "ENABLED"
            "managedDraining": "ENABLED"
        }
    }
}
```

**為叢集現有容量提供者啟用受管執行個體排空**  
使用 `update-capacity-provider` 命令為叢集的現有容量提供者啟用受管執行個體排空。您會看到 `managedDraining` 目前顯示 `DISABLED`，`updateStatus` 顯示 `UPDATE_IN_PROGRESS`。

```
aws ecs update-capacity-provider \
--name cp-draining \
--auto-scaling-group-provider '{
  "managedDraining": "ENABLED"
}
```

回應：

```
{
    "capacityProvider": {
        "capacityProviderArn": "cp-draining-arn",
        "name": "cp-draining",
        "status": "ACTIVE",
        "autoScalingGroupProvider": {
            "autoScalingGroupArn": "asg-draining-arn",
            "managedScaling": {
                "status": "ENABLED",
                "targetCapacity": 100,
                "minimumScalingStepSize": 1,
                "maximumScalingStepSize": 1,
                "instanceWarmupPeriod": 300
            },
            "managedTerminationProtection": "DISABLED",
            "managedDraining": "DISABLED" // before update
        },
        "updateStatus": "UPDATE_IN_PROGRESS", // in progress and need describe again to find out the result
        "tags": [
        ]
    }
}
```



使用 `describe-clusters` 命令，並包含 `ATTACHMENTS` 選項。受管執行個體排空連接的 `status` 為 `PRECREATED`，而整體的 `attachmentsStatus` 為 `UPDATING`。

```
aws ecs describe-clusters --clusters cluster-name --include ATTACHMENTS
```

回應：

```
{
    "clusters": [
        {
            ...

            "capacityProviders": [
                "cp-draining"
            ],
            "defaultCapacityProviderStrategy": [],
            "attachments": [
                # new precreated managed draining attachment
                {
                    "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
                    "type": "managed_draining",
                    "status": "PRECREATED",
                    "details": [
                        {
                            "name": "capacityProviderName",
                            "value": "cp-draining"
                        },
                        {
                            "name": "autoScalingLifecycleHookName",
                            "value": "ecs-managed-draining-termination-hook"
                        }
                    ]
                },

                ...

            ],
            "attachmentsStatus": "UPDATING"
        }
    ],
    "failures": []
}
```

更新完成後，請使用 `describe-capacity-providers`，您會看到 `managedDraining` 現在為 `ENABLED`。

```
aws ecs describe-capacity-providers --capacity-providers cp-draining
```

回應：

```
{
    "capacityProviders": [
        {
            "capacityProviderArn": "cp-draining-arn",
            "name": "cp-draining",
            "status": "ACTIVE",
            "autoScalingGroupProvider": {
                "autoScalingGroupArn": "asg-draning-arn",
                "managedScaling": {
                    "status": "ENABLED",
                    "targetCapacity": 100,
                    "minimumScalingStepSize": 1,
                    "maximumScalingStepSize": 1,
                    "instanceWarmupPeriod": 300
                },
                "managedTerminationProtection": "DISABLED",
                "managedDraining": "ENABLED" // successfully update
            },
            "updateStatus": "UPDATE_COMPLETE",
            "tags": []
        }
    ]
}
```

## Amazon ECS 受管執行個體排空疑難排解
<a name="managed-instance-troubleshooting"></a>

您可能需要針對受管執行個體排空的問題進行疑難排解。以下是您在使用時可能遇到的問題與解決方案範例。

**使用自動擴展時，執行個體不會在超過執行個體生命週期上限後終止。**  
如果在使用 Auto Scaling 群組時，您的執行個體即使在達到並超過執行個體生命週期上限之後仍未終止，可能是因為執行個體受到縮減保護。您可以停用受管終止功能，同時允許受管排空功能處理執行個體回收。

## Amazon ECS 受管執行個體的排空行為
<a name="managed-instances-draining-behavior"></a>

Amazon ECS 受管執行個體終止可確保正常的工作負載轉換，同時最佳化成本和維護系統運作狀態。終止系統為執行個體終止提供三種不同的決策路徑，每種都具有不同的時間特性與客戶影響設定檔。

### 終止決策路徑
<a name="managed-instances-termination-paths"></a>

客戶啟動的終止  
在您需要從服務中立即移除容器執行個體時，提供執行個體移除的直接控制權。您可以在強制旗標設定為 true 的情況下調用 DeregisterContainerInstance API，表示即使有任何執行中的工作負載，仍需要立即終止。

系統啟動的閒置終止  
Amazon ECS 受管執行個體透過終止未執行任何任務的閒置 Amazon ECS 容器執行個體，持續監控並主動最佳化成本。ECS 使用啟發式延遲，讓容器執行個體有機會在終止之前取得新啟動的任務。這可以使用 `scaleInAfter` Amazon ECS 受管執行個體容量提供者組態參數來自訂。

基礎結構重新整理終止  
Amazon ECS 受管執行個體會自動管理和更新受管容器執行個體上的軟體，以確保安全性和合規性，同時維持工作負載可用性。如需詳細資訊，請參閱 [Amazon ECS 受管執行個體中的修補](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-patching.html)。

### 優雅排空與工作負載遷移
<a name="managed-instances-draining-coordination"></a>

優雅排空系統會實作與 Amazon ECS 服務管理的複雜協調，確保服務受管任務正確遷移至已排程終止的執行個體之外。

**服務任務排空協調**  
當執行個體轉換為排空狀態時，Amazon ECS 排程器會自動停止在該執行個體上置放新任務，同時為現有服務任務實作優雅關閉程序。服務任務排空包括與服務部署策略、運作狀態檢查需求和排空偏好設定的協調，確保最佳的遷移時間與成功率。

**獨立任務處理**  
獨立任務需要不同的處理方式，因為此類任務無法受益於自動服務管理機制。系統會評估獨立任務特性，包括任務持續時間預估、完成機率分析與客戶影響評估。優雅完成策略允許獨立任務在延長的寬限期內自然完成，而強制終止可確保任務尚未自然完成時，基礎結構重新整理會在可接受的時間範圍內發生。

### 兩階段完成策略
<a name="managed-instances-two-phase-completion"></a>

終止系統會實作兩階段方法，可平衡工作負載持續性與基礎結構管理需求。

**階段 1：優雅完成期間**  
在此階段，系統會實作優先考量工作負載持續性的優雅排空策略。服務任務會透過正常的 Amazon ECS 排程程序優雅排空，獨立任務會持續執行且可能自然完成，系統將監控所有任務透過自然完成流程進入已停止狀態。

**階段 2：硬性截止日期強制執行**  
當優雅完成在可接受的時間範圍內未達成終止目標時，系統會實作硬性截止日期強制執行。硬性截止日期通常設定為排空啟動時間加 7 天，為優雅完成提供大量時間，同時維持營運需求。強制執行包括自動調用強制取消註冊程序並立即終止所有剩餘的任務，無論完成狀態如何。

# 使用 為 Amazon ECS 叢集自動擴展建立資源 AWS 管理主控台
<a name="tutorial-cluster-auto-scaling-console"></a>

了解如何使用 AWS 管理主控台建立叢集自動擴展資源。資源需要名稱時，我們將使用字首 `ConsoleTutorial` 來確保這些資源都具有唯一的名稱，讓使用者能輕鬆找到資源。

**Topics**
+ [先決條件](#console-tutorial-prereqs)
+ [步驟 1：建立 Amazon ECS 叢集](#console-tutorial-cluster)
+ [步驟 2：註冊任務定義](#console-tutorial-register-task-definition)
+ [步驟 3：執行任務](#console-tutorial-run-task)
+ [步驟 4：驗證](#console-tutorial-verify)
+ [步驟 5：清除](#console-tutorial-cleanup)

## 先決條件
<a name="console-tutorial-prereqs"></a>

本教學課程假設已完成下列先決條件：
+ 已完成「[設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md)」中的步驟。
+ 您的 IAM 使用者擁有 [AmazonECS\$1FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess) IAM 政策範例中指定的所需許可。
+ 已建立 Amazon ECS 容器執行個體 IAM 角色。如需詳細資訊，請參閱[Amazon ECS 容器執行個體 IAM 角色](instance_IAM_role.md)。
+ 已建立 Amazon ECS 服務連結 IAM 角色。如需詳細資訊，請參閱[使用 Amazon ECS 的服務連結角色](using-service-linked-roles.md)。
+ 已建立 Auto Scaling 服務連結 IAM 角色。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》**中的 [Amazon EC2 Auto Scaling 的服務連結角色](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html)。
+ 您已建立 VPC 和安全群組。如需詳細資訊，請參閱[建立 Virtual Private Cloud](get-set-up-for-amazon-ecs.md#create-a-vpc)。

## 步驟 1：建立 Amazon ECS 叢集
<a name="console-tutorial-cluster"></a>

使用下列步驟來建立 Amazon ECS 叢集。

Amazon ECS 會代表您建立 Amazon EC2 Auto Scaling 啟動範本和 Auto Scaling 群組，做為 CloudFormation 堆疊的一部分。

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**，然後選擇**建立叢集**。

1. 在**叢集組態**下的**叢集名稱**中，輸入 `ConsoleTutorial-cluster`。

1. 在**基礎設施**下，清除 AWS Fargate （無伺服器），然後選取 **Amazon EC2 執行個體**。接下來，設定作為容量提供者的 Auto Scaling 群組。

   1. 在 **Auto Scaling 群組 (ASG)** 下。選取**建立新 ASG**，然後提供有關該群組的下列詳細資訊：
     + 在**作業系統/架構**中，選擇 **Amazon Linux 2**。
     + 在 **EC2 執行個體類型**中，選擇 **t3.nano**。
     + 對於**容量**，輸入 Auto Scaling 群組中要啟動的最小執行個體數和最大執行個體數。

1. (選用) 若要管理叢集標籤，請展開**標籤**，然後執行下列其中一項操作：

   [新增標籤] 選擇**新增標籤**，並執行下列動作：
   + 在**金鑰**欄位中，輸入金鑰名稱。
   + 在**值**欄位中，輸入金鑰值。

   [移除標籤] 選擇標籤「金鑰」和「值」右側的**移除**。

1. 選擇**建立**。

## 步驟 2：註冊任務定義
<a name="console-tutorial-register-task-definition"></a>

您必須先註冊任務定義，才能在您的叢集上執行任務。任務定義是分在一組的容器清單。以下範例是一種簡單的任務定義，使用 Docker Hub 的 `amazonlinux` 映像，且正好處於睡眠的狀態。如需可用之任務定義參數的詳細資訊，請參閱「[Amazon ECS 任務定義](task_definitions.md)」。

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇 **Task Definitions** (任務定義)。

1. 選擇 **Create new task definitio** (建立新任務定義)、**Create new task definition with JSON** (使用 JSON 建立新的任務定義)。

1. 在 **JSON 編輯器**方塊中貼上下列內容。

   ```
   {
       "family": "ConsoleTutorial-taskdef",
       "containerDefinitions": [
           {
               "name": "sleep",
               "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
               "memory": 20,
               "essential": true,
               "command": [
                   "sh",
                   "-c",
                   "sleep infinity"
               ]
           }
       ],
       "requiresCompatibilities": [
           "EC2"
       ]
   }
   ```

1. 選擇**建立**。

## 步驟 3：執行任務
<a name="console-tutorial-run-task"></a>

註冊帳戶的任務定義後，您就可以在叢集中執行任務。在本教學課程中，您會在 `ConsoleTutorial-cluster` 叢集中執行 `ConsoleTutorial-taskdef` 任務定義的五個執行個體。

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在**叢集**頁面上，選擇 **ConsoleTutorial-cluster**。

1. 在**任務**下選擇**執行新任務**。

1. 在**環境**區段的**運算選項**下，選擇**容量提供者策略**。

1. 在**部署組態**下，針對**應用程式類型**選擇**任務**。

1.  從**系列**下拉式清單中選擇 **ConsoleTutorial-taskdef**。

1. 在**所需的任務**下，輸入 5。

1. 選擇**建立**。

## 步驟 4：驗證
<a name="console-tutorial-verify"></a>

在本教學課程的這個階段，您應該擁有一個正在執行五個任務的叢集，以及一個具有容量提供者的 Auto Scaling 群組。容量提供者已啟用 Amazon ECS 受管擴展。

我們可以透過檢視 CloudWatch 指標、Auto Scaling 群組設定，最後是 Amazon ECS 叢集任務計數，以確認所有項目都正常運作。

**檢視叢集的 CloudWatch 指標**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在螢幕上方的導覽列上，選取區域。

1. 在導覽窗格的**指標**下方，選擇**所有指標**。

1. 在**所有指標**頁面的**瀏覽**索引標籤下，選擇 `AWS/ECS/ManagedScaling`。

1. 選擇 **CapacityProviderName, ClusterName**。

1. 選取與 `ConsoleTutorial-cluster` ** ClusterName** 對應的核取方塊。

1. 在**圖表化指標**標籤下，將**期間**變更為 **30 秒**，**統計值**變更為**最大值**。

   圖表中顯示的值會顯示容量提供者的目標容量值。此值應從 `100` 開始，也就是我們設定的目標容量百分比。您應該會看到此值擴展到 `200`，這會觸發目標追蹤擴展政策的警示。此警示接著會觸發 Auto Scaling 群組水平擴展。

使用下列步驟來檢視 Auto Scaling 群組詳細資訊，以確認水平擴展動作已發生。

**確認 Auto Scaling 群組已水平擴展**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在螢幕上方的導覽列上，選取區域。

1. 在導覽窗格的 **Auto Scaling** 下，選擇 **Auto Scaling Groups (Auto Scaling 群組)**。

1. 選擇在此教學課程中建立的 `ConsoleTutorial-cluster` Auto Scaling 群組。檢視**所需容量**下的值，並檢視**執行個體管理**索引標籤下的執行個體，以確認您的群組是否橫向擴展至兩個執行個體。

使用下列步驟來檢視 Amazon ECS 叢集，以確認 Amazon EC2 執行個體已向叢集註冊，且您的任務已轉換為 `RUNNING` 狀態。

**驗證 Auto Scaling 群組中的執行個體**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇 `ConsoleTutorial-cluster` 叢集。

1. 在**任務**標籤上，確認您看到五個處於 `RUNNING` 狀態的任務。

## 步驟 5：清除
<a name="console-tutorial-cleanup"></a>

完成此教學課程時，清除與其相關的資源，以免未使用的資源產生費用。不支援刪除容量提供者和任務定義，但是這些資源都沒有相關聯的成本。

**清除教學課程資源**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇 **ConsoleTutorial-cluster**。

1. 在 **ConsoleTutorial-cluster** 頁面上，選擇**任務**索引標籤，然後依序選擇**停止**、**全部停止**。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇 **ConsoleTutorial-cluster**。

1. 在頁面右上角，選擇**刪除叢集**。

1. 在確認方塊中，輸入 **delete **ConsoleTutorial-cluster****，然後選擇**刪除**。

1. 使用以下步驟刪除 Auto Scaling 群組。

   1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

   1. 在螢幕上方的導覽列上，選取區域。

   1. 在導覽窗格的 **Auto Scaling** 下，選擇 **Auto Scaling Groups (Auto Scaling 群組)**。

   1. 選取 `ConsoleTutorial-cluster` Auto Scaling 群組，然後選擇**動作**。

   1.  在 **Actions (動作)** 選單中，選擇 **Delete (刪除)**。在確認方塊中，輸入 **delete**，然後選擇**刪除**。

# Amazon ECS 的 Amazon EC2 容器執行個體
<a name="create-capacity"></a>

Amazon ECS 容器執行個體是執行 Amazon ECS 容器代理程式並已在叢集中註冊的 Amazon EC2 執行個體。使用容量提供者、外部容量提供者或 Auto Scaling 群組容量提供者透過 Amazon ECS 執行任務時，任務會置放在作用中的容器執行個體上。您必須負責容器執行個體的管理與維護。

雖然您可以建立自己的 Amazon EC2 執行個體 AMI，以符合在 Amazon ECS 上執行容器化工作負載所需的基本規格，但 Amazon ECS 最佳化 AMIs 是由 AWS 工程師在 Amazon ECS 上預先設定和測試。這是讓您快速上手並在 AWS 上執行容器最簡單的方法。

透過主控台建立叢集時，Amazon ECS 會使用與所選作業系統相關聯的最新 AMI 為執行個體建立啟動範本。

當您使用 CloudFormation 建立叢集時，SSM 參數是 Auto Scaling 群組執行個體的 Amazon EC2 啟動範本的一部分。您可以設定範本，透過動態 Systems Manager 參數來決定要部署的 Amazon ECS 最佳化 AMI。此參數可確保每次部署堆疊時，檢查是否有需要套用至 EC2 執行個體的可用更新。如需如何使用 Systems Manager 參數的範例，請參閱 *AWS CloudFormation User Guide* 中的 [Create an Amazon ECS cluster with the Amazon ECS-optimized Amazon Linux 2023 AMI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#aws-resource-ecs-cluster--examples--Create_an_cluster_with_the_Amazon_Linux_2023_ECS-Optimized-AMI)。
+ [擷取 Amazon ECS 最佳化 Linux AMI 中繼資料](retrieve-ecs-optimized_AMI.md)
+ [擷取 Amazon ECS 最佳化 Bottlerocket AMI 中繼資料](ecs-bottlerocket-retrieve-ami.md)
+ [擷取 Amazon ECS 最佳化 Windows AMI 中繼資料](retrieve-ecs-optimized_windows_AMI.md)

您可以從與應用程式相容的執行個體類型中選擇。使用容量較大的執行個體，您可以同時啟動更多任務。使用較小的執行個體，您能夠以更精細的橫向擴充方式節省成本。您不需要選擇適合叢集中所有應用程式的單一 Amazon EC2 執行個體類型。相反地，您可以建立多個 Auto Scaling 群組，每個群組使用不同的執行個體類型。然後，您可以為這些群組中的每一個建立 Amazon EC2 容量提供者。

依據以下準則，決定要使用的執行個體系列類型與執行個體類型：
+ 排除不符合應用程式特定需求的執行個體類型或執行個體系列。例如，如果您的應用程式需要 GPU，您可以排除任何沒有 GPU 的執行個體類型。
+ 考量包括網路輸送量與儲存空間在內的需求。
+ 考量 CPU 與記憶體。一般而言，CPU 和記憶體必須足夠容納至少一個要執行任務的複本。

## Spot 執行個體
<a name="container-instance-spot"></a>

相較於隨需執行個體，Spot 容量可大幅節省成本。Spot 容量是指超額容量，其價格明顯低於隨需或預留容量。Spot 容量適用於批次處理和機器學習工作負載，以及開發和預備環境。更一般來說，它適用於任何能容忍暫時停機的工作負載。

了解下列結果，因為 Spot 容量可能無法隨時可用。
+ 在需求極高期間，Spot 容量可能無法使用。這可能會導致 Amazon EC2 Spot 執行個體啟動延遲。在這些事件中，Amazon ECS 服務會重試啟動任務，而 Amazon EC2 Auto Scaling 群組也會重試啟動執行個體，直到所需的容量可用為止。Amazon EC2 不會以隨需容量取代 Spot 容量。
+ 當容量的整體需求增加時，Spot 執行個體與任務可能只會在收到警告兩分鐘後隨即終止。在傳送警告之後，任務應該在執行個體完全終止之前，視需要開始依序關機。這有助於將錯誤的可能性降至最低。如需正常關機的詳細資訊，請參閱[使用 ECS 正常關機](https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/)。

若要協助減少 Spot 容量短缺，請考慮下列建議：
+ 使用多個區域和可用區域：Spot 容量會因區域和可用區域而異。您可以透過在多個區域和可用區域執行工作負載來提高 Spot 可用性。如果可能，請在您執行任務和執行個體的區域中，在所有可用區域中指定子網路。
+ 使用多個 Amazon EC2 執行個體類型：當您將混合執行個體政策與 Amazon EC2 Auto Scaling 搭配使用時，會在您的 Auto Scaling 群組中啟動多個執行個體類型。這可確保在需要時能滿足 Spot 容量的請求。為了將可靠性最大化並將複雜性最小化，請在混合執行個體政策中使用 CPU 和記憶體數量大致相同的執行個體類型。這些執行個體可以來自不同世代，也可以是相同基礎執行個體類型的變體。請注意，它們可能擁有您可能不需要的其他功能。這類清單的範例可能包括 m4.large、m5.large、m5a.large、m5d.large、m5n.large、m5dn.large 和 m5ad.large。如需詳細資訊，請參閱「Amazon EC2 Auto Scaling 使用者指南」**中的[具備多個執行個體類型及購買選項的 Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html)。
+ 使用容量最佳化的 Spot 配置策略：使用 Amazon EC2 Spot，您可以在容量和成本最佳化配置策略之間進行選擇。如果您在啟動新執行個體時選擇容量最佳化策略，Amazon EC2 Spot 會在所選可用區域中選取具有最高可用性的執行個體類型。這有助於降低執行個體在啟動後立即終止的可能性。

如需有關如何在容器執行個體上設定 Spot 終止通知的資訊，請參閱：
+ [設定 Amazon ECS Linux 容器執行個體接收 Spot 執行個體通知](spot-instance-draining-linux-container.md)
+ [設定 Amazon ECS Windows 容器執行個體接收 Spot 執行個體通知](windows-spot-instance-draining-container.md)

# Amazon ECS 最佳化 Linux AMI
<a name="ecs-optimized_AMI"></a>

**重要**  
Amazon ECS 最佳化 Amazon Linux 2 AMI 將於 2026 年 6 月 30 日終止服務，與上游 Amazon Linux 2 作業系統的相同終止服務日期同步 (如需詳細資訊，請參閱 [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/))。建議客戶將應用程式升級至 Amazon Linux 2023，該版本提供直至 2028 年的長期技術支援。如需有關從 Amazon Linux 2 遷移至 Amazon Linux 2023 的資訊，請參閱[從 Amazon Linux 2 Amazon ECS 最佳化 AMI 遷移至 Amazon Linux 2023 Amazon ECS 最佳化 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/al2-to-al2023-ami-transition.html)。

根據預設，所有 Amazon ECS 最佳化 AMIs 的棄用日期都會設為 AMI 建立日期的兩年後。您可以使用 Amazon EC2 `DescribeImages` API 來檢查 AMI 的棄用狀態和日期。如需詳細資訊，請參閱《*Amazon Elastic Compute Cloud API 參考*》中的 [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)。

Amazon ECS 會提供根據執行容器工作負載的需求與建議而預先設定的 Amazon ECS 最佳化 AMI。建議為 Amazon EC2 執行個體使用 Amazon ECS 最佳化 Amazon Linux 2023 AMI。透過最新的 Amazon ECS 最佳化 AMI 啟動您的容器執行個體時，可確保您接收到最新的安全性更新和容器代理程式版本。如需執行個體啟動方式的詳細資訊，請參閱 [啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。

透過主控台建立叢集時，Amazon ECS 會使用與所選作業系統相關聯的最新 AMI 為執行個體建立啟動範本。

當您使用 CloudFormation 建立叢集時，SSM 參數是 Auto Scaling 群組執行個體的 Amazon EC2 啟動範本的一部分。您可以設定範本，透過動態 Systems Manager 參數來決定要部署的 Amazon ECS 最佳化 AMI。此參數可確保每次部署堆疊時，檢查是否有需要套用至 EC2 執行個體的可用更新。如需如何使用 Systems Manager 參數的範例，請參閱 *AWS CloudFormation User Guide* 中的 [Create an Amazon ECS cluster with the Amazon ECS-optimized Amazon Linux 2023 AMI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#aws-resource-ecs-cluster--examples--Create_an_cluster_with_the_Amazon_Linux_2023_ECS-Optimized-AMI)。

如需自訂 Amazon ECS 最佳化 AMI，請參閱 GitHub 上的 [Amazon ECS Optimized AMI Build Recipes](https://github.com/aws/amazon-ecs-ami)。

下列 Amazon ECS 最佳化 AMI 的變體適用於搭配 Amazon Linux 2023 作業系統的 Amazon EC2 執行個體。


| 作業系統 | AMI | Description | 儲存組態 | 
| --- | --- | --- | --- | 
| Amazon Linux 2023 |  Amazon ECS 最佳化 Amazon Linux 2023 AMI |  Amazon Linux 2023 是新一代的 Amazon Linux AWS。建議在大部分情況下為 Amazon ECS 工作負載啟動 Amazon EC2 執行個體。如需詳細資訊，請參閱 *Amazon Linux 2023 使用者指南*中的[什麼是 Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html)。  | 根據預設，Amazon ECS 最佳化 Amazon Linux 2023 AMI 附有單個 30 GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2023 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2023 (arm64) |  Amazon ECS 最佳化 Amazon Linux 2023 (arm64) AMI |  此 AMI 以 Amazon Linux 2023 為基礎，建議在啟動 Amazon EC2 執行個體 (採用 ARM 型 AWS Graviton/Graviton 2/Graviton 3/Graviton 4 處理器的執行個體) 時為 Amazon ECS 工作負載採用。如需詳細資訊，請參閱 *Amazon EC2 Instance Types guide* 中的 [Specifications for the Amazon EC2 general purpose instances](https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html)。  | 根據預設，Amazon ECS 最佳化 Amazon Linux 2023 AMI 附有單個 30 GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2023 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2023 (Neuron) |  Amazon ECS 最佳化 Amazon Linux 2023 AMI  |  此 AMI 以 Amazon Linux 2023 為基礎，適用於 Amazon EC2 Inf1、Trn1 或 Inf2 執行個體。它預先設定了 AWS Inferentia 和 AWS Trainium 驅動程式，以及 Docker 的 AWS Neuron 執行時間，這使得在 Amazon ECS 上執行機器學習推論工作負載更加輕鬆。如需詳細資訊，請參閱[AWS Neuron 機器學習工作負載的 Amazon ECS 任務定義](ecs-inference.md)。 Amazon ECS 最佳化 Amazon Linux 2023 (Neuron) AMI 未預先安裝 AWS CLI 。  | 根據預設，Amazon ECS 最佳化 Amazon Linux 2023 AMI 附有單個 30 GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2023 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2023 GPU | Amazon ECS 最佳化 Amazon Linux 2023 GPU AMI |  根據 Amazon Linux 2023，建議在為 Amazon ECS 工作負載啟動 Amazon EC2 GPU 型執行個體時使用此 AMI。它配備有已預先設定的 NVIDIA 核心驅動程式和 Docker GPU 執行時間，可讓您在 Amazon ECS 上執行利用 GPU 的工作負載。如需詳細資訊，請參閱[GPU 工作負載的 Amazon ECS 任務定義](ecs-gpu.md)。  | 根據預設，Amazon ECS 最佳化 Amazon Linux 2023 AMI 附有單個 30 GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2023 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 

下列 Amazon ECS 最佳化 AMI 的變體適用於搭配 Amazon Linux 2 作業系統的 Amazon EC2 執行個體。


| 作業系統 | AMI | Description | 儲存組態 | 
| --- | --- | --- | --- | 
|  **Amazon Linux 2**   |  Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 AMI | 以 Amazon Linux 2 為基礎，在啟動 Amazon EC2 執行個體時使用此 AMI，而針對 Amazon ECS 工作負載，則使用 Linux 核心 5.10 而不是核心 4.14。Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 AMI 未預先安裝 AWS CLI 。 | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
|  **Amazon Linux 2**  |  Amazon ECS 最佳化 Amazon Linux 2 AMI | 這適用於您的 Amazon ECS 工作負載。Amazon ECS 最佳化 Amazon Linux 2 AMI 不提供 AWS CLI 預先安裝。 | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
|  **Amazon Linux 2 (arm64)**  |  Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 (arm64) AMI |  以 Amazon Linux 2 為基礎，此 AMI 適用於您的 Amazon EC2 執行個體，其採用 Arm 型 AWS Graviton/Graviton 2/Graviton 3/Graviton 4 處理器，而且您想要針對 Amazon ECS 工作負載使用 Linux 核心 5.10 而非 Linux 核心 4.14。如需詳細資訊，請參閱 *Amazon EC2 Instance Types guide* 中的 [Specifications for Amazon EC2 general purpose instances](https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html)。 Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 不會隨附 AWS CLI 預先安裝的 。  | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2 (arm64) | Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI |  根據 Amazon Linux 2，此 AMI 適用於啟動 Amazon EC2 執行個體時，這些執行個體採用 Arm 型 AWS Graviton/Graviton 2/Graviton 3/Graviton 4 處理器，適用於 Amazon ECS 工作負載。 Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 不會隨附 AWS CLI 預先安裝的 。  | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
|  **Amazon Linux 2 (GPU)**  | Amazon ECS GPU 最佳化核心 5.10 AMI | 此 AMI 以 Amazon Linux 2 為基礎，建議在啟動基於 Amazon EC2 GPU 的執行個體時，搭配 Linux 核心 5.10 為 Amazon ECS 工作負載採用。它配備有已預先設定的 NVIDIA 核心驅動程式和 Docker GPU 執行時間，可讓您在 Amazon ECS 上執行利用 GPU 的工作負載。如需詳細資訊，請參閱[GPU 工作負載的 Amazon ECS 任務定義](ecs-gpu.md)。 | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2 (GPU) | Amazon ECS GPU 最佳化 AMI | 此 AMI 以 Amazon Linux 2 為基礎，建議在啟動基於 Amazon EC2 GPU 的執行個體時，搭配 Linux 核心 4.14 為 Amazon ECS 工作負載採用。它配備有已預先設定的 NVIDIA 核心驅動程式和 Docker GPU 執行時間，可讓您在 Amazon ECS 上執行利用 GPU 的工作負載。如需詳細資訊，請參閱[GPU 工作負載的 Amazon ECS 任務定義](ecs-gpu.md)。 | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2 (Neuron)  | Amazon ECS 最佳化 Amazon Linux 2 (Neuron) 核心 5.10 AMI  | 以 Amazon Linux 2 為基礎，此 AMI 適用於 Amazon EC2 Inf1、Trn1 或 Inf2 執行個體。它預先設定了 AWS Inferentia 搭配 Linux 核心 5.10 和 AWS Trainium 驅動程式，以及 Docker 的 AWS Neuron 執行期，這使得在 Amazon ECS 上執行機器學習推論工作負載更加輕鬆。如需詳細資訊，請參閱[AWS Neuron 機器學習工作負載的 Amazon ECS 任務定義](ecs-inference.md)。Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI 不會隨附 AWS CLI 預先安裝的 。 | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 
| Amazon Linux 2 (Neuron)  | Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI | 以 Amazon Linux 2 為基礎，此 AMI 適用於 Amazon EC2 Inf1、Trn1 或 Inf2 執行個體。它預先設定了 AWS Inferentia 和 AWS Trainium 驅動程式，以及 Docker 的 AWS Neuron 執行期，這使得在 Amazon ECS 上執行機器學習推論工作負載更加輕鬆。如需詳細資訊，請參閱[AWS Neuron 機器學習工作負載的 Amazon ECS 任務定義](ecs-inference.md)。Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI 不會隨附 AWS CLI 預先安裝的 。 | 依預設，基於 Amazon Linux 2 的 Amazon ECS 最佳化 AMI (Amazon ECS 最佳化 Amazon Linux 2 AMI、Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 和 Amazon ECS GPU 最佳化 AMI) 隨附有一個 30-GiB 的根磁碟區。您可以在修改啟動階段的這個 30 GiB 根磁碟區，增加或減少您容器執行個體的可用儲存體。此儲存體用於作業系統和 Docker 映像及中繼資料。Amazon ECS 最佳化 Amazon Linux 2 AMI 的預設檔案系統為 `xfs`，並且 Docker 使用 `overlay2` 儲存驅動程式。如需詳細資訊，請參閱 Docker 文件中的[使用 OverlayFS 儲存體驅動程式](https://docs.docker.com/engine/storage/drivers/overlayfs-driver/)。 | 

Amazon ECS 在 GitHub 上提供了 Amazon ECS 最佳化 AMI 的 Linux 變體變更記錄。如需詳細資訊，請參閱[變更記錄](https://github.com/aws/amazon-ecs-ami/blob/main/CHANGELOG.md)。

Amazon ECS 最佳化 AMI 的 Linux 變體使用 Amazon Linux 2 AMI 或 Amazon Linux 2023 AMI 作為其基礎。透過查詢 Systems Manager Parameter Store API，即可擷取每個變體的 AMI 名稱。如需詳細資訊，請參閱[擷取 Amazon ECS 最佳化 Linux AMI 中繼資料](retrieve-ecs-optimized_AMI.md)。此外，還提供 Amazon Linux 2 AMI 版本備註。如需詳細資訊，請參閱 [Amazon Linux 2 版本備註](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)。此外，還提供 Amazon Linux 2023 版本備註。如需詳細資訊，請參閱 [Amazon Linux 2023 版本備註](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html)。

下列頁面提供變更的其他資訊：
+ 在 GitHub 上取得[來源 AMI 發行](https://github.com/aws/amazon-ecs-ami/releases)說明
+ Docker 文件中的 [Docker 引擎版本備註](https://docs.docker.com/engine/release-notes/)
+ NVIDIA 文件中的 [NVIDIA 驅動程式文件](https://docs.nvidia.com/datacenter/tesla/index.html)
+ GitHub 上的 [Amazon ECS agent changelog](https://github.com/aws/amazon-ecs-agent/blob/master/CHANGELOG.md)

  `ecs-init` 應用程式的原始程式碼，以及用來封裝代理程式的指令碼和組態，現在已成為代理程式儲存庫的一部分。對於 `ecs-init` 舊版本和封裝，請參閱 GitHub 上的 [Amazon ecs-init 變更紀錄](https://github.com/aws/amazon-ecs-init/blob/master/CHANGELOG.md)

## 將安全性更新套用至 Amazon ECS 最佳化 AMI
<a name="ecs-optimized-AMI-security-changes"></a>

Amazon ECS 最佳化 AMI 以 Amazon Linux 為基礎，包含自訂版本的 cloud-init。Cloud-init 是一種套件，用於在雲端運算環境中引導 Linux 映像，並在啟動執行個體時執行所需的動作。依預設，在 2024 年 6 月 12 日之前發行的所有以 Amazon Linux 為基礎的 Amazon ECS 最佳化 AMI，皆會在執行個體啟動時套用所有「關鍵」與「重要」安全性更新。

自 2024 年 6 月 12 日起，以 Amazon Linux 2 為基礎的 Amazon ECS 最佳化 AMI 版本將不再預設在啟動時更新套件。因此，建議在新版 Amazon ECS 最佳化 AMI 發布時，及時更新至最新版本。Amazon ECS 最佳化 AMI 會在有可用安全性更新或基礎 AMI 變更時發行。這將確保您收到最新的套件版本與安全性更新，而且套件版本在執行個體啟動時不可變。如需有關擷取最新 Amazon ECS 最佳化 AMI 的詳細資訊，請參閱[擷取 Amazon ECS 最佳化 Linux AMI 中繼資料](retrieve-ecs-optimized_AMI.md)。

建議將環境自動化，以便在可用時自動更新至新 AMI。如需有關可用選項的資訊，請參閱 [Amazon ECS enables easier EC2 capacity management, with managed instance draining](https://aws.amazon.com/blogs/containers/amazon-ecs-enables-easier-ec2-capacity-management-with-managed-instance-draining/)。

若要在 AMI 版本上繼續手動套用「關鍵」與「重要」安全性更新，您可以在 Amazon EC2 執行個體上執行下列命令。

```
yum update --security
```

**警告**  
 更新 docker 或容器化套件會停止主機上所有執行中的容器，這表示所有執行中的 Amazon ECS 任務都會停止。據以規劃，將服務中斷降至最低。

若要在啟動時重新啟用安全性更新，您可以在啟動 Amazon EC2 執行個體時，將以下一行新增至 cloud-init 使用者資料的 `#cloud-config` 區段。如需詳細資訊，請參閱 *Amazon Linux User Guide* 中的[Using cloud-init on Amazon Linux 2](https://docs.aws.amazon.com/linux/al2/ug/amazon-linux-cloud-init.html)。

```
#cloud-config
repo_upgrade: security
```

## Amazon ECS 最佳化 AL2023 GPU AMIs 中的版本鎖定套件
<a name="ecs-optimized-ami-version-locked-packages"></a>

某些套件對於 Amazon ECS 最佳化 AL2023 GPU AMIs 中 GPU 功能的正確、高效能行為至關重要。其中包含：
+ NVIDIA 驅動程式 (`nvidia*`)
+ 核心模組 (`kmod*`)
+ NVIDIA 程式庫 (`libnvidia*`)
+ 核心套件 (`kernel*`)

**注意**  
這並非一份詳盡無遺的清單。鎖定套件的完整清單可透過 取得 `dnf versionlock list`

這些套件為版本鎖定，以確保穩定性，並防止可能中斷 GPU 工作負載的意外變更。因此，這些套件通常應該在受管程序的範圍內進行修改，以正常處理潛在問題並維護 GPU 功能。

為了防止意外修改，`dnf versionlock`外掛程式會用於這些套件。

如果您想要修改鎖定的套件，您可以：

```
# unlock a single package
sudo dnf versionlock delete $PACKAGE_NAME

# unlock all packages
sudo dnf versionlock clear
```

**重要**  
需要更新這些套件時，客戶應考慮使用包含必要更新的最新 AMI 版本。如果需要更新現有的執行個體，則應採用涉及解鎖、更新和重新鎖定套件的謹慎方法，始終確保在整個過程中維護 GPU 功能。

# 擷取 Amazon ECS 最佳化 Linux AMI 中繼資料
<a name="retrieve-ecs-optimized_AMI"></a>

您能以程式設計方式擷取 Amazon ECS 最佳化 AMI 中繼資料。中繼資料包括 AMI 名稱、Amazon ECS 容器代理程式版本，以及包含 Docker 版本的 Amazon ECS 執行時期版本。

透過主控台建立叢集時，Amazon ECS 會使用與所選作業系統相關聯的最新 AMI 為執行個體建立啟動範本。

當您使用 CloudFormation 建立叢集時，SSM 參數是 Auto Scaling 群組執行個體的 Amazon EC2 啟動範本的一部分。您可以設定範本，透過動態 Systems Manager 參數來決定要部署的 Amazon ECS 最佳化 AMI。此參數可確保每次部署堆疊時，檢查是否有需要套用至 EC2 執行個體的可用更新。如需如何使用 Systems Manager 參數的範例，請參閱 *AWS CloudFormation User Guide* 中的 [Create an Amazon ECS cluster with the Amazon ECS-optimized Amazon Linux 2023 AMI](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#aws-resource-ecs-cluster--examples--Create_an_cluster_with_the_Amazon_Linux_2023_ECS-Optimized-AMI)。

透過查詢 Systems Manager 參數存放區 API，可以程式設計方式擷取 Amazon ECS 最佳化 AMI 的每個變體的 AMI ID、映像名稱、作業系統、容器代理程式版本、來源映像名稱以及執行時間版本。如需有關 Systems Manager 參數存放區 API 的詳細資訊，請參閱 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) 和 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html)。

**注意**  
您的管理使用者必須擁有以下 IAM 許可，才能擷取 Amazon ECS 最佳化 AMI 中繼資料。已將這些權限新增至 `AmazonECS_FullAccess` IAM 政策。  
ssm:GetParameters
ssm:GetParameter
ssm:GetParametersByPath

## Systems Manager 參數存放區參數格式。
<a name="ecs-optimized-ami-parameter-format"></a>

以下是每個 Amazon ECS 最佳化 AMI 變體的參數名稱格式。

**Linux Amazon ECS 最佳化 AMI**
+ Amazon Linux 2023 AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/<version>
  ```
+ Amazon Linux 2023 (arm64) AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/arm64/<version>
  ```
+ Amazon Linux 2023 (Neuron) AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/<version>
  ```
+ Amazon Linux 2023 (GPU) AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2023/gpu/<version>
  ```

  Amazon Linux 2 AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/<version>
  ```
+ Amazon Linux 2 核心 5.10 AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/<version>
  ```
+ Amazon Linux 2 (arm64) AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/arm64/<version>
  ```
+ Amazon Linux 2 核心 5.10 (arm64) AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/arm64/<version>
  ```
+ Amazon ECS GPU 最佳化核心 5.10 AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/gpu/<version>
  ```
+ Amazon Linux 2 (GPU) AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/<version>
  ```
+ Amazon ECS 最佳化 Amazon Linux 2 (Neuron) 核心 5.10 AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/inf/<version>
  ```
+ Amazon Linux 2 (Neuron) AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/inf/<version>
  ```

以下參數名稱格式使用子參數 `image_id` 來擷取最新的建議 Amazon ECS 最佳化 Amazon Linux 2 AMI 的映像 ID。

```
/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id
```

以下參數名稱格式透過指定 AMI 名稱來擷取特定 Amazon ECS 最佳化 AMI 版本的中繼資料。
+ Amazon ECS 最佳化 Amazon Linux 2 AMI 中繼資料：

  ```
  /aws/service/ecs/optimized-ami/amazon-linux-2/amzn2-ami-ecs-hvm-2.0.20181112-x86_64-ebs
  ```

**注意**  
可擷取 Amazon ECS 最佳化 Amazon Linux 2 AMI 的所有版本。只能擷取 Amazon ECS 最佳化 AMI 版本 `amzn-ami-2017.09.l-amazon-ecs-optimized` (Linux) 及更新版本。

## 範例
<a name="ecs-optimized-ami-parameter-examples"></a>

下列範例顯示您可擷取每個 Amazon ECS 最佳化 AMI 變體中繼資料的方法。

### 擷取最新的建議 Amazon ECS 最佳化 AMI 的中繼資料
<a name="ecs-optimized-ami-parameter-examples-1"></a>

您可以使用 AWS CLI 搭配下列 AWS CLI 命令，擷取最新建議的 Amazon ECS 最佳化 AMI。

**Linux Amazon ECS 最佳化 AMI**
+ **對於 Amazon ECS 最佳化 Amazon Linux 2023 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/recommended --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Amazon Linux 2023 (arm64) AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/arm64/recommended --region us-east-1
  ```
+ **Amazon ECS 最佳化 Amazon Linux 2023 (Neuron) AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/recommended --region us-east-1
  ```
+ **Amazon ECS 最佳化 Amazon Linux 2023 GPU AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/gpu/recommended --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/recommended --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Amazon Linux 2 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 (arm64) AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/arm64/recommended --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/arm64/recommended --region us-east-1
  ```
+ **Amazon ECS GPU 最佳化核心 5.10 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/gpu/recommended --region us-east-1
  ```
+ **對於 Amazon ECS GPU 最佳化 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1
  ```
+ **Amazon ECS 最佳化 Amazon Linux 2 (Neuron) 核心 5.10 AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/inf/recommended --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended --region us-east-1
  ```

### 擷取最新建議的 Amazon ECS 最佳化 Amazon Linux 2023 AMI 的映像 ID
<a name="ecs-optimized-ami-parameter-examples-6"></a>

您可以使用子參數 `image_id` 來擷取最新建議的 Amazon ECS 最佳化 Amazon Linux 2023 AMI ID 的映像 ID。

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/recommended/image_id --region us-east-1
```

若只要擷取 `image_id` 值，您可以查詢特定的參數值，例如：

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/recommended/image_id --region us-east-1 --query "Parameters[0].Value"
```

### 擷取特定 Amazon ECS 最佳化 Amazon Linux 2 AMI 版本的中繼資料
<a name="ecs-optimized-ami-parameter-examples-2"></a>

使用 AWS CLI 搭配下列 AWS CLI 命令，擷取特定 Amazon ECS 最佳化 Amazon Linux AMI 版本的中繼資料。將 AMI 名稱替換為要擷取的 Amazon ECS 最佳化 Amazon Linux AMI 的名稱。

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/amzn2-ami-ecs-hvm-2.0.20200928-x86_64-ebs --region us-east-1
```

### 利用 Systems Manager GetParametersByPath API 來擷取 Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 AMI 中繼資料
<a name="ecs-optimized-ami-parameter-examples-3"></a>

使用 Systems Manager GetParametersByPath API 搭配 AWS CLI 下列命令擷取 Amazon ECS 最佳化 Amazon Linux 2 AMI 中繼資料。

```
aws ssm get-parameters-by-path --path /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/ --region us-east-1
```

### 擷取最新的建議 Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 AMI 的映像 ID
<a name="ecs-optimized-ami-parameter-examples-4"></a>

您可以使用子參數 `image_id` 來擷取最新的建議 Amazon ECS 最佳化 Amazon Linux 2 核心 5.10 AMI ID 的映像 ID。

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/recommended/image_id --region us-east-1
```

若只要擷取 `image_id` 值，您可以查詢特定的參數值，例如：

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id --region us-east-1 --query "Parameters[0].Value"
```

### 在 CloudFormation 範本中使用最新建議的 Amazon ECS 最佳化 AMI
<a name="ecs-optimized-ami-parameter-examples-5"></a>

透過參考 Systems Manager 參數存放區名稱，可以在 CloudFormation 範本中參考最新建議的 Amazon ECS 最佳化 AMI。

**Linux 範例**

```
Parameters:kernel-5.10
  LatestECSOptimizedAMI:
    Description: AMI ID
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: /aws/service/ecs/optimized-ami/amazon-linux-2/kernel-5.10/recommended/image_id
```

# 從 Amazon Linux 2 遷移至 Amazon Linux 2023 Amazon ECS 最佳化 AMI
<a name="al2-to-al2023-ami-transition"></a>

遵循 [Amazon Linux](https://aws.amazon.com/amazon-linux-2/faqs) 支援政策，Amazon ECS 將於 2026 年 6 月 30 日起終止對 Amazon Linux 2 Amazon ECS 最佳化 AMI 的標準支援。此日期之後，Amazon ECS 代理程式版本將被固定，且僅當來源 Amazon Linux 2 AMI 進行更新時，才會發布新的 Amazon Linux 2 Amazon ECS 最佳化 AMI。完整終止服務 (EOL) 將與 2026 年 6 月 30 日生效，此後將不再發布 Amazon ECS 最佳化的 Amazon Linux 2 AMI，即使來源 AMI 有更新亦是如此。

Amazon Linux 2023 採用預設安全的方式，具備預先設定的安全政策、處於寬容模式的 SELinux、預設啟用的僅 IMDSv2 模式、最佳化的開機時間以及改善的套件管理功能，可大幅提升安全性與效能。

Amazon Linux 2 與 Amazon Linux 2023 Amazon ECS 最佳化 AMI 之間具有高度相容性，大多數客戶在這兩個作業系統之間遇到的工作負載變更很小，甚至為零。

如需詳細資訊，請參閱 *Amazon Linux 2023 User Guide* 中的 [Comparing Amazon Linux 2 and *Amazon Linux 2023*](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html)，以及 [AL2023 FAQs](https://aws.amazon.com/linux/amazon-linux-2023/faqs)。

## 相容性考量
<a name="al2-to-al2023-ami-transition-compatibility"></a>

### 套件管理與作業系統更新
<a name="al2-to-al2023-ami-transition-compatibility-package-management"></a>

與舊版本的 Amazon Linux 不同，Amazon ECS 最佳化 Amazon Linux 2023 AMI 會鎖定到特定版本的 Amazon Linux 儲存庫。這可以防止使用者意外更新套件，導致非必要變更或重大變更。如需詳細資訊，請參閱 *Amazon Linux 2023 User Guide* 中的 [Managing repositories and OS updates in Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)。

### Linux 核心版本
<a name="al2-to-al2023-ami-transition-compatibility-kernel"></a>

Amazon Linux 2 AMI 以 Linux 核心 4.14 與 5.10 為基礎，而 Amazon Linux 2023 使用 Linux 核心 6.1 與 6.12。如需詳細資訊，請參閱 *Amazon Linux 2023 User Guide* 中的 [Comparing Amazon Linux 2 and Amazon Linux 2023 kernels](https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2-kernel.html)。

### 套件可用性變更
<a name="al2-to-al2023-ami-transition-compatibility-packages"></a>

以下是 Amazon Linux 2023 中的重要套件變更：
+ Amazon Linux 2 中的部分來源二進位套件在 Amazon Linux 2023 中不再提供。如需詳細資訊，請參閱 *Amazon Linux 2023 Release Notes* 中的 [Packages removed from Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/release-notes/removed.html)。
+ Amazon Linux 支援不同版本套件方式的變更。Amazon Linux 2 中使用的 `amazon-linux-extras` 系統不存在於 Amazon Linux 2023 中。所有套件皆可在「核心」儲存庫中使用。
+ Amazon Linux 2023 不支援適用於 Enterprise Linux (EPEL) 的額外套件。如需詳細資訊，請參閱 *Amazon Linux 2023 User Guide* 中的 [EPEL compatibility in Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/epel.html)。
+ Amazon Linux 2023 不支援 32 位元應用程式。如需詳細資訊，請參閱 *Amazon Linux 2023 User Guide* 中的 [Deprecated features from Amazon Linux 2](https://docs.aws.amazon.com/linux/al2023/ug/deprecated-al2.html#deprecated-32bit-rpms)。

### 控制群組 (cgroups) 變更
<a name="al2-to-al2023-ami-transition-compatibility-cgroups"></a>

控制群組 (cgroup) 是 Linux 核心功能，用於階層式整理程序並為其分配系統資源。控制組廣泛用於執行容器執行期，並由 `systemd` 執行。

Amazon ECS 代理程式、Docker 與 containerd 都支援 cgroupv1 及 cgroupv2。Amazon ECS 代理程式與容器執行時期會代為管理 cgroup，因此 Amazon ECS 客戶不需要為此底層 cgroup 升級進行任何變更。

如需有關 cgroupv2 的更多詳細資訊，請參閱 *Amazon Linux 2023 User Guide* 中的 [Control groups v2 in Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/cgroupv2.html)。

### 執行個體中繼資料服務 (IMDS) 變更
<a name="al2-to-al2023-ami-transition-compatibility-imds"></a>

Amazon Linux 2023 預設需要執行個體中繼資料服務第 2 版 (IMDSv2)。IMDSv2 有多項優勢，有助於改善安全狀態。它使用面向工作階段的身分驗證方法，需要透過一個簡單的 HTTP PUT 請求來建立一個秘密權杖以啟動工作階段。工作階段的權杖有效期可設定為 1 秒至 6 小時之間的任何時間。

如需有關從 IMDSv1 轉換至 IMDSv2 的詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Transition to using Instance Metadata Service Version 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-transition-to-version-2.html)。

若您仍想使用 IMDSv1，可以透過使用執行個體中繼資料選項啟動屬性，手動覆寫設定來實現。

### 記憶體交換積極性變更
<a name="al2-to-al2023-ami-transition-compatibility-memory-swappiness"></a>

Amazon Linux 2023 與 cgroups v2 不支援容器層級的記憶體交換積極性。如需詳細資訊，請參閱[在 Amazon ECS 上管理容器交換記憶體空間](container-swap.md)。

### FIPS 驗證變更
<a name="al2-to-al2023-ami-transition-compatibility-fips"></a>

Amazon Linux 2 已通過 FIPS 140-2 認證，Amazon Linux 2023 已通過 FIPS 140-3 認證。

若要在 Amazon Linux 2023 上啟用 FIPS 模式，需在 Amazon EC2 執行個體上安裝必要套件，並遵循 *Amazon Linux 2023 User Guide* 中 [Enable FIPS Mode on Amazon Linux 2023](https://docs.aws.amazon.com/linux/al2023/ug/fips-mode.html) 的說明執行設定步驟。

### 加速執行個體支援
<a name="al2-to-al2023-ami-transition-compatibility-accelerated"></a>

Amazon ECS 最佳化 Amazon Linux 2023 AMI 同時支援 Neuron 與 GPU 兩種加速執行個體類型。如需詳細資訊，請參閱[Amazon ECS 最佳化 Linux AMI](ecs-optimized_AMI.md)。

## 建置自訂 AMI
<a name="al2-to-al2023-ami-transition-custom-ami"></a>

雖然建議遷移至官方支援與發布的 Amazon Linux 2023 Amazon ECS 最佳化 AMI，但也可透過用於建置 Amazon ECS 最佳化 AMI Linux 變體的開放原始碼建置指令碼，繼續建置自訂的 Amazon Linux 2 Amazon ECS 最佳化 AMI。如需詳細資訊，請參閱[Amazon ECS 最佳化 Linux AMI 建置指令碼](ecs-ami-build-scripts.md)。

## 遷移策略
<a name="al2-to-al2023-ami-transition-migration"></a>

建議建立並實作包含完整應用程式測試的遷移計畫。以下各節根據您管理 Amazon ECS 基礎結構的方式概述不同的遷移策略。

### 透過 Amazon ECS 容量提供者進行遷移
<a name="al2-to-al2023-ami-transition-migration-capacity-providers"></a>

1. 建立使用新啟動範本的新容量提供者。這個容量提供者應參考一個 Auto Scaling 群組，其啟動範本與您現有的類似，但需指定其中一種 Amazon Linux 2023 變體，而非 Amazon Linux 2 Amazon ECS 最佳化 AMI。將此新容量提供者新增至現有的 Amazon ECS 叢集。

1. 更新叢集的預設容量提供者策略，使其同時包含現有的 Amazon Linux 2 容量提供者與新的 Amazon Linux 2023 容量提供者。初始權重設定應以 Amazon Linux 2 提供者為主 (例如權重 80)，Amazon Linux 2023 提供者為輔 (例如權重 20)。這會使 Amazon ECS 在排程新任務時，開始佈建 Amazon Linux 2023 執行個體。確認這些執行個體能正確註冊，且任務能在新的執行個體上順利執行。

1. 隨著時間推移逐漸調整叢集預設策略中的容量提供者權重，增加 Amazon Linux 2023 提供者的權重，同時減少 Amazon Linux 2 提供者權重 (例如從 60/40 調整為 40/60，然後是 20/80)。您也可以更新個別服務容量提供者策略，排定 Amazon Linux 2023 執行個體的優先順序。監控任務置放，確保任務在 Amazon Linux 2023 執行個體上順利執行。

1. 選擇性地排空 Amazon Linux 2 容器執行個體，加速實現任務遷移。如果您有足夠的 Amazon Linux 2023 替換容量，您可以透過 Amazon ECS 主控台手動耗盡 Amazon Linux 2 容器執行個體 AWS CLI ，或加速將任務從 Amazon Linux 2 轉移至 Amazon Linux 2023。遷移完成後，從叢集中移除 Amazon Linux 2 容量提供者，同時刪除相關聯的 Auto Scaling 群組。

### 透過 Amazon EC2 Auto Scaling 群組進行遷移
<a name="al2-to-al2023-ami-transition-migration-asg"></a>

1. 建立使用新啟動範本的新 Amazon EC2 Auto Scaling 群組。這應該與您現有的啟動範本類似，但需指定其中一種 Amazon Linux 2023 變體，而非 Amazon Linux 2 Amazon ECS 最佳化 AMI。這個新建的 Auto Scaling 群組可將執行個體啟動至現有的叢集。

1. 向上擴展 Auto Scaling 群組，使 Amazon Linux 2023 執行個體開始向叢集進行註冊。確認這些執行個體能正確註冊，且任務能在新的執行個體上順利執行。

1. 確認任務在 Amazon Linux 2023 上運作後，請向上擴展 Amazon Linux 2023 Auto Scaling 群組，同時逐步縮減 Amazon Linux 2 Auto Scaling 群組規模，直至完全替換所有 Amazon Linux 2 執行個體為止。

1. 如果有足夠的 Amazon Linux 2023 替代容量，建議您明確排空容器執行個體，加速將任務從 Amazon Linux 2 轉換至 Amazon Linux 2023。如需詳細資訊，請參閱[排空 Amazon ECS 容器執行個體](container-instance-draining.md)。

### 透過手動受管執行個體進行遷移
<a name="al2-to-al2023-ami-transition-migration-manual"></a>

1. 透過 Amazon ECS 最佳化 Amazon Linux 2023 AMI 而非 Amazon Linux 2 手動啟動 (或調整啟動的指令碼) 新的 Amazon EC2 執行個體。確保這些執行個體採用與現有 Amazon Linux 2 執行個體相同的安全群組、子網路、IAM 角色與叢集組態。執行個體應在啟動時自動註冊至現有的 Amazon ECS 叢集。

1. 確認新的 Amazon Linux 2023 執行個體已成功註冊至 Amazon ECS 叢集且處於 `ACTIVE` 狀態。透過等待自然任務置放或手動停止/啟動部分任務來觸發重新排程，測試任務是否可以排程並在這些新執行個體上正常執行。

1. 透過隨需啟動額外的 Amazon Linux 2023 執行個體，逐步取代 Amazon Linux 2 執行個體，接著手動逐台排空並終止 Amazon Linux 2 執行個體。您可以透過 Amazon ECS 主控台將執行個體設定為 `DRAINING` 狀態來排空執行個體，這會停止在其中置放新任務，並允許現有任務完成或在別處重新排程。

# Amazon ECS 最佳化 Linux AMI 建置指令碼
<a name="ecs-ami-build-scripts"></a>

Amazon ECS 已採用開放原始碼的形式提供建置指令碼，可用於建置 Amazon ECS 最佳化 AMI 的 Linux 變體。這些建置指令碼現可於 GitHub 取得。如需詳細資訊，請參閱 GitHub 上的 [amazon-ecs-ami](https://github.com/aws/amazon-ecs-ami)。

如需自訂 Amazon ECS 最佳化 AMI，請參閱 GitHub 上的 [Amazon ECS Optimized AMI Build Recipies](https://github.com/aws/amazon-ecs-ami)。

此建置指令碼儲存庫包含 [HashiCorp Packer](https://developer.hashicorp.com/packer/docs) 範本及用於產生 Amazon ECS 最佳化 AMI 每個 Linux 變數的建置指令碼。這些指令碼是 Amazon ECS 最佳化 AMI 建置的真實來源，因此您可遵循 GitHub 儲存庫來監控我們 AMI 的變更。例如，您可能希望自己的 AMI 使用的 Docker 版本，與 Amazon ECS 團隊用於官方 AMI 的版本相同。

如需詳細資訊，請參閱 GitHub 上的 Amazon ECS AMI 儲存庫，網址為 [aws/amazon-ecs-ami](https://github.com/aws/amazon-ecs-ami)。

**建置 Amazon ECS 最佳化 Linux AMI**

1. 複製 `aws/amazon-ecs-ami` GitHub 儲存庫。

   ```
   git clone https://github.com/aws/amazon-ecs-ami.git
   ```

1. 為建立 AMI 時要使用 AWS 的區域新增環境變數。將 `us-west-2` 值替換為要使用的區域。

   ```
   export REGION=us-west-2
   ```

1. 提供 Makefile 以用於建置 AMI。在已複製儲存庫的根目錄中，使用以下其中一項與您要建置的 Amazon ECS 最佳化 AMI 的 Linux 變數相對應的命令。
   + Amazon ECS 最佳化 Amazon Linux 2 AMI

     ```
     make al2
     ```
   + Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI

     ```
     make al2arm
     ```
   + Amazon ECS GPU 最佳化 AMI

     ```
     make al2gpu
     ```
   + Amazon ECS 最佳化 Amazon Linux 2 (Neuron) AMI

     ```
     make al2inf
     ```
   + Amazon ECS 最佳化 Amazon Linux 2023 AMI

     ```
     make al2023
     ```
   + Amazon ECS 最佳化 Amazon Linux 2023 (arm64) AMI

     ```
     make al2023arm
     ```
   + Amazon ECS 最佳化 Amazon Linux 2023 GPU AMI

     ```
     make al2023gpu
     ```
   + Amazon ECS 最佳化 Amazon Linux 2023 (Neuron) AMI

     ```
     make al2023neu
     ```

# Amazon ECS 最佳化 Bottlerocket AMI
<a name="ecs-bottlerocket"></a>

Bottlerocket 是以 Linux為基礎的開放原始碼作業系統，專為在虛擬機器或裸機主機上執行容器 AWS 而建置。Amazon ECS 最佳化 Bottlerocket AMI 非常安全，只包括執行容器所需的最少數量套件。這可改善資源使用率、減少安全性受攻擊面，並有助於降低管理負荷。Bottlerocket AMI 也與 Amazon ECS 整合，有助於減少更新叢集中容器執行個體所涉及的營運開銷。

Bottlerocket 在以下方面不同於 Amazon Linux：
+ Bottlerocket 不包括套件管理工具，其軟體僅可作為容器執行。Bottlerocket 的更新一律套用，而且可以在單一步驟中復原，以減少發生更新錯誤的可能性。
+ 管理 Bottlerocket 主機的主要機制是使用容器排程器。與 Amazon Linux 不同的是，登入個別 Bottlerocket 執行個體的用意只是為了進階偵錯和故障排除目的，而非經常執行的操作。

如需有關 Bottlerocket 的詳細資訊，請參閱 GitHub 上的[文件](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md)和[版本](https://github.com/bottlerocket-os/bottlerocket/releases)。

有多種 Amazon ECS 最佳化 Bottlerocket AMI 核心 6.1 與核心 5.10 變體。

下列變體使用核心 6.1：
+ `aws-ecs-2`
+ `aws-ecs-2-nvidia`

下列變體使用核心 5.10：
+ `aws-ecs-1`
+ `aws-ecs-1-nvidia`

  如需有關 `aws-ecs-1-nvidia` 變體的詳細資訊，請參閱[宣布 NVIDIA GPU 支援 Amazon ECS 上的 Bottlerocket](https://aws.amazon.com/blogs/containers/announcing-nvidia-gpu-support-for-bottlerocket-on-amazon-ecs/)。

## 考量事項
<a name="ecs-bottlerocket-considerations"></a>

搭配使用 Bottlerocket AMI 與 Amazon ECS 時，應考慮以下事項。
+ Bottlerocket 支援具有 `x86_64` 與 `arm64` 處理器的 Amazon EC2 執行個體。Bottlerocket AMI 不建議與採用 Inferentia 晶片的 Amazon EC2 執行個體搭配使用。
+ Bottlerocket 映像不包含 SSH 伺服器或 Shell。不過，您可以使用頻外管理工具取得 SSH 管理員存取權並執行啟動引導。

   如需詳細資訊，請參閱 GitHub 上 [bottlerocket README.md](https://github.com/bottlerocket-os/bottlerocket) 中的這些章節：
  + [探勘](https://github.com/bottlerocket-os/bottlerocket#exploration)
  + [管理員容器](https://github.com/bottlerocket-os/bottlerocket#admin-container)
+ 在預設情況下，Bottlerocket 具有已啟用的[控制容器](https://github.com/bottlerocket-os/bottlerocket-control-container)。此容器會執行 [AWS Systems Manager 代理程式](https://github.com/aws/amazon-ssm-agent)，可以讓您在 Amazon EC2 Bottlerocket 執行個體上執行命令或啟動 Shell 工作階段。如需詳細資訊，請參閱《AWS Systems Manager 使用者指南》中的[設定工作階段管理員](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html)。
+ Bottlerocket 已針對容器工作負載進行了最佳化，並著重於安全性。Bottlerocket 不包括套件管理工具，且不可變。

  如需有關安全性功能和指引的詳細資訊，請參閱 GitHub 上的[安全性功能](https://github.com/bottlerocket-os/bottlerocket/blob/develop/SECURITY_FEATURES.md)和[安全性指引](https://github.com/bottlerocket-os/bottlerocket/blob/develop/SECURITY_GUIDANCE.md)。
+ Bottlerocket AMI 版本 `1.1.0` 或更新版本支援 `awsvpc` 網路模式。
+ Bottlerocket AMI 版本 `1.15.0` 或更新版本支援任務定義中的 App Mesh。
+ Bottlerocket AMI 版本 `1.19.0` 或更新版本支援 `initProcessEnabled` 任務定義參數。
+ Bottlerocket AMI 也不支援下列服務和功能：
  + ECS Anywhere
  + Service Connect
  + Amazon EFS 處於加密模式
  + `awsvpc` 網路模式中的 Amazon EFS
  + 無法掛載 Amazon EBS 磁碟區
  + Elastic Inference 加速器

# 擷取 Amazon ECS 最佳化 Bottlerocket AMI 中繼資料
<a name="ecs-bottlerocket-retrieve-ami"></a>

您可以查詢 AWS Systems Manager 參數存放區 API，擷取 Amazon ECS 最佳化 AMIs) ID。若使用此參數，您無需手動查詢 Amazon ECS 最佳化 AMI ID。如需 Systems Manager 參數存放區 API 的詳細資訊，請參閱 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html)。您使用的使用者必須擁有 `ssm:GetParameter` IAM 許可，才能擷取 Amazon ECS 最佳化 AMI 中繼資料。

## `aws-ecs-2` Bottlerocket AMI 變體
<a name="ecs-bottlerocket-aws-ecs-2-variant"></a>

您可以透過 AWS 區域 和使用 AWS CLI 或 的架構，擷取最新的穩定 `aws-ecs-2` Bottlerocket AMI 變體 AWS 管理主控台。
+ **AWS CLI** – 您可以使用子參數 ，使用以下 AWS CLI 命令擷取最新建議的 Amazon ECS 最佳化 Bottlerocket AMI 影像 ID`image_id`。將 `region` 替換為您需要 AMI ID 的區域代碼。

  如需支援 AWS 區域的相關資訊，請參閱 GitHub 上的[尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。若要擷取最新版本以外的版本，請以版本號碼取代 `latest`。
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    aws ssm get-parameter --region us-east-2 --name "/aws/service/bottlerocket/aws-ecs-2/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    aws ssm get-parameter --region us-east-2 --name "/aws/service/bottlerocket/aws-ecs-2/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理主控台**：您可以使用 AWS 管理主控台中的 URL 查詢建議的 Amazon ECS 最佳化 AMI ID。此 URL 會以參數的 ID 值開啟 Amazon EC2 Systems Manager 主控台。在下列 URL 中，將 `region` 替換為您需要 AMI ID 的區域代碼。

   如需 支援的資訊 AWS 區域，請參閱[在 GitHub 上尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。 GitHub
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2/x86_64/latest/image_id/description?region=region#
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2/arm64/latest/image_id/description?region=region#
    ```

## `aws-ecs-2-nvidia` Bottlerocket AMI 變體
<a name="ecs-bottlerocket-aws-ecs-1-nvidia-variants"></a>

您可以使用 AWS CLI 或 ，依區域和架構擷取最新的穩定 `aws-ecs-2-nvdia` Bottlerocket AMI 變體 AWS 管理主控台。
+ **AWS CLI** – 您可以使用子參數 ，使用以下 AWS CLI 命令擷取最新建議的 Amazon ECS 最佳化 Bottlerocket AMI 的影像 ID`image_id`。將 `region` 替換為您需要 AMI ID 的區域代碼。

   如需支援 AWS 區域的相關資訊，請參閱 GitHub 上的[尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。若要擷取最新版本以外的版本，請以版本號碼取代 `latest`。
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-2-nvidia/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-2-nvidia/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理主控台**：您可以使用 AWS 管理主控台中的 URL 查詢建議的 Amazon ECS 最佳化 AMI ID。此 URL 會以參數的 ID 值開啟 Amazon EC2 Systems Manager 主控台。在下列 URL 中，將 `region` 替換為您需要 AMI ID 的區域代碼。

  如需 支援的資訊 AWS 區域，請參閱[在 GitHub 上尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。 GitHub
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    https://regionconsole.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2-nvidia/x86_64/latest/image_id/description?region=region#
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    https://regionconsole.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-2-nvidia/arm64/latest/image_id/description?region=region#
    ```

## `aws-ecs-1` Bottlerocket AMI 變體
<a name="ecs-bottlerocket-aws-ecs-1-variant"></a>

您可以使用 AWS CLI 或 擷取最新的穩定 `aws-ecs-1` Bottlerocket AMI 變體 AWS 區域 和架構 AWS 管理主控台。
+ **AWS CLI** – 您可以使用子參數 ，使用以下 AWS CLI 命令擷取最新建議的 Amazon ECS 最佳化 Bottlerocket AMI 影像 ID`image_id`。將 `region` 替換為您需要 AMI ID 的區域代碼。

  如需支援 AWS 區域的相關資訊，請參閱 GitHub 上的[尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。若要擷取最新版本以外的版本，請以版本號碼取代 `latest`。
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理主控台**：您可以使用 AWS 管理主控台中的 URL 查詢建議的 Amazon ECS 最佳化 AMI ID。此 URL 會以參數的 ID 值開啟 Amazon EC2 Systems Manager 主控台。在下列 URL 中，將 `region` 替換為您需要 AMI ID 的區域代碼。

  如需 支援的資訊 AWS 區域，請參閱[在 GitHub 上尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。 GitHub
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    https://region.console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1/x86_64/latest/image_id/description
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    https://region.console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1/arm64/latest/image_id/description
    ```

## `aws-ecs-1-nvidia` Bottlerocket AMI 變體
<a name="ecs-bottlerocket-aws-ecs-1-nvidia-variants"></a>

您可以使用 AWS CLI 或 ，依區域和架構擷取最新的穩定 `aws-ecs-1-nvdia` Bottlerocket AMI 變體 AWS 管理主控台。
+ **AWS CLI** – 您可以使用子參數 ，使用以下 AWS CLI 命令擷取最新建議的 Amazon ECS 最佳化 Bottlerocket AMI 的影像 ID`image_id`。將 `region` 替換為您需要 AMI ID 的區域代碼。

  如需 支援的資訊 AWS 區域，請參閱[在 GitHub 上尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。 GitHub
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1-nvidia/x86_64/latest/image_id" --query Parameter.Value --output text
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    aws ssm get-parameter --region us-east-1 --name "/aws/service/bottlerocket/aws-ecs-1-nvidia/arm64/latest/image_id" --query Parameter.Value --output text
    ```
+ **AWS 管理主控台**：您可以使用 AWS 管理主控台中的 URL 查詢建議的 Amazon ECS 最佳化 AMI ID。此 URL 會以參數的 ID 值開啟 Amazon EC2 Systems Manager 主控台。在下列 URL 中，將 `region` 替換為您需要 AMI ID 的區域代碼。

  如需支援 的資訊 AWS 區域，請參閱[在 GitHub 上尋找 AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md#finding-an-ami)。 GitHub
  + 對於 64 位元 (`x86_64`) 架構：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1-nvidia/x86_64/latest/image_id/description?region=region#
    ```
  + 對於 64 位元 Arm (`arm64`) 架構：

    ```
    https://console.aws.amazon.com/systems-manager/parameters/aws/service/bottlerocket/aws-ecs-1-nvidia/arm64/latest/image_id/description?region=region#
    ```

## 後續步驟
<a name="bottlerocket-next-steps"></a>

如需如何在 Amazon ECS 上開始使用 Bottlerocket 作業系統的詳細教學課程，請參閱 GitHub 上的 [Using a Bottlerocket AMI with Amazon ECS](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md)，以及 AWS 部落格網站上的 [ Getting started with Bottlerocket and Amazon ECS](https://aws.amazon.com/blogs/containers/getting-started-with-bottlerocket-and-amazon-ecs/)。

如需有關 Bottlerocket 執行個體啟動方式的資訊，請參閱[啟動 Amazon ECS 的 Bottlerocket 執行個體](bottlerocket-launch.md)

# 啟動 Amazon ECS 的 Bottlerocket 執行個體
<a name="bottlerocket-launch"></a>

您可以啟動 Bottlerocket 執行個體，以便執行容器工作負載。

您可以使用 AWS CLI 來啟動Bottlerocket執行個體。

1. 建立稱為 `userdata.toml` 的檔案。此檔案會用於執行個體使用者資料。以您的叢集名稱取代 *cluster-name*。

   ```
   [settings.ecs]
   cluster = "cluster-name"
   ```

1. 使用 [擷取 Amazon ECS 最佳化 Bottlerocket AMI 中繼資料](ecs-bottlerocket-retrieve-ami.md) 中包含的其中一個命令來取得 Bottlerocket AMI ID。您會在以下步驟中使用此 ID。

1. 執行下列命令以啟動 Bottlerocket 執行個體。請記得替換以下參數：
   + 將*子網路*替換為執行個體將在其中啟動的私有或公有子網路的 ID。
   + 將 *bottlerocket\$1ami* 替換為上一個步驟中取得的 AMI ID。
   + 將 *t3.large* 替換為您要使用的執行個體類型。
   + 將 *region* 替換為區域代碼。

   ```
   aws ec2 run-instances --key-name ecs-bottlerocket-example \
      --subnet-id subnet \
      --image-id bottlerocket_ami \
      --instance-type t3.large \
      --region region \
      --tag-specifications 'ResourceType=instance,Tags=[{Key=bottlerocket,Value=example}]' \
      --user-data file://userdata.toml \
      --iam-instance-profile Name=ecsInstanceRole
   ```

1. 執行下列命令來驗證容器執行個體是否已註冊至叢集。當您執行此命令時，請記得替代下列參數：
   + 將 *cluster* 替代為叢集名稱。
   + 將 *region* 替換為您的區域代碼。

   ```
   aws ecs list-container-instances --cluster cluster-name --region region
   ```

如需如何在 Amazon ECS 上開始使用Bottlerocket作業系統的詳細演練，請參閱 GitHub 上的[搭配使用 Bottlerocket AMI 與 Amazon ECS](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-ECS.md)，以及 AWS 部落格網站上的開始使用 [Bottlerocket和 Amazon ECS](https://aws.amazon.com/blogs/containers/getting-started-with-bottlerocket-and-amazon-ecs/)。

# Amazon ECS Linux 容器執行個體管理
<a name="manage-linux"></a>

在將 EC2 執行個體用於 Amazon ECS 工作負載時，您必須負責維護執行個體

**Topics**
+ [啟動容器執行個體](launch_container_instance.md)
+ [引導 Linux 容器執行個體](bootstrap_container_instance.md)
+ [設定容器執行個體接收 Spot 執行個體通知](spot-instance-draining-linux-container.md)
+ [啟動容器執行個體時執行指令碼](start_task_at_launch.md)
+ [增加 Amazon ECS Linux 容器執行個體網路介面數量](container-instance-eni.md)
+ [保留容器執行個體記憶體](memory-management.md)
+ [遠端管理容器執行個體](ec2-run-command.md)
+ [為 Linux 容器執行個體使用 HTTP Proxy](http_proxy_config.md)
+ [為 Auto Scaling 群組設定預先初始化的執行個體](using-warm-pool.md)
+ [更新 Amazon ECS 容器代理程式](ecs-agent-update.md)

每個 Amazon ECS 容器代理程式版本都支援不同的功能集，並提供先前版本的錯誤修復。可能的話，我們建議您一律使用最新版本的 Amazon ECS 容器代理程式。若要將您的容器代理更新到最新版本，請參閱「[更新 Amazon ECS 容器代理程式](ecs-agent-update.md)」。

若要查看每個代理版本中包含哪些功能和強化功能，請參閱 [https://github.com/aws/amazon-ecs-agent/releases](https://github.com/aws/amazon-ecs-agent/releases)。

**重要**  
可靠指標的最低 Docker 版本是 Docker 版本 `v20.10.13` 及更新版本，該版本隨附於 Amazon ECS 最佳化 AMI `20220607` 及更新版本中。  
Amazon ECS 代理程式版本 `1.20.0` 和更新版本已不支援 `18.01.0` 之前的 Docker 版本。

# 啟動 Amazon ECS Linux 容器執行個體
<a name="launch_container_instance"></a>

您可以使用 Amazon EC2 主控台建立 Amazon ECS 容器執行個體。

您可以透過各種方法啟動執行個體 AWS CLI，包括 Amazon EC2 主控台和 SDK。如需有關啟動執行個體其他方法的資訊，請參閱 *Amazon EC2 User Guide* 中的 [Launch your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)。

如需有關啟動精靈的詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Launch an instance using the new launch instance wizard](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)。

開始之前，請完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟。

您可以使用新的 Amazon EC2 精靈啟動執行個體。啟動執行個體精靈會指定啟動執行個體所需的所有啟動參數。

**Topics**
+ [程序](#linux-liw-initiate-instance-launch)
+ [名稱和標籤](#linux-liw-name-and-tags)
+ [應用程式和作業系統映像 (Amazon Machine Image)](#linux-liw-ami)
+ [執行個體類型](#linux-liw-instance-type)
+ [金鑰對 （登入）](#linux-liw-key-pair)
+ [網路設定](#linux-liw-network-settings)
+ [設定儲存](#linux-liw-storage)
+ [進階詳細資訊](#linux-liw-advanced-details)

## 程序
<a name="linux-liw-initiate-instance-launch"></a>

開始之前，請完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟。

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在畫面頂端的導覽列中，會顯示目前的 AWS 區域 （例如美國東部 （俄亥俄）)。選取要在其中啟動執行個體的區域。

1. 從 Amazon EC2 主控台儀表板選擇 **Launch Instance (啟動執行個體)**。

## 名稱和標籤
<a name="linux-liw-name-and-tags"></a>

執行個體名稱是一個標籤，其中鍵是 **Name** (名稱)，而值是您指定的名稱。您可以標記執行個體、磁碟區和彈性圖形。對於 Spot 執行個體，您只能標記 Spot 執行個體請求。

指定執行個體名稱和其他標籤是選用的。
+ 對於 **Name** (名稱)，輸入執行個體的描述性名稱。如果您未指定名稱，則可以透過其 ID 來標識執行個體，該 ID 將在您啟動執行個體時自動產生。
+ 若要新增其他標籤，請選擇 **Add additional tags** (新增其他標籤)。選取 **Add tag** (新增標籤)，然後輸入鍵和值，然後選取要標記的資源類型。為每個要新增的其他標籤重新選擇 **Add tag** (新增標籤)。

## 應用程式和作業系統映像 (Amazon Machine Image)
<a name="linux-liw-ami"></a>

Amazon Machine Image (AMI) 包含建立執行個體所需的資訊。例如，AMI 可能包含作為 Web 伺服器所必需的軟體，例如 Apache 和您的網站。

使用**搜尋**列尋找由 發佈的適當 Amazon ECS 最佳化 AMI AWS。

1. 在 **Search** (搜尋) 列中輸入以下其中一個詞語。
   + **ami-ecs**
   + Amazon ECS 最佳化 AMI 的 **Value** (值)。

     如需最新的 Amazon ECS 最佳化 AMI 及其值，請參閱《[Linux Amazon ECS 最佳化 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#ecs-optimized-ami-linux)》。

1. 按 **Enter**。

1. 在 **Choose an Amazon Machine Image (AMI)** (選擇 Amazon Machine Image (AMI)) 頁面上，選取 **AWS Marketplace AMIs** 索引標籤。

1. 在左側的 **Refine results** (細化結果) 窗格中，選取 **Amazon Web Services** 作為 **Publisher** (發佈者)。

1. 在您要使用的 AMI 的列上選擇 **Select** (選取)。

   或者，選擇右上方的 **Cancel** (取消)，以返回啟動執行個體精靈，而不選擇 AMI。將會選取預設 AMI。確保 AMI 符合 [Amazon ECS 最佳化 Linux AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html) 中概述的要求。

## 執行個體類型
<a name="linux-liw-instance-type"></a>

執行個體類型定義執行個體的硬體組態和大小。較大的執行個體類型具有較多的 CPU 和記憶體。如需詳細資訊，請參閱《Amazon EC2 使用者指南》中的[執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。如果您想要執行純 IPv6 工作負載，某些執行個體類型不支援 IPv6 位址。如需詳細資訊，請參閱《Amazon EC2 使用者指南》**中的 [IPv6 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#ipv6-addressing)。
+ 針對 **Instance type** (執行個體類型)，選取執行個體的執行個體類型。

   您選取的執行個體類型，會決定您任務執行所在的可用資源。

## 金鑰對 （登入）
<a name="linux-liw-key-pair"></a>

針對 **Key pair name** (金鑰對名稱)，選擇現有的金鑰對，或選擇 **Create new key pair** (建立新的金鑰對) 以建立新的金鑰對。

**重要**  
如果您選擇 **Proceed without key pair (Not recommended)** (繼續而不使用金鑰對 (不建議)) 選項，您將無法連線到執行個體，除非您選擇已設定為允許使用者透過其他方式登入的 AMI。

## 網路設定
<a name="linux-liw-network-settings"></a>

選擇表單的**網路設定**區段的**編輯**按鈕後，視需要設定網路設定。
+ 在 **VPC** 欄位中，選擇執行個體啟動所在的 VPC。若要執行純 IPv6 工作負載，請選擇同時包含 IPv4 與 IPv6 CIDR 區塊的雙堆疊 VPC。
+ 在**子網路**欄位中，請選擇要在其中啟動執行個體的子網路。您可以在與可用區域、Local Zone、Wavelength Zone 或 Outpost 相關聯的子網路中啟動執行個體。

  若要在可用區域中啟動執行個體，請選取要在當中啟動執行個體的子網路。若要建立新的子網路，請選擇**建立新的子網路**，前往 Amazon VPC 主控台。完成後，請返回啟動執行個體精靈並選擇「重新整理」圖示，載入清單中的子網路。

  在 Local Zone 中啟動執行個體，選取您在 Local Zone 中建立的子網路。

  若要在 Outpost 中啟動執行個體，請在與 Outpost 相關聯的 VPC 中選取子網路。

  若要執行純 IPv6 工作負載，請選擇僅包含 IPv6 CIDR 區塊的子網路。
+ **Auto-assign Public IP** (自動指派公有 IP)：如果您的執行個體應從網際網路存取，請確認 **Auto-assign Public IP** (自動指派公有 IP) 欄位設為 **Enable** (啟用)。如果不是，請將此欄位設為 **Disable** (停用)。
**注意**  
容器執行個體需要存取，才可以與 Amazon ECS 服務端點通訊。可透過介面 VPC 端點或透過具備公有 IP 位址的容器執行個體來實現。  
如需介面 VPC 端點的詳細資訊，請參閱 [Amazon ECS 介面 VPC 端點 (AWS PrivateLink)](vpc-endpoints.md)  
如果您沒有設定介面 VPC 端點，且容器執行個體沒有公有 IP 位址，則它們必須使用網路位址轉譯 (NAT) 來提供此存取。如需詳細資訊，請參閱《Amazon VPC 使用者指南》中的 [NAT 閘道](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)和本指南中的 [為 Amazon ECS Linux 容器執行個體使用 HTTP Proxy](http_proxy_config.md)。
+ 如果選擇雙堆疊 VPC 與純 IPv6 子網路，請在**自動指派 IPv6 IP** 欄位中選取**啟用**。
+ **Firewall (security groups)** (防火牆 (安全群組))：使用安全群組定義容器執行個體的防火牆規則。這些規則指定傳遞至容器執行個體的傳入網路流量。所有其他流量都會遭到忽略。
  + 若要選取現有的安全群組，請選擇 **Select existing security group** (選取現有安全群組)，然後從您在 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 建立的安全群組選取您的安全群組。
+ 如果要為純 IPv6 工作負載啟動執行個體，請選擇**進階網路組態**，然後在**指派主要 IPv6 IP** 欄位中選擇**是**。
**注意**  
如果沒有主要 IPv6 位址，在容器執行個體上以主機或橋接網路模式執行的任務，將無法向負載平衡器或 AWS Cloud Map註冊。

## 設定儲存
<a name="linux-liw-storage"></a>

您選取的 AMI 包含一或多個儲存體磁碟區，包括根磁碟區。您可以指定要連接至執行個體的其他磁碟區。

您可以使用 **Simple** (簡單) 檢視。
+ **Storage type** (儲存類型)：為您的容器執行個體設定儲存。

  如果您使用的是 Amazon ECS 最佳化 Amazon Linux 2 AMI，則您的執行個體已設定單一 30 GiB 磁碟區 (在作業系統和 Docker 之間共用)。

  如果您使用的是 Amazon ECS 最佳化 AMI，則您的執行個體已設定兩個磁碟區。**Root** (根目錄) 磁碟區供作業系統使用，而第二個 Amazon EBS 磁碟區 (連接到 `/dev/xvdcz`) 則供 Docker 使用。

  您可以選擇性地增加或減少您執行個體的磁碟區大小，使其符合您的應用程式需求。

## 進階詳細資訊
<a name="linux-liw-advanced-details"></a>

針對 **Advanced Details (進階詳細資訊)**，展開此區段來檢視欄位，指定執行個體的其他參數。
+ **Purchasing option** (購買選項)：選擇 **Request Spot instances** (請求 Spot 執行個體) 以請求 Spot 執行個體。您也需要設定與 Spot 執行個體相關的其他欄位。如需詳細資訊，請參閱「[Spot 執行個體要求](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html)」。
**注意**  
如果您使用的是 Spot 執行個體，而且看到 `Not available` 訊息，您可能需要選擇不同的執行個體類型。
+ **IAM instance profile** (IAM 執行個體設定檔)：選取您的容器執行個體 IAM 角色。這通常命名為 `ecsInstanceRole`。
**重要**  
如果您未使用適當的 IAM 許可啟動容器執行個體，Amazon ECS 代理程式就無法連線到叢集。如需詳細資訊，請參閱[Amazon ECS 容器執行個體 IAM 角色](instance_IAM_role.md)。
+ **使用者資料**：利用使用者資料設定您的 Amazon ECS 容器執行個體，例如 [Amazon ECS 容器代理程式組態](ecs-agent-config.md) 中的代理程式環境變數。Amazon EC2 使用者資料指令碼僅於執行個體初次啟動時執行一次。以下是使用者資料用途的常見範例：
  + 您的容器執行個體預設會在您的預設叢集中啟動。若要在非預設的叢集中啟動，請選擇 **Advanced Details** (進階詳細資訊) 清單。然後，將以下指令碼貼入 **User data** (使用者資料) 欄位，以您的叢集名稱取代 *your\$1cluster\$1name*。

    ```
    #!/bin/bash
    echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
    ```
  + 如果您在 Amazon S3 中有一個 `ecs.config` 檔案，並已為您的容器執行個體角色啟用 Amazon S3 唯讀存取，請選擇 **Advanced Details** (進階詳細資訊) 清單。然後，將下列指令碼貼到**使用者資料**欄位中，將 *your\$1bucket\$1name* 取代為儲存貯體的名稱，以安裝 AWS CLI 並在啟動時寫入您的組態檔案。
**注意**  
如需此組態的詳細資訊，請參閱「[將 Amazon ECS 容器執行個體組態儲存於 Amazon S3 中](ecs-config-s3.md)」。

    ```
    #!/bin/bash
    yum install -y aws-cli
    aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config
    ```
  + 使用 `ECS_CONTAINER_INSTANCE_TAGS` 組態參數為您的容器執行個體指定標籤。這會建立只與 Amazon ECS 相關聯的標籤，所以無法使用 Amazon EC2 API 列出這些標籤。
**重要**  
如果您使用 Amazon EC2 Auto Scaling 群組啟動容器執行個體，則應使用 ECS\$1CONTAINER\$1INSTANCE\$1TAGS 代理程式組態參數來新增標籤。這是由於標籤新增到了使用 Auto Scaling 群組啟動的 Amazon EC2 執行個體。

    ```
    #!/bin/bash
    cat <<'EOF' >> /etc/ecs/ecs.config
    ECS_CLUSTER=your_cluster_name
    ECS_CONTAINER_INSTANCE_TAGS={"tag_key": "tag_value"}
    EOF
    ```
  + 為您的容器執行個體指定標籤，然後使用 `ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROM` 組態參數將它們從 Amazon EC2 傳播到 Amazon ECS

    以下的使用者資料指令碼範例會傳播與容器執行個體相關聯的標籤，還會向名為 `your_cluster_name` 的叢集註冊容器執行個體：

    ```
    #!/bin/bash
    cat <<'EOF' >> /etc/ecs/ecs.config
    ECS_CLUSTER=your_cluster_name
    ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROM=ec2_instance
    EOF
    ```
  + 依預設，Amazon ECS 容器代理程式會透過偵測執行個體的預設 IPv4 與 IPv6 路由，判斷容器執行個體是否相容純 IPv6 組態。若要覆寫此行為，您可以在執行個體的 `/etc/ecs/ecs.config` 檔案中將 ` ECS_INSTANCE_IP_COMPATIBILITY` 參數設定為 `ipv4` 或 `ipv6`。

    ```
    #!/bin/bash
    cat <<'EOF' >> /etc/ecs/ecs.config
    ECS_CLUSTER=your_cluster_name
    ECS_INSTANCE_IP_COMPATIBILITY=ipv6
    EOF
    ```

  如需詳細資訊，請參閱[引導 Amazon ECS Linux 容器執行個體傳遞資料](bootstrap_container_instance.md)。

# 引導 Amazon ECS Linux 容器執行個體傳遞資料
<a name="bootstrap_container_instance"></a>

當您啟動 Amazon EC2 執行個體時，可以將使用者資料傳送到 EC2 執行個體。此資料可用來執行常見的自動化組態任務，甚至在執行個體啟動時，執行指令碼。對於 Amazon ECS，使用者資料的最常用案例是將組態資訊傳送到 Docker 常駐程式和 Amazon ECS 容器代理程式。

您可以將多種類型的使用者資料傳遞給 Amazon EC2，包含雲端 boothook、shell 指令碼和 `cloud-init` 指令。如需這些和其他格式類型的詳細資訊，請參閱 [Cloud-Init 文件](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)。

若要在使用 Amazon EC2 啟動精靈時傳遞此使用者資料，請參閱[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。

您可以設定容器執行個體，在容器代理程式組態或 Docker 常駐程式組態中傳遞資料。

## Amazon ECS 容器代理程式
<a name="bootstrap_container_agent"></a>

Amazon ECS 最佳化 AMI 的 Linux 變體會在容器代理程式啟動時，於 `/etc/ecs/ecs.config` 檔案中尋找代理程式組態資料。您可以使用 Amazon EC2 使用者資料在啟動時指定此組態資料。如需可用 Amazon ECS 容器代理程式組態變數的詳細資訊，請參閱 [Amazon ECS 容器代理程式組態](ecs-agent-config.md)。

若只要設定單一代理程式組態變數 (例如叢集名稱)，請使用 **echo** 將變數複製至組態檔案：

```
#!/bin/bash
echo "ECS_CLUSTER=MyCluster" >> /etc/ecs/ecs.config
```

如有多個變數要寫入 `/etc/ecs/ecs.config`，請使用以下 `heredoc` 格式。此格式會將開頭為 **cat** 和 `EOF` 之行間的所有項目寫入組態檔案。

```
#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=MyCluster
ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
ECS_LOGLEVEL=debug
ECS_WARM_POOLS_CHECK=true
EOF
```

若要設定自訂執行個體屬性，請設定 `ECS_INSTANCE_ATTRIBUTES` 環境變數。

```
#!/bin/bash
cat <<'EOF' >> ecs.config
ECS_INSTANCE_ATTRIBUTES={"envtype":"prod"}
EOF
```

## Docker 常駐程式
<a name="bootstrap_docker_daemon"></a>

您可以使用 Amazon EC2 使用者資料指定 Docker 常駐程式組態資訊。如需組態選項的詳細資訊，請參閱 [Docker 常駐程式文件](https://docs.docker.com/reference/cli/dockerd/)。

**注意**  
AWS 不支援自訂 Docker 組態，因為它們有時可能會與未來的 Amazon ECS 變更或功能衝突，而不會出現警告。

在下例中，自訂選項會新增到 Docker 常駐程式組態檔案，`/etc/docker/daemon.json`，然後在執行個體啟動時在使用者資料中指定它。

```
#!/bin/bash
cat <<EOF >/etc/docker/daemon.json
{"debug": true}
EOF
systemctl restart docker --no-block
```

在下例中，自訂選項會新增到 Docker 常駐程式組態檔案，`/etc/docker/daemon.json`，然後在執行個體啟動時在使用者資料中指定它。此範例顯示如何停用 Docker 常駐程式組態檔案中的 Docker 代理。

```
#!/bin/bash
cat <<EOF >/etc/docker/daemon.json
{"userland-proxy": false}
EOF
systemctl restart docker --no-block
```

# 設定 Amazon ECS Linux 容器執行個體接收 Spot 執行個體通知
<a name="spot-instance-draining-linux-container"></a>

當 Spot 價格超過請求的最高價或容量不再可用時，Amazon EC2 會終止、停止或休眠您的 Spot 執行個體。Amazon EC2 會針對終止和停止動作提前兩分鐘發出 Spot 執行個體中斷通知。其不會針對休眠動作提前兩分鐘發出通知。如果在執行個體上啟用 Amazon ECS Spot 執行個體排空，則 Amazon ECS 會收到 Spot 執行個體中斷通知，並將執行個體置於 `DRAINING` 狀態。

**重要**  
當透過 Auto Scaling 容量重新平衡移除執行個體時，Amazon ECS 不會收到 Amazon EC2 發出的通知。如需詳細資訊，請參閱 [Amazon EC2 Auto Scaling 容量重新平衡](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)。

將容器執行個體設定為 `DRAINING` 時，Amazon ECS 會避免在容器執行個體中放置新的任務排程。`PENDING` 狀態下即將耗盡的容器執行個體服務任務會立即停止。如果叢集有可用的容器執行個體，則會在這些容器執行個體上啟動替代服務任務。

Spot 執行個體排空預設為停用。

您可以在啟動執行個體時啟用 Spot 執行個體排空。將下列指令碼新增至**使用者資料**欄位。將 *MyCluster* 取代為叢集名稱，以完成容器執行個體註冊。

```
#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=MyCluster
ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
EOF
```

如需詳細資訊，請參閱[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。

**針對現有的容器執行個體開啟 Spot 執行個體耗盡**

1. 透過 SSH 連接到 Spot 執行個體。

1. 編輯 `/etc/ecs/ecs.config` 檔案並新增以下內容：

   ```
   ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
   ```

1. 重新啟動 `ecs` 服務。
   + 對於 Amazon ECS 最佳化 Amazon Linux 2 AMI：

     ```
     sudo systemctl restart ecs
     ```

1. (選用) 您可以驗證代理已在執行中，並透過查詢代理自我檢查 API 操作，查看您新的容器執行個體的一些資訊。如需詳細資訊，請參閱[Amazon ECS 容器自我檢查](ecs-agent-introspection.md)。

   ```
   curl http://localhost:51678/v1/metadata
   ```

# 啟動 Amazon ECS Linux 容器執行個體時執行指令碼
<a name="start_task_at_launch"></a>

您可能需要在每個容器執行個體上執行特定的容器，以處理營運或安全性相關事項，例如監控、安全性、指標、服務探索或記錄。

若要執行此作業，您可以將您的容器執行個體設定為在啟動時或在某些 init 系統中 (例如 Upstart 或 **systemd**)，以使用者資料指令碼呼叫 **docker run** 命令。雖然此方法可行，但有一些缺點，因為 Amazon ECS 對容器一無所知，也無法監控 CPU、記憶體、連接埠或任何其他使用的資源。為確保 Amazon ECS 可正確說明所有任務資源，請為在您容器執行個體上執行的容器建立任務定義。然後，使用 Amazon ECS，利用 Amazon EC2 使用者資料在啟動時放置任務。

下列程序中的 Amazon EC2 使用者資料指令碼會使用 Amazon ECS 自我檢查 API 來識別容器執行個體。然後，它會使用 AWS CLI 和 **start-task**命令在啟動期間自行執行指定的任務。

**在容器執行個體啟動階段啟動任務**

1. 修改您的 `ecsInstanceRole` IAM 角色，新增 `StartTask` API 操作的許可。如需詳細資訊，請參閱 *AWS Identity and Access Management User Guide* 中的 [Update permissions for a role](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_update-role-permissions.html)。

1. 使用 Amazon ECS 最佳化 Amazon Linux 2 AMI 啟動一或多個容器執行個體。啟動新的容器執行個體，並在 EC2 使用者資料中使用如下範例指令碼。將 *your\$1cluster\$1name* 取代為容器執行個體要註冊的目標叢集，並將 *my\$1task\$1def* 取代為要在啟動時於執行個體上執行的任務定義。

   如需詳細資訊，請參閱[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。
**注意**  
以下的 MIME 多分段內容使用 shell 指令碼來設定組態值並安裝套件。在 **ecs** 服務已執行，並可使用自我檢查 API 之後，還會使用 systemd 工作啟動任務。

   ```
   Content-Type: multipart/mixed; boundary="==BOUNDARY=="
   MIME-Version: 1.0
   
   --==BOUNDARY==
   Content-Type: text/x-shellscript; charset="us-ascii"
   
   #!/bin/bash
   # Specify the cluster that the container instance should register into
   cluster=your_cluster_name
   
   # Write the cluster configuration variable to the ecs.config file
   # (add any other configuration variables here also)
   echo ECS_CLUSTER=$cluster >> /etc/ecs/ecs.config
   
   START_TASK_SCRIPT_FILE="/etc/ecs/ecs-start-task.sh"
   cat <<- 'EOF' > ${START_TASK_SCRIPT_FILE}
   	exec 2>>/var/log/ecs/ecs-start-task.log
   	set -x
   	
   	# Install prerequisite tools
   	yum install -y jq aws-cli
   	
   	# Wait for the ECS service to be responsive
   	until curl -s http://localhost:51678/v1/metadata
   	do
   		sleep 1
   	done
   
   	# Grab the container instance ARN and AWS Region from instance metadata
   	instance_arn=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F/ '{print $NF}' )
   	cluster=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster' | awk -F/ '{print $NF}' )
   	region=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F: '{print $4}')
   
   	# Specify the task definition to run at launch
   	task_definition=my_task_def
   
   	# Run the AWS CLI start-task command to start your task on this container instance
   	aws ecs start-task --cluster $cluster --task-definition $task_definition --container-instances $instance_arn --started-by $instance_arn --region $region
   EOF
   
   # Write systemd unit file
   UNIT="ecs-start-task.service"
   cat <<- EOF > /etc/systemd/system/${UNIT}
         [Unit]
         Description=ECS Start Task
         Requires=ecs.service
         After=ecs.service
    
         [Service]
         Restart=on-failure
         RestartSec=30
         ExecStart=/usr/bin/bash ${START_TASK_SCRIPT_FILE}
   
         [Install]
         WantedBy=default.target
   EOF
   
   # Enable our ecs.service dependent service with `--no-block` to prevent systemd deadlock
   # See https://github.com/aws/amazon-ecs-agent/issues/1707
   systemctl enable --now --no-block "${UNIT}"
   --==BOUNDARY==--
   ```

1. 確認您的容器執行個體在正確的叢集中啟動，而且您的任務已啟動。

   1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

   1. 從導覽列選擇您叢集所在的區域。

   1. 在導覽窗格中選擇 **Clusters** (叢集)，並選取託管您容器執行個體的叢集。

   1. 在**叢集**頁面上，選擇**任務**，然後選擇您的任務。

      您啟動的每個容器執行個體都應該有任務在正在其中執行。

      如果您沒有看到您的任務，您可以使用 SSH 登入您的容器執行個體，檢查 `/var/log/ecs/ecs-start-task.log` 檔案的偵錯資訊。

# 增加 Amazon ECS Linux 容器執行個體網路介面數量
<a name="container-instance-eni"></a>

**注意**  
此功能不適用於 Fargate。

每個使用 `awsvpc` 網路模式的任務都會收到專用的彈性網路介面 (ENI)，該介面會連接至託管此任務的容器執行個體。Amazon EC2 執行個體可連接的網路介面數量有預設限制，主要網路介面計算在內。例如，根據預設，`c5.large` 執行個體最多可連接三個 ENI。執行個體的主要網路界面計算在內，所以您可以再連接兩個 ENI 到執行個體。因為每個使用 `awsvpc` 網路模式的任務都需要 ENI，所以通常只能對此執行個體類型執行兩個這類任務。

Amazon ECS 支援使用受支援的 Amazon EC2 執行個體類型，以更高的 ENI 密度來啟動容器執行個體。當您使用這些執行個體類型並啟用 `awsvpcTrunking` 帳戶設定時，新啟動的容器執行個體會提供額外的 ENI。此組態可讓您在每個容器執行個體中安排更多任務。若要使用主控台啟用此功能，請參閱[修改 Amazon ECS 帳戶設定](ecs-modifying-longer-id-settings.md)。若要使用 AWS CLI 開啟功能，請參閱 [使用 管理 Amazon ECS 帳戶設定 AWS CLI](account-setting-management-cli.md)。

例如，啟用 `awsvpcTrunking` 的 `c5.large` 執行個體，其 ENI 限制會增加至 12 個。容器執行個體會有主要網路介面，而 Amazon ECS 會建立「幹線」網路介面，並將它連接到容器執行個體。因此，此組態可讓您在容器執行個體中啟動十項任務，而不是目前的兩項任務。

幹線網路介面由 Amazon ECS 全受管，當您在叢集中終止或取消註冊您的容器執行個體時，會將其刪除。如需詳細資訊，請參閱[EC2 的 Amazon ECS 任務聯網選項](task-networking.md)。

## 考量事項
<a name="eni-trunking-considerations"></a>

使用 ENI 主幹功能時，建議考量下列事項。
+ 只有 Amazon ECS 最佳化 AMI 的 Linux 變體，或具有 `1.28.1` 版本或更新版本容器代理程式和版本 `1.28.1-2` 或更新版本 ecs-init 套件的其他 Amazon Linux 變體，才支援更高的 ENI 限制。如果您使用 Amazon ECS 最佳化 AMI 的最新 Linux 變體，將會滿足這些要求。目前不支援 Windows 容器。
+ 只有在啟用 `awsvpcTrunking` 後啟動的新 Amazon EC2 執行個體，才會收到更高的 ENI 限制和幹線網路介面。無論採取何種動作，先前啟動的執行個體都不會收到這些功能。
+ Amazon EC2 執行個體必須關閉資源型 IPv4 DNS 請求。若要停用此選項，在 Amazon EC2 主控台中建立新執行個體時，請清除**啟用資源型 IPV4 (A 記錄) DNS 請求**選項。若要使用 停用此選項 AWS CLI，請使用下列命令。

  ```
  aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run
  ```
+ 不支援共用子網路中的 Amazon EC2 執行個體。就算使用也無法註冊到叢集。
+ 您的任務必須使用 `awsvpc` 網路模式和 EC2。使用 Fargate 的任務，會一律收到專用的 ENI (不論啟動多少)，因此不需要此功能。
+ 您的任務必須與容器執行個體在相同的 Amazon VPC 中啟動。如果您的任務不在同一 VPC 中，則任務會因為屬性錯誤而失敗。
+ 啟動新的容器執行個體時，執行個體將轉換為 `REGISTERING` 狀態，同時為執行個體佈建幹線彈性網路介面。如果註冊失敗，執行個體會轉換到 `REGISTRATION_FAILED` 狀態。透過說明容器執行個體以檢視說明失敗原因的 `statusReason` 欄位，可對失敗註冊進行故障排除。然後可以手動解除註冊或終止容器執行個體。容器執行個體成功取消註冊或終止後，Amazon ECS 將刪除幹線 ENI。
**注意**  
Amazon ECS 會發出容器執行個體狀態變更事件，您可以監控執行個體是否轉換為 `REGISTRATION_FAILED` 狀態。如需詳細資訊，請參閱[Amazon ECS 容器執行個體狀態變更事件](ecs_container_instance_events.md)。
+ 容器執行個體終止後，執行個體將轉換為 `DEREGISTERING` 狀態，同時解除佈建幹線彈性網路介面。然後，執行個體會轉換為 `INACTIVE` 狀態。
+ 如果具有更高 ENI 限制之公有子網路中的容器執行個體停止再重新啟動，執行個體會遺失其公有 IP 位址，且容器代理程式將失去其連線。
+ 啟用 `awsvpcTrunking` 時，容器執行個體會收到使用 VPC 預設安全群組的額外 ENI，並由 Amazon ECS 管理。

  預設 VPC 在每個可用區域附帶一個公有子網路、一個網際網路閘道，以及啟用 DNS 解析的設定。子網路是公有子網路，因為主路由表會將以網際網路為目標的子網路流量傳送至網際網路閘道。您可將路由從目標 0.0.0.0/0 移至網際網路閘道，將預設子網路變成私有子網路。但若如此做，在該子網路中執行的任何容器執行個體都無法存取網際網路。您可以新增或刪除安全群組規則，控制進出子網路的流量。如需詳細資訊，請參閱 *Amazon Virtual Private Cloud User Guide* 中的 [Security group rules](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

## 先決條件
<a name="eni-trunking-launching"></a>

在啟動具有更高 ENI 限制的容器執行個體之前，必須完成下列先決條件。
+ 必須先建立 Amazon ECS 的服務連結角色。Amazon ECS 服務連結角色為 Amazon ECS 提供代表您呼叫其他 AWS 服務的許可。這個角色會在您建立叢集，或在 AWS 管理主控台中建立或更新服務時，自動為您建立。如需詳細資訊，請參閱[使用 Amazon ECS 的服務連結角色](using-service-linked-roles.md)。您也可以使用下列 AWS CLI 命令建立服務連結角色。

  ```
  aws iam [create-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-linked-role.html) --aws-service-name ecs.amazonaws.com
  ```
+ 您的帳戶或容器執行個體 IAM 角色必須啟用 `awsvpcTrunking` 帳戶設定。我們建議您建立 2 個容器執行個體角色 (`ecsInstanceRole`)。然後，您可以為一個角色啟用 `awsvpcTrunking` 帳戶設定，並將該角色用於需要 ENI 主幹功能的任務。如需有關容器執行個體的詳細資訊，請參閱 [Amazon ECS 容器執行個體 IAM 角色](instance_IAM_role.md)。

符合先決條件後，您可以使用其中一種受支援的 Amazon EC2 執行個體類型來啟動新容器執行個體，且執行個體將具有更高的 ENI 限制。如需支援的執行個體類型清單，請參閱 [援更多 Amazon ECS 容器網路介面的執行個體](eni-trunking-supported-instance-types.md)。容器執行個體必須具有容器代理程式的 `1.28.1` 版或更新版本，以及 ecs-init 套件的 `1.28.1-2` 版或更新版本。如果您使用 Amazon ECS 最佳化 AMI 的最新 Linux 變體，將會滿足這些要求。如需詳細資訊，請參閱[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。

**重要**  
Amazon EC2 執行個體必須關閉資源型 IPv4 DNS 請求。若要停用此選項，在使用 Amazon EC2 主控台建立新執行個體時，請務必取消選取 **Enable resource-based IPV4 (A record) DNS requests** (啟用資源型 IPV4 (A 記錄) DNS 請求) 選項。若要使用 停用此選項 AWS CLI，請使用下列命令。  

```
aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run
```

**若要使用 檢視具有更高ENI限制的容器執行個體 AWS CLI**

每個容器執行個體都有預設的網路界面，稱為幹線網路界面。使用下列命令，透過查詢 `ecs.awsvpc-trunk-id` 屬性來列出具有更高 ENI 限制的容器執行個體，該屬性指出其具有幹線網路介面。
+ [list-attributes](https://docs.aws.amazon.com/cli/latest/reference/ecs/list-attributes.html) (AWS CLI)

  ```
  aws ecs list-attributes \
        --target-type container-instance \
        --attribute-name ecs.awsvpc-trunk-id \
        --cluster cluster_name \
        --region us-east-1
  ```
+ [Get-ECSAttributeList](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ECSAttributeList.html) (AWS Tools for Windows PowerShell)

  ```
  Get-ECSAttributeList -TargetType container-instance -AttributeName ecs.awsvpc-trunk-id -Region us-east-1
  ```

# 援更多 Amazon ECS 容器網路介面的執行個體
<a name="eni-trunking-supported-instance-types"></a>

下列顯示受支援的 Amazon EC2 執行個體類型，以及在啟用 `awsvpcTrunking` 帳戶設定的前後，可以在每個執行個體類型上啟動使用 `awsvpc` 網路模式的任務數量。

**重要**  
雖然同一執行個體系列支援其他執行個體類型，但不支援 `a1.metal`、`c5.metal`、`c5a.8xlarge`、`c5ad.8xlarge`、`c5d.metal`、`m5.metal`、`p3dn.24xlarge`、`r5.metal`、`r5.8xlarge` 和 `r5d.metal` 執行個體類型。  
不支援 `c5n`、`d3`、`d3en`、`g3`、`g3s`、`g4dn`、`i3`、`i3en`、`inf1`、`m5dn`、`m5n`、`m5zn`、`mac1`、`r5b`、`r5n`、`r5dn`、`u-12tb1`、`u-6tb1`、`u-9tb1` 和 `z1d` 執行個體系列。

**Topics**
+ [一般用途](#eni-branch-gp)
+ [運算最佳化](#eni-branch-co)
+ [記憶體最佳化](#eni-branch-mo)
+ [儲存最佳化](#eni-branch-so)
+ [加速運算](#eni-branch-ac)
+ [高效能運算](#eni-branch-hpc)

## 一般用途
<a name="eni-branch-gp"></a>


| 執行個體類型 | 未啟用 ENI 主幹功能時的任務數量上限 | 啟用 ENI 主幹功能時的任務數量上限 | 
| --- | --- | --- | 
| a1.medium | 1 | 10 | 
| a1.large | 2 | 10 | 
| a1.xlarge | 3 | 20 | 
| a1.2xlarge | 3 | 40 | 
| a1.4xlarge | 7 | 60 | 
| m5.large | 2 | 10 | 
| m5.xlarge | 3 | 20 | 
| m5.2xlarge | 3 | 40 | 
| m5.4xlarge | 7 | 60 | 
| m5.8xlarge | 7 | 60 | 
| m5.12xlarge | 7 | 60 | 
| m5.16xlarge | 14 | 120 | 
| m5.24xlarge | 14 | 120 | 
| m5a.large | 2 | 10 | 
| m5a.xlarge | 3 | 20 | 
| m5a.2xlarge | 3 | 40 | 
| m5a.4xlarge | 7 | 60 | 
| m5a.8xlarge | 7 | 60 | 
| m5a.12xlarge | 7 | 60 | 
| m5a.16xlarge | 14 | 120 | 
| m5a.24xlarge | 14 | 120 | 
| m5ad.large | 2 | 10 | 
| m5ad.xlarge | 3 | 20 | 
| m5ad.2xlarge | 3 | 40 | 
| m5ad.4xlarge | 7 | 60 | 
| m5ad.8xlarge | 7 | 60 | 
| m5ad.12xlarge | 7 | 60 | 
| m5ad.16xlarge | 14 | 120 | 
| m5ad.24xlarge | 14 | 120 | 
| m5d.large | 2 | 10 | 
| m5d.xlarge | 3 | 20 | 
| m5d.2xlarge | 3 | 40 | 
| m5d.4xlarge | 7 | 60 | 
| m5d.8xlarge | 7 | 60 | 
| m5d.12xlarge | 7 | 60 | 
| m5d.16xlarge | 14 | 120 | 
| m5d.24xlarge | 14 | 120 | 
| m5d.metal | 14 | 120 | 
| m6a.large | 2 | 10 | 
| m6a.xlarge | 3 | 20 | 
| m6a.2xlarge | 3 | 40 | 
| m6a.4xlarge | 7 | 60 | 
| m6a.8xlarge | 7 | 90 | 
| m6a.12xlarge | 7 | 120 | 
| m6a.16xlarge | 14 | 120 | 
| m6a.24xlarge | 14 | 120 | 
| m6a.32xlarge | 14 | 120 | 
| m6a.48xlarge | 14 | 120 | 
| m6a.metal | 14 | 120 | 
| m6g.medium | 1 | 4 | 
| m6g.large | 2 | 10 | 
| m6g.xlarge | 3 | 20 | 
| m6g.2xlarge | 3 | 40 | 
| m6g.4xlarge | 7 | 60 | 
| m6g.8xlarge | 7 | 60 | 
| m6g.12xlarge | 7 | 60 | 
| m6g.16xlarge | 14 | 120 | 
| m6g.metal | 14 | 120 | 
| m6gd.medium | 1 | 4 | 
| m6gd.large | 2 | 10 | 
| m6gd.xlarge | 3 | 20 | 
| m6gd.2xlarge | 3 | 40 | 
| m6gd.4xlarge | 7 | 60 | 
| m6gd.8xlarge | 7 | 60 | 
| m6gd.12xlarge | 7 | 60 | 
| m6gd.16xlarge | 14 | 120 | 
| m6gd.metal | 14 | 120 | 
| m6i.large | 2 | 10 | 
| m6i.xlarge | 3 | 20 | 
| m6i.2xlarge | 3 | 40 | 
| m6i.4xlarge | 7 | 60 | 
| m6i.8xlarge | 7 | 90 | 
| m6i.12xlarge | 7 | 120 | 
| m6i.16xlarge | 14 | 120 | 
| m6i.24xlarge | 14 | 120 | 
| m6i.32xlarge | 14 | 120 | 
| m6i.metal | 14 | 120 | 
| m6id.large | 2 | 10 | 
| m6id.xlarge | 3 | 20 | 
| m6id.2xlarge | 3 | 40 | 
| m6id.4xlarge | 7 | 60 | 
| m6id.8xlarge | 7 | 90 | 
| m6id.12xlarge | 7 | 120 | 
| m6id.16xlarge | 14 | 120 | 
| m6id.24xlarge | 14 | 120 | 
| m6id.32xlarge | 14 | 120 | 
| m6id.metal | 14 | 120 | 
| m6idn.large | 2 | 10 | 
| m6idn.xlarge | 3 | 20 | 
| m6idn.2xlarge | 3 | 40 | 
| m6idn.4xlarge | 7 | 60 | 
| m6idn.8xlarge | 7 | 90 | 
| m6idn.12xlarge | 7 | 120 | 
| m6idn.16xlarge | 14 | 120 | 
| m6idn.24xlarge | 14 | 120 | 
| m6idn.32xlarge | 15 | 120 | 
| m6idn.metal | 15 | 120 | 
| m6in.large | 2 | 10 | 
| m6in.xlarge | 3 | 20 | 
| m6in.2xlarge | 3 | 40 | 
| m6in.4xlarge | 7 | 60 | 
| m6in.8xlarge | 7 | 90 | 
| m6in.12xlarge | 7 | 120 | 
| m6in.16xlarge | 14 | 120 | 
| m6in.24xlarge | 14 | 120 | 
| m6in.32xlarge | 15 | 120 | 
| m6in.metal | 15 | 120 | 
| m7a.medium | 1 | 4 | 
| m7a.large | 2 | 10 | 
| m7a.xlarge | 3 | 20 | 
| m7a.2xlarge | 3 | 40 | 
| m7a.4xlarge | 7 | 60 | 
| m7a.8xlarge | 7 | 90 | 
| m7a.12xlarge | 7 | 120 | 
| m7a.16xlarge | 14 | 120 | 
| m7a.24xlarge | 14 | 120 | 
| m7a.32xlarge | 14 | 120 | 
| m7a.48xlarge | 14 | 120 | 
| m7a.metal-48xl | 14 | 120 | 
| m7g.medium | 1 | 4 | 
| m7g.large | 2 | 10 | 
| m7g.xlarge | 3 | 20 | 
| m7g.2xlarge | 3 | 40 | 
| m7g.4xlarge | 7 | 60 | 
| m7g.8xlarge | 7 | 60 | 
| m7g.12xlarge | 7 | 60 | 
| m7g.16xlarge | 14 | 120 | 
| m7g.metal | 14 | 120 | 
| m7gd.medium | 1 | 4 | 
| m7gd.large | 2 | 10 | 
| m7gd.xlarge | 3 | 20 | 
| m7gd.2xlarge | 3 | 40 | 
| m7gd.4xlarge | 7 | 60 | 
| m7gd.8xlarge | 7 | 60 | 
| m7gd.12xlarge | 7 | 60 | 
| m7gd.16xlarge | 14 | 120 | 
| m7gd.metal | 14 | 120 | 
| m7i.large | 2 | 10 | 
| m7i.xlarge | 3 | 20 | 
| m7i.2xlarge | 3 | 40 | 
| m7i.4xlarge | 7 | 60 | 
| m7i.8xlarge | 7 | 90 | 
| m7i.12xlarge | 7 | 120 | 
| m7i.16xlarge | 14 | 120 | 
| m7i.24xlarge | 14 | 120 | 
| m7i.48xlarge | 14 | 120 | 
| m7i.metal-24xl | 14 | 120 | 
| m7i.metal-48xl | 14 | 120 | 
| m7i-flex.large | 2 | 4 | 
| m7i-flex.xlarge | 3 | 10 | 
| m7i-flex.2xlarge | 3 | 20 | 
| m7i-flex.4xlarge | 7 | 40 | 
| m7i-flex.8xlarge | 7 | 60 | 
| m7i-flex.12xlarge | 7 | 120 | 
| m7i-flex.16xlarge | 14 | 120 | 
| m8a.medium | 1 | 4 | 
| m8a.large | 2 | 10 | 
| m8a.xlarge | 3 | 20 | 
| m8a.2xlarge | 3 | 40 | 
| m8a.4xlarge | 7 | 60 | 
| m8a.8xlarge | 9 | 90 | 
| m8a.12xlarge | 11 | 120 | 
| m8a.16xlarge | 15 | 120 | 
| m8a.24xlarge | 15 | 120 | 
| m8a.48xlarge | 23 | 120 | 
| m8a.metal-24xl | 15 | 120 | 
| m8a.metal-48xl | 23 | 120 | 
| m8azn.medium | 2 | 4 | 
| m8azn.large | 3 | 10 | 
| m8azn.xlarge | 3 | 20 | 
| m8azn.3xlarge | 7 | 40 | 
| m8azn.6xlarge | 7 | 60 | 
| m8azn.12xlarge | 15 | 120 | 
| m8azn.24xlarge | 15 | 120 | 
| m8azn.metal-12xl | 15 | 120 | 
| m8azn.metal-24xl | 15 | 120 | 
| m8g.medium | 1 | 4 | 
| m8g.large | 2 | 10 | 
| m8g.xlarge | 3 | 20 | 
| m8g.2xlarge | 3 | 40 | 
| m8g.4xlarge | 7 | 60 | 
| m8g.8xlarge | 7 | 60 | 
| m8g.12xlarge | 7 | 60 | 
| m8g.16xlarge | 14 | 120 | 
| m8g.24xlarge | 14 | 120 | 
| m8g.48xlarge | 14 | 120 | 
| m8g.metal-24xl | 14 | 120 | 
| m8g.metal-48xl | 14 | 120 | 
| m8gb.medium | 1 | 4 | 
| m8gb.large | 2 | 10 | 
| m8gb.xlarge | 3 | 20 | 
| m8gb.2xlarge | 3 | 40 | 
| m8gb.4xlarge | 7 | 60 | 
| m8gb.8xlarge | 9 | 60 | 
| m8gb.12xlarge | 11 | 60 | 
| m8gb.16xlarge | 15 | 120 | 
| m8gb.24xlarge | 23 | 120 | 
| m8gb.48xlarge | 23 | 120 | 
| m8gb.metal-24xl | 23 | 120 | 
| m8gb.metal-48xl | 23 | 120 | 
| m8gd.medium | 1 | 4 | 
| m8gd.large | 2 | 10 | 
| m8gd.xlarge | 3 | 20 | 
| m8gd.2xlarge | 3 | 40 | 
| m8gd.4xlarge | 7 | 60 | 
| m8gd.8xlarge | 7 | 60 | 
| m8gd.12xlarge | 7 | 60 | 
| m8gd.16xlarge | 14 | 120 | 
| m8gd.24xlarge | 14 | 120 | 
| m8gd.48xlarge | 14 | 120 | 
| m8gd.metal-24xl | 14 | 120 | 
| m8gd.metal-48xl | 14 | 120 | 
| m8gn.medium | 1 | 4 | 
| m8gn.large | 2 | 10 | 
| m8gn.xlarge | 3 | 20 | 
| m8gn.2xlarge | 3 | 40 | 
| m8gn.4xlarge | 7 | 60 | 
| m8gn.8xlarge | 9 | 60 | 
| m8gn.12xlarge | 11 | 60 | 
| m8gn.16xlarge | 15 | 120 | 
| m8gn.24xlarge | 23 | 120 | 
| m8gn.48xlarge | 23 | 120 | 
| m8gn.metal-24xl | 23 | 120 | 
| m8gn.metal-48xl | 23 | 120 | 
| m8i.large | 2 | 10 | 
| m8i.xlarge | 3 | 20 | 
| m8i.2xlarge | 3 | 40 | 
| m8i.4xlarge | 7 | 60 | 
| m8i.8xlarge | 9 | 90 | 
| m8i.12xlarge | 11 | 120 | 
| m8i.16xlarge | 15 | 120 | 
| m8i.24xlarge | 15 | 120 | 
| m8i.32xlarge | 23 | 120 | 
| m8i.48xlarge | 23 | 120 | 
| m8i.96xlarge | 23 | 120 | 
| m8i.metal-48xl | 23 | 120 | 
| m8i.metal-96xl | 23 | 120 | 
| m8id.large | 2 | 10 | 
| m8id.xlarge | 3 | 20 | 
| m8id.2xlarge | 3 | 40 | 
| m8id.4xlarge | 7 | 60 | 
| m8id.8xlarge | 9 | 90 | 
| m8id.12xlarge | 11 | 120 | 
| m8id.16xlarge | 15 | 120 | 
| m8id.24xlarge | 15 | 120 | 
| m8id.32xlarge | 23 | 120 | 
| m8id.48xlarge | 23 | 120 | 
| m8id.96xlarge | 23 | 120 | 
| m8id.metal-48xl | 23 | 120 | 
| m8id.metal-96xl | 23 | 120 | 
| m8i-flex.large | 2 | 4 | 
| m8i-flex.xlarge | 3 | 10 | 
| m8i-flex.2xlarge | 3 | 20 | 
| m8i-flex.4xlarge | 7 | 40 | 
| m8i-flex.8xlarge | 9 | 60 | 
| m8i-flex.12xlarge | 11 | 120 | 
| m8i-flex.16xlarge | 15 | 120 | 
| mac2.metal | 7 | 12 | 
| mac2-m1ultra.metal | 7 | 12 | 
| mac2-m2.metal | 7 | 12 | 
| mac2-m2pro.metal | 7 | 12 | 
| mac-m4.metal | 7 | 12 | 
| mac-m4pro.metal | 7 | 12 | 
| mac-m4max.metal | 7 | 12 | 

## 運算最佳化
<a name="eni-branch-co"></a>


| 執行個體類型 | 未啟用 ENI 主幹功能時的任務數量上限 | 啟用 ENI 主幹功能時的任務數量上限 | 
| --- | --- | --- | 
| c5.large | 2 | 10 | 
| c5.xlarge | 3 | 20 | 
| c5.2xlarge | 3 | 40 | 
| c5.4xlarge | 7 | 60 | 
| c5.9xlarge | 7 | 60 | 
| c5.12xlarge | 7 | 60 | 
| c5.18xlarge | 14 | 120 | 
| c5.24xlarge | 14 | 120 | 
| c5a.large | 2 | 10 | 
| c5a.xlarge | 3 | 20 | 
| c5a.2xlarge | 3 | 40 | 
| c5a.4xlarge | 7 | 60 | 
| c5a.12xlarge | 7 | 60 | 
| c5a.16xlarge | 14 | 120 | 
| c5a.24xlarge | 14 | 120 | 
| c5ad.large | 2 | 10 | 
| c5ad.xlarge | 3 | 20 | 
| c5ad.2xlarge | 3 | 40 | 
| c5ad.4xlarge | 7 | 60 | 
| c5ad.12xlarge | 7 | 60 | 
| c5ad.16xlarge | 14 | 120 | 
| c5ad.24xlarge | 14 | 120 | 
| c5d.large | 2 | 10 | 
| c5d.xlarge | 3 | 20 | 
| c5d.2xlarge | 3 | 40 | 
| c5d.4xlarge | 7 | 60 | 
| c5d.9xlarge | 7 | 60 | 
| c5d.12xlarge | 7 | 60 | 
| c5d.18xlarge | 14 | 120 | 
| c5d.24xlarge | 14 | 120 | 
| c6a.large | 2 | 10 | 
| c6a.xlarge | 3 | 20 | 
| c6a.2xlarge | 3 | 40 | 
| c6a.4xlarge | 7 | 60 | 
| c6a.8xlarge | 7 | 90 | 
| c6a.12xlarge | 7 | 120 | 
| c6a.16xlarge | 14 | 120 | 
| c6a.24xlarge | 14 | 120 | 
| c6a.32xlarge | 14 | 120 | 
| c6a.48xlarge | 14 | 120 | 
| c6a.metal | 14 | 120 | 
| c6g.medium | 1 | 4 | 
| c6g.large | 2 | 10 | 
| c6g.xlarge | 3 | 20 | 
| c6g.2xlarge | 3 | 40 | 
| c6g.4xlarge | 7 | 60 | 
| c6g.8xlarge | 7 | 60 | 
| c6g.12xlarge | 7 | 60 | 
| c6g.16xlarge | 14 | 120 | 
| c6g.metal | 14 | 120 | 
| c6gd.medium | 1 | 4 | 
| c6gd.large | 2 | 10 | 
| c6gd.xlarge | 3 | 20 | 
| c6gd.2xlarge | 3 | 40 | 
| c6gd.4xlarge | 7 | 60 | 
| c6gd.8xlarge | 7 | 60 | 
| c6gd.12xlarge | 7 | 60 | 
| c6gd.16xlarge | 14 | 120 | 
| c6gd.metal | 14 | 120 | 
| c6gn.medium | 1 | 4 | 
| c6gn.large | 2 | 10 | 
| c6gn.xlarge | 3 | 20 | 
| c6gn.2xlarge | 3 | 40 | 
| c6gn.4xlarge | 7 | 60 | 
| c6gn.8xlarge | 7 | 60 | 
| c6gn.12xlarge | 7 | 60 | 
| c6gn.16xlarge | 14 | 120 | 
| c6i.large | 2 | 10 | 
| c6i.xlarge | 3 | 20 | 
| c6i.2xlarge | 3 | 40 | 
| c6i.4xlarge | 7 | 60 | 
| c6i.8xlarge | 7 | 90 | 
| c6i.12xlarge | 7 | 120 | 
| c6i.16xlarge | 14 | 120 | 
| c6i.24xlarge | 14 | 120 | 
| c6i.32xlarge | 14 | 120 | 
| c6i.metal | 14 | 120 | 
| c6id.large | 2 | 10 | 
| c6id.xlarge | 3 | 20 | 
| c6id.2xlarge | 3 | 40 | 
| c6id.4xlarge | 7 | 60 | 
| c6id.8xlarge | 7 | 90 | 
| c6id.12xlarge | 7 | 120 | 
| c6id.16xlarge | 14 | 120 | 
| c6id.24xlarge | 14 | 120 | 
| c6id.32xlarge | 14 | 120 | 
| c6id.metal | 14 | 120 | 
| c6in.large | 2 | 10 | 
| c6in.xlarge | 3 | 20 | 
| c6in.2xlarge | 3 | 40 | 
| c6in.4xlarge | 7 | 60 | 
| c6in.8xlarge | 7 | 90 | 
| c6in.12xlarge | 7 | 120 | 
| c6in.16xlarge | 14 | 120 | 
| c6in.24xlarge | 14 | 120 | 
| c6in.32xlarge | 15 | 120 | 
| c6in.metal | 15 | 120 | 
| c7a.medium | 1 | 4 | 
| c7a.large | 2 | 10 | 
| c7a.xlarge | 3 | 20 | 
| c7a.2xlarge | 3 | 40 | 
| c7a.4xlarge | 7 | 60 | 
| c7a.8xlarge | 7 | 90 | 
| c7a.12xlarge | 7 | 120 | 
| c7a.16xlarge | 14 | 120 | 
| c7a.24xlarge | 14 | 120 | 
| c7a.32xlarge | 14 | 120 | 
| c7a.48xlarge | 14 | 120 | 
| c7a.metal-48xl | 14 | 120 | 
| c7g.medium | 1 | 4 | 
| c7g.large | 2 | 10 | 
| c7g.xlarge | 3 | 20 | 
| c7g.2xlarge | 3 | 40 | 
| c7g.4xlarge | 7 | 60 | 
| c7g.8xlarge | 7 | 60 | 
| c7g.12xlarge | 7 | 60 | 
| c7g.16xlarge | 14 | 120 | 
| c7g.metal | 14 | 120 | 
| c7gd.medium | 1 | 4 | 
| c7gd.large | 2 | 10 | 
| c7gd.xlarge | 3 | 20 | 
| c7gd.2xlarge | 3 | 40 | 
| c7gd.4xlarge | 7 | 60 | 
| c7gd.8xlarge | 7 | 60 | 
| c7gd.12xlarge | 7 | 60 | 
| c7gd.16xlarge | 14 | 120 | 
| c7gd.metal | 14 | 120 | 
| c7gn.medium | 1 | 4 | 
| c7gn.large | 2 | 10 | 
| c7gn.xlarge | 3 | 20 | 
| c7gn.2xlarge | 3 | 40 | 
| c7gn.4xlarge | 7 | 60 | 
| c7gn.8xlarge | 7 | 60 | 
| c7gn.12xlarge | 7 | 60 | 
| c7gn.16xlarge | 14 | 120 | 
| c7gn.metal | 14 | 120 | 
| c7i.large | 2 | 10 | 
| c7i.xlarge | 3 | 20 | 
| c7i.2xlarge | 3 | 40 | 
| c7i.4xlarge | 7 | 60 | 
| c7i.8xlarge | 7 | 90 | 
| c7i.12xlarge | 7 | 120 | 
| c7i.16xlarge | 14 | 120 | 
| c7i.24xlarge | 14 | 120 | 
| c7i.48xlarge | 14 | 120 | 
| c7i.metal-24xl | 14 | 120 | 
| c7i.metal-48xl | 14 | 120 | 
| c7i-flex.large | 2 | 4 | 
| c7i-flex.xlarge | 3 | 10 | 
| c7i-flex.2xlarge | 3 | 20 | 
| c7i-flex.4xlarge | 7 | 40 | 
| c7i-flex.8xlarge | 7 | 60 | 
| c7i-flex.12xlarge | 7 | 120 | 
| c7i-flex.16xlarge | 14 | 120 | 
| c8a.medium | 1 | 4 | 
| c8a.large | 2 | 10 | 
| c8a.xlarge | 3 | 20 | 
| c8a.2xlarge | 3 | 40 | 
| c8a.4xlarge | 7 | 60 | 
| c8a.8xlarge | 9 | 90 | 
| c8a.12xlarge | 11 | 120 | 
| c8a.16xlarge | 15 | 120 | 
| c8a.24xlarge | 15 | 120 | 
| c8a.48xlarge | 23 | 120 | 
| c8a.metal-24xl | 15 | 120 | 
| c8a.metal-48xl | 23 | 120 | 
| c8g.medium | 1 | 4 | 
| c8g.large | 2 | 10 | 
| c8g.xlarge | 3 | 20 | 
| c8g.2xlarge | 3 | 40 | 
| c8g.4xlarge | 7 | 60 | 
| c8g.8xlarge | 7 | 60 | 
| c8g.12xlarge | 7 | 60 | 
| c8g.16xlarge | 14 | 120 | 
| c8g.24xlarge | 14 | 120 | 
| c8g.48xlarge | 14 | 120 | 
| c8g.metal-24xl | 14 | 120 | 
| c8g.metal-48xl | 14 | 120 | 
| c8gb.medium | 1 | 4 | 
| c8gb.large | 2 | 10 | 
| c8gb.xlarge | 3 | 20 | 
| c8gb.2xlarge | 3 | 40 | 
| c8gb.4xlarge | 7 | 60 | 
| c8gb.8xlarge | 9 | 60 | 
| c8gb.12xlarge | 11 | 60 | 
| c8gb.16xlarge | 15 | 120 | 
| c8gb.24xlarge | 23 | 120 | 
| c8gb.48xlarge | 23 | 120 | 
| c8gb.metal-24xl | 23 | 120 | 
| c8gb.metal-48xl | 23 | 120 | 
| c8gd.medium | 1 | 4 | 
| c8gd.large | 2 | 10 | 
| c8gd.xlarge | 3 | 20 | 
| c8gd.2xlarge | 3 | 40 | 
| c8gd.4xlarge | 7 | 60 | 
| c8gd.8xlarge | 7 | 60 | 
| c8gd.12xlarge | 7 | 60 | 
| c8gd.16xlarge | 14 | 120 | 
| c8gd.24xlarge | 14 | 120 | 
| c8gd.48xlarge | 14 | 120 | 
| c8gd.metal-24xl | 14 | 120 | 
| c8gd.metal-48xl | 14 | 120 | 
| c8gn.medium | 1 | 4 | 
| c8gn.large | 2 | 10 | 
| c8gn.xlarge | 3 | 20 | 
| c8gn.2xlarge | 3 | 40 | 
| c8gn.4xlarge | 7 | 60 | 
| c8gn.8xlarge | 9 | 60 | 
| c8gn.12xlarge | 11 | 60 | 
| c8gn.16xlarge | 15 | 120 | 
| c8gn.24xlarge | 23 | 120 | 
| c8gn.48xlarge | 23 | 120 | 
| c8gn.metal-24xl | 23 | 120 | 
| c8gn.metal-48xl | 23 | 120 | 
| c8i.large | 2 | 10 | 
| c8i.xlarge | 3 | 20 | 
| c8i.2xlarge | 3 | 40 | 
| c8i.4xlarge | 7 | 60 | 
| c8i.8xlarge | 9 | 90 | 
| c8i.12xlarge | 11 | 120 | 
| c8i.16xlarge | 15 | 120 | 
| c8i.24xlarge | 15 | 120 | 
| c8i.32xlarge | 23 | 120 | 
| c8i.48xlarge | 23 | 120 | 
| c8i.96xlarge | 23 | 120 | 
| c8i.metal-48xl | 23 | 120 | 
| c8i.metal-96xl | 23 | 120 | 
| c8id.large | 2 | 10 | 
| c8id.xlarge | 3 | 20 | 
| c8id.2xlarge | 3 | 40 | 
| c8id.4xlarge | 7 | 60 | 
| c8id.8xlarge | 9 | 90 | 
| c8id.12xlarge | 11 | 120 | 
| c8id.16xlarge | 15 | 120 | 
| c8id.24xlarge | 15 | 120 | 
| c8id.32xlarge | 23 | 120 | 
| c8id.48xlarge | 23 | 120 | 
| c8id.96xlarge | 23 | 120 | 
| c8id.metal-48xl | 23 | 120 | 
| c8id.metal-96xl | 23 | 120 | 
| c8i-flex.large | 2 | 4 | 
| c8i-flex.xlarge | 3 | 10 | 
| c8i-flex.2xlarge | 3 | 20 | 
| c8i-flex.4xlarge | 7 | 40 | 
| c8i-flex.8xlarge | 9 | 60 | 
| c8i-flex.12xlarge | 11 | 120 | 
| c8i-flex.16xlarge | 15 | 120 | 

## 記憶體最佳化
<a name="eni-branch-mo"></a>


| 執行個體類型 | 未啟用 ENI 主幹功能時的任務數量上限 | 啟用 ENI 主幹功能時的任務數量上限 | 
| --- | --- | --- | 
| r5.large | 2 | 10 | 
| r5.xlarge | 3 | 20 | 
| r5.2xlarge | 3 | 40 | 
| r5.4xlarge | 7 | 60 | 
| r5.12xlarge | 7 | 60 | 
| r5.16xlarge | 14 | 120 | 
| r5.24xlarge | 14 | 120 | 
| r5a.large | 2 | 10 | 
| r5a.xlarge | 3 | 20 | 
| r5a.2xlarge | 3 | 40 | 
| r5a.4xlarge | 7 | 60 | 
| r5a.8xlarge | 7 | 60 | 
| r5a.12xlarge | 7 | 60 | 
| r5a.16xlarge | 14 | 120 | 
| r5a.24xlarge | 14 | 120 | 
| r5ad.large | 2 | 10 | 
| r5ad.xlarge | 3 | 20 | 
| r5ad.2xlarge | 3 | 40 | 
| r5ad.4xlarge | 7 | 60 | 
| r5ad.8xlarge | 7 | 60 | 
| r5ad.12xlarge | 7 | 60 | 
| r5ad.16xlarge | 14 | 120 | 
| r5ad.24xlarge | 14 | 120 | 
| r5b.16xlarge | 14 | 120 | 
| r5d.large | 2 | 10 | 
| r5d.xlarge | 3 | 20 | 
| r5d.2xlarge | 3 | 40 | 
| r5d.4xlarge | 7 | 60 | 
| r5d.8xlarge | 7 | 60 | 
| r5d.12xlarge | 7 | 60 | 
| r5d.16xlarge | 14 | 120 | 
| r5d.24xlarge | 14 | 120 | 
| r5dn.16xlarge | 14 | 120 | 
| r6a.large | 2 | 10 | 
| r6a.xlarge | 3 | 20 | 
| r6a.2xlarge | 3 | 40 | 
| r6a.4xlarge | 7 | 60 | 
| r6a.8xlarge | 7 | 90 | 
| r6a.12xlarge | 7 | 120 | 
| r6a.16xlarge | 14 | 120 | 
| r6a.24xlarge | 14 | 120 | 
| r6a.32xlarge | 14 | 120 | 
| r6a.48xlarge | 14 | 120 | 
| r6a.metal | 14 | 120 | 
| r6g.medium | 1 | 4 | 
| r6g.large | 2 | 10 | 
| r6g.xlarge | 3 | 20 | 
| r6g.2xlarge | 3 | 40 | 
| r6g.4xlarge | 7 | 60 | 
| r6g.8xlarge | 7 | 60 | 
| r6g.12xlarge | 7 | 60 | 
| r6g.16xlarge | 14 | 120 | 
| r6g.metal | 14 | 120 | 
| r6gd.medium | 1 | 4 | 
| r6gd.large | 2 | 10 | 
| r6gd.xlarge | 3 | 20 | 
| r6gd.2xlarge | 3 | 40 | 
| r6gd.4xlarge | 7 | 60 | 
| r6gd.8xlarge | 7 | 60 | 
| r6gd.12xlarge | 7 | 60 | 
| r6gd.16xlarge | 14 | 120 | 
| r6gd.metal | 14 | 120 | 
| r6i.large | 2 | 10 | 
| r6i.xlarge | 3 | 20 | 
| r6i.2xlarge | 3 | 40 | 
| r6i.4xlarge | 7 | 60 | 
| r6i.8xlarge | 7 | 90 | 
| r6i.12xlarge | 7 | 120 | 
| r6i.16xlarge | 14 | 120 | 
| r6i.24xlarge | 14 | 120 | 
| r6i.32xlarge | 14 | 120 | 
| r6i.metal | 14 | 120 | 
| r6id.large | 2 | 10 | 
| r6id.xlarge | 3 | 20 | 
| r6id.2xlarge | 3 | 40 | 
| r6id.4xlarge | 7 | 60 | 
| r6id.8xlarge | 7 | 90 | 
| r6id.12xlarge | 7 | 120 | 
| r6id.16xlarge | 14 | 120 | 
| r6id.24xlarge | 14 | 120 | 
| r6id.32xlarge | 14 | 120 | 
| r6id.metal | 14 | 120 | 
| r6idn.large | 2 | 10 | 
| r6idn.xlarge | 3 | 20 | 
| r6idn.2xlarge | 3 | 40 | 
| r6idn.4xlarge | 7 | 60 | 
| r6idn.8xlarge | 7 | 90 | 
| r6idn.12xlarge | 7 | 120 | 
| r6idn.16xlarge | 14 | 120 | 
| r6idn.24xlarge | 14 | 120 | 
| r6idn.32xlarge | 15 | 120 | 
| r6idn.metal | 15 | 120 | 
| r6in.large | 2 | 10 | 
| r6in.xlarge | 3 | 20 | 
| r6in.2xlarge | 3 | 40 | 
| r6in.4xlarge | 7 | 60 | 
| r6in.8xlarge | 7 | 90 | 
| r6in.12xlarge | 7 | 120 | 
| r6in.16xlarge | 14 | 120 | 
| r6in.24xlarge | 14 | 120 | 
| r6in.32xlarge | 15 | 120 | 
| r6in.metal | 15 | 120 | 
| r7a.medium | 1 | 4 | 
| r7a.large | 2 | 10 | 
| r7a.xlarge | 3 | 20 | 
| r7a.2xlarge | 3 | 40 | 
| r7a.4xlarge | 7 | 60 | 
| r7a.8xlarge | 7 | 90 | 
| r7a.12xlarge | 7 | 120 | 
| r7a.16xlarge | 14 | 120 | 
| r7a.24xlarge | 14 | 120 | 
| r7a.32xlarge | 14 | 120 | 
| r7a.48xlarge | 14 | 120 | 
| r7a.metal-48xl | 14 | 120 | 
| r7g.medium | 1 | 4 | 
| r7g.large | 2 | 10 | 
| r7g.xlarge | 3 | 20 | 
| r7g.2xlarge | 3 | 40 | 
| r7g.4xlarge | 7 | 60 | 
| r7g.8xlarge | 7 | 60 | 
| r7g.12xlarge | 7 | 60 | 
| r7g.16xlarge | 14 | 120 | 
| r7g.metal | 14 | 120 | 
| r7gd.medium | 1 | 4 | 
| r7gd.large | 2 | 10 | 
| r7gd.xlarge | 3 | 20 | 
| r7gd.2xlarge | 3 | 40 | 
| r7gd.4xlarge | 7 | 60 | 
| r7gd.8xlarge | 7 | 60 | 
| r7gd.12xlarge | 7 | 60 | 
| r7gd.16xlarge | 14 | 120 | 
| r7gd.metal | 14 | 120 | 
| r7i.large | 2 | 10 | 
| r7i.xlarge | 3 | 20 | 
| r7i.2xlarge | 3 | 40 | 
| r7i.4xlarge | 7 | 60 | 
| r7i.8xlarge | 7 | 90 | 
| r7i.12xlarge | 7 | 120 | 
| r7i.16xlarge | 14 | 120 | 
| r7i.24xlarge | 14 | 120 | 
| r7i.48xlarge | 14 | 120 | 
| r7i.metal-24xl | 14 | 120 | 
| r7i.metal-48xl | 14 | 120 | 
| r7iz.large | 2 | 10 | 
| r7iz.xlarge | 3 | 20 | 
| r7iz.2xlarge | 3 | 40 | 
| r7iz.4xlarge | 7 | 60 | 
| r7iz.8xlarge | 7 | 90 | 
| r7iz.12xlarge | 7 | 120 | 
| r7iz.16xlarge | 14 | 120 | 
| r7iz.32xlarge | 14 | 120 | 
| r7iz.metal-16xl | 14 | 120 | 
| r7iz.metal-32xl | 14 | 120 | 
| r8a.medium | 1 | 4 | 
| r8a.large | 2 | 10 | 
| r8a.xlarge | 3 | 20 | 
| r8a.2xlarge | 3 | 40 | 
| r8a.4xlarge | 7 | 60 | 
| r8a.8xlarge | 9 | 90 | 
| r8a.12xlarge | 11 | 120 | 
| r8a.16xlarge | 15 | 120 | 
| r8a.24xlarge | 15 | 120 | 
| r8a.48xlarge | 23 | 120 | 
| r8a.metal-24xl | 15 | 120 | 
| r8a.metal-48xl | 23 | 120 | 
| r8g.medium | 1 | 4 | 
| r8g.large | 2 | 10 | 
| r8g.xlarge | 3 | 20 | 
| r8g.2xlarge | 3 | 40 | 
| r8g.4xlarge | 7 | 60 | 
| r8g.8xlarge | 7 | 60 | 
| r8g.12xlarge | 7 | 60 | 
| r8g.16xlarge | 14 | 120 | 
| r8g.24xlarge | 14 | 120 | 
| r8g.48xlarge | 14 | 120 | 
| r8g.metal-24xl | 14 | 120 | 
| r8g.metal-48xl | 14 | 120 | 
| r8gb.medium | 1 | 4 | 
| r8gb.large | 2 | 10 | 
| r8gb.xlarge | 3 | 20 | 
| r8gb.2xlarge | 3 | 40 | 
| r8gb.4xlarge | 7 | 60 | 
| r8gb.8xlarge | 9 | 60 | 
| r8gb.12xlarge | 11 | 60 | 
| r8gb.16xlarge | 15 | 120 | 
| r8gb.24xlarge | 23 | 120 | 
| r8gb.48xlarge | 23 | 120 | 
| r8gb.metal-24xl | 23 | 120 | 
| r8gb.metal-48xl | 23 | 120 | 
| r8gd.medium | 1 | 4 | 
| r8gd.large | 2 | 10 | 
| r8gd.xlarge | 3 | 20 | 
| r8gd.2xlarge | 3 | 40 | 
| r8gd.4xlarge | 7 | 60 | 
| r8gd.8xlarge | 7 | 60 | 
| r8gd.12xlarge | 7 | 60 | 
| r8gd.16xlarge | 14 | 120 | 
| r8gd.24xlarge | 14 | 120 | 
| r8gd.48xlarge | 14 | 120 | 
| r8gd.metal-24xl | 14 | 120 | 
| r8gd.metal-48xl | 14 | 120 | 
| r8gn.medium | 1 | 4 | 
| r8gn.large | 2 | 10 | 
| r8gn.xlarge | 3 | 20 | 
| r8gn.2xlarge | 3 | 40 | 
| r8gn.4xlarge | 7 | 60 | 
| r8gn.8xlarge | 9 | 60 | 
| r8gn.12xlarge | 11 | 60 | 
| r8gn.16xlarge | 15 | 120 | 
| r8gn.24xlarge | 23 | 120 | 
| r8gn.48xlarge | 23 | 120 | 
| r8gn.metal-24xl | 23 | 120 | 
| r8gn.metal-48xl | 23 | 120 | 
| r8i.large | 2 | 10 | 
| r8i.xlarge | 3 | 20 | 
| r8i.2xlarge | 3 | 40 | 
| r8i.4xlarge | 7 | 60 | 
| r8i.8xlarge | 9 | 90 | 
| r8i.12xlarge | 11 | 120 | 
| r8i.16xlarge | 15 | 120 | 
| r8i.24xlarge | 15 | 120 | 
| r8i.32xlarge | 23 | 120 | 
| r8i.48xlarge | 23 | 120 | 
| r8i.96xlarge | 23 | 120 | 
| r8i.metal-48xl | 23 | 120 | 
| r8i.metal-96xl | 23 | 120 | 
| r8id.large | 2 | 10 | 
| r8id.xlarge | 3 | 20 | 
| r8id.2xlarge | 3 | 40 | 
| r8id.4xlarge | 7 | 60 | 
| r8id.8xlarge | 9 | 90 | 
| r8id.12xlarge | 11 | 120 | 
| r8id.16xlarge | 15 | 120 | 
| r8id.24xlarge | 15 | 120 | 
| r8id.32xlarge | 23 | 120 | 
| r8id.48xlarge | 23 | 120 | 
| r8id.96xlarge | 23 | 120 | 
| r8id.metal-48xl | 23 | 120 | 
| r8id.metal-96xl | 23 | 120 | 
| r8i-flex.large | 2 | 4 | 
| r8i-flex.xlarge | 3 | 10 | 
| r8i-flex.2xlarge | 3 | 20 | 
| r8i-flex.4xlarge | 7 | 40 | 
| r8i-flex.8xlarge | 9 | 60 | 
| r8i-flex.12xlarge | 11 | 120 | 
| r8i-flex.16xlarge | 15 | 120 | 
| u-3tb1.56xlarge | 7 | 12 | 
| u-6tb1.56xlarge | 14 | 12 | 
| u-18tb1.112xlarge | 14 | 12 | 
| u-18tb1.metal | 14 | 12 | 
| u-24tb1.112xlarge | 14 | 12 | 
| u-24tb1.metal | 14 | 12 | 
| u7i-6tb.112xlarge | 14 | 120 | 
| u7i-8tb.112xlarge | 14 | 120 | 
| u7i-12tb.224xlarge | 14 | 120 | 
| u7in-16tb.224xlarge | 15 | 120 | 
| u7in-24tb.224xlarge | 15 | 120 | 
| u7in-32tb.224xlarge | 15 | 120 | 
| u7inh-32tb.480xlarge | 15 | 120 | 
| x2gd.medium | 1 | 10 | 
| x2gd.large | 2 | 10 | 
| x2gd.xlarge | 3 | 20 | 
| x2gd.2xlarge | 3 | 40 | 
| x2gd.4xlarge | 7 | 60 | 
| x2gd.8xlarge | 7 | 60 | 
| x2gd.12xlarge | 7 | 60 | 
| x2gd.16xlarge | 14 | 120 | 
| x2gd.metal | 14 | 120 | 
| x2idn.16xlarge | 14 | 120 | 
| x2idn.24xlarge | 14 | 120 | 
| x2idn.32xlarge | 14 | 120 | 
| x2idn.metal | 14 | 120 | 
| x2iedn.xlarge | 3 | 13 | 
| x2iedn.2xlarge | 3 | 29 | 
| x2iedn.4xlarge | 7 | 60 | 
| x2iedn.8xlarge | 7 | 120 | 
| x2iedn.16xlarge | 14 | 120 | 
| x2iedn.24xlarge | 14 | 120 | 
| x2iedn.32xlarge | 14 | 120 | 
| x2iedn.metal | 14 | 120 | 
| x2iezn.2xlarge | 3 | 64 | 
| x2iezn.4xlarge | 7 | 120 | 
| x2iezn.6xlarge | 7 | 120 | 
| x2iezn.8xlarge | 7 | 120 | 
| x2iezn.12xlarge | 14 | 120 | 
| x2iezn.metal | 14 | 120 | 
| x8g.medium | 1 | 4 | 
| x8g.large | 2 | 10 | 
| x8g.xlarge | 3 | 20 | 
| x8g.2xlarge | 3 | 40 | 
| x8g.4xlarge | 7 | 60 | 
| x8g.8xlarge | 7 | 60 | 
| x8g.12xlarge | 7 | 60 | 
| x8g.16xlarge | 14 | 120 | 
| x8g.24xlarge | 14 | 120 | 
| x8g.48xlarge | 14 | 120 | 
| x8g.metal-24xl | 14 | 120 | 
| x8g.metal-48xl | 14 | 120 | 
| x8aedz.large | 3 | 10 | 
| x8aedz.xlarge | 3 | 20 | 
| x8aedz.3xlarge | 7 | 40 | 
| x8aedz.6xlarge | 7 | 60 | 
| x8aedz.12xlarge | 15 | 120 | 
| x8aedz.24xlarge | 15 | 120 | 
| x8aedz.metal-12xl | 15 | 120 | 
| x8aedz.metal-24xl | 15 | 120 | 
| x8i.large | 2 | 10 | 
| x8i.xlarge | 3 | 20 | 
| x8i.2xlarge | 3 | 40 | 
| x8i.4xlarge | 7 | 60 | 
| x8i.8xlarge | 9 | 90 | 
| x8i.12xlarge | 11 | 120 | 
| x8i.16xlarge | 15 | 120 | 
| x8i.24xlarge | 15 | 120 | 
| x8i.32xlarge | 23 | 120 | 
| x8i.48xlarge | 23 | 120 | 
| x8i.64xlarge | 23 | 120 | 
| x8i.96xlarge | 23 | 120 | 
| x8i.metal-48xl | 23 | 120 | 
| x8i.metal-96xl | 23 | 120 | 

## 儲存最佳化
<a name="eni-branch-so"></a>


| 執行個體類型 | 未啟用 ENI 主幹功能時的任務數量上限 | 啟用 ENI 主幹功能時的任務數量上限 | 
| --- | --- | --- | 
| i4g.large | 2 | 10 | 
| i4g.xlarge | 3 | 20 | 
| i4g.2xlarge | 3 | 40 | 
| i4g.4xlarge | 7 | 60 | 
| i4g.8xlarge | 7 | 60 | 
| i4g.16xlarge | 14 | 120 | 
| i4i.xlarge | 3 | 8 | 
| i4i.2xlarge | 3 | 28 | 
| i4i.4xlarge | 7 | 58 | 
| i4i.8xlarge | 7 | 118 | 
| i4i.12xlarge | 7 | 118 | 
| i4i.16xlarge | 14 | 248 | 
| i4i.24xlarge | 14 | 118 | 
| i4i.32xlarge | 14 | 498 | 
| i4i.metal | 14 | 498 | 
| i7i.large | 2 | 10 | 
| i7i.xlarge | 3 | 20 | 
| i7i.2xlarge | 3 | 40 | 
| i7i.4xlarge | 7 | 60 | 
| i7i.8xlarge | 7 | 90 | 
| i7i.12xlarge | 7 | 90 | 
| i7i.16xlarge | 14 | 120 | 
| i7i.24xlarge | 14 | 120 | 
| i7i.48xlarge | 14 | 120 | 
| i7i.metal-24xl | 14 | 120 | 
| i7i.metal-48xl | 14 | 120 | 
| i7ie.large | 2 | 20 | 
| i7ie.xlarge | 3 | 29 | 
| i7ie.2xlarge | 3 | 29 | 
| i7ie.3xlarge | 3 | 29 | 
| i7ie.6xlarge | 7 | 60 | 
| i7ie.12xlarge | 7 | 60 | 
| i7ie.18xlarge | 14 | 120 | 
| i7ie.24xlarge | 14 | 120 | 
| i7ie.48xlarge | 14 | 120 | 
| i7ie.metal-24xl | 14 | 120 | 
| i7ie.metal-48xl | 14 | 120 | 
| i8g.large | 2 | 10 | 
| i8g.xlarge | 3 | 20 | 
| i8g.2xlarge | 3 | 40 | 
| i8g.4xlarge | 7 | 60 | 
| i8g.8xlarge | 7 | 60 | 
| i8g.12xlarge | 7 | 60 | 
| i8g.16xlarge | 14 | 120 | 
| i8g.24xlarge | 14 | 120 | 
| i8g.48xlarge | 14 | 120 | 
| i8g.metal-24xl | 14 | 120 | 
| i8g.metal-48xl | 14 | 120 | 
| i8ge.large | 2 | 20 | 
| i8ge.xlarge | 3 | 29 | 
| i8ge.2xlarge | 3 | 29 | 
| i8ge.3xlarge | 5 | 29 | 
| i8ge.6xlarge | 9 | 60 | 
| i8ge.12xlarge | 11 | 60 | 
| i8ge.18xlarge | 15 | 120 | 
| i8ge.24xlarge | 15 | 120 | 
| i8ge.48xlarge | 23 | 120 | 
| i8ge.metal-24xl | 15 | 120 | 
| i8ge.metal-48xl | 23 | 120 | 
| im4gn.large | 2 | 10 | 
| im4gn.xlarge | 3 | 20 | 
| im4gn.2xlarge | 3 | 40 | 
| im4gn.4xlarge | 7 | 60 | 
| im4gn.8xlarge | 7 | 60 | 
| im4gn.16xlarge | 14 | 120 | 
| is4gen.medium | 1 | 4 | 
| is4gen.large | 2 | 10 | 
| is4gen.xlarge | 3 | 20 | 
| is4gen.2xlarge | 3 | 40 | 
| is4gen.4xlarge | 7 | 60 | 
| is4gen.8xlarge | 7 | 60 | 

## 加速運算
<a name="eni-branch-ac"></a>


| 執行個體類型 | 未啟用 ENI 主幹功能時的任務數量上限 | 啟用 ENI 主幹功能時的任務數量上限 | 
| --- | --- | --- | 
| dl1.24xlarge | 59 | 120 | 
| dl2q.24xlarge | 14 | 120 | 
| f2.6xlarge | 7 | 90 | 
| f2.12xlarge | 7 | 120 | 
| f2.48xlarge | 14 | 120 | 
| g4ad.xlarge | 1 | 12 | 
| g4ad.2xlarge | 1 | 12 | 
| g4ad.4xlarge | 2 | 12 | 
| g4ad.8xlarge | 3 | 12 | 
| g4ad.16xlarge | 7 | 12 | 
| g5.xlarge | 3 | 6 | 
| g5.2xlarge | 3 | 19 | 
| g5.4xlarge | 7 | 40 | 
| g5.8xlarge | 7 | 90 | 
| g5.12xlarge | 14 | 120 | 
| g5.16xlarge | 7 | 120 | 
| g5.24xlarge | 14 | 120 | 
| g5.48xlarge | 6 | 120 | 
| g5g.xlarge | 3 | 20 | 
| g5g.2xlarge | 3 | 40 | 
| g5g.4xlarge | 7 | 60 | 
| g5g.8xlarge | 7 | 60 | 
| g5g.16xlarge | 14 | 120 | 
| g5g.metal | 14 | 120 | 
| g6.xlarge | 3 | 20 | 
| g6.2xlarge | 3 | 40 | 
| g6.4xlarge | 7 | 60 | 
| g6.8xlarge | 7 | 90 | 
| g6.12xlarge | 7 | 120 | 
| g6.16xlarge | 14 | 120 | 
| g6.24xlarge | 14 | 120 | 
| g6.48xlarge | 14 | 120 | 
| g6e.xlarge | 3 | 20 | 
| g6e.2xlarge | 3 | 40 | 
| g6e.4xlarge | 7 | 60 | 
| g6e.8xlarge | 7 | 90 | 
| g6e.12xlarge | 9 | 120 | 
| g6e.16xlarge | 14 | 120 | 
| g6e.24xlarge | 19 | 120 | 
| g6e.48xlarge | 39 | 120 | 
| g6f.large | 1 | 10 | 
| g6f.xlarge | 3 | 20 | 
| g6f.2xlarge | 3 | 40 | 
| g6f.4xlarge | 7 | 60 | 
| gr6.4xlarge | 7 | 60 | 
| gr6.8xlarge | 7 | 90 | 
| gr6f.4xlarge | 7 | 60 | 
| g7e.2xlarge | 3 | 242 | 
| g7e.4xlarge | 7 | 242 | 
| g7e.8xlarge | 7 | 242 | 
| g7e.12xlarge | 9 | 242 | 
| g7e.24xlarge | 19 | 242 | 
| g7e.48xlarge | 39 | 242 | 
| inf2.xlarge | 3 | 20 | 
| inf2.8xlarge | 7 | 90 | 
| inf2.24xlarge | 14 | 120 | 
| inf2.48xlarge | 14 | 120 | 
| p4d.24xlarge | 59 | 120 | 
| p4de.24xlarge | 59 | 120 | 
| p5.4xlarge | 3 | 60 | 
| p5.48xlarge | 63 | 242 | 
| p5e.48xlarge | 63 | 242 | 
| p5en.48xlarge | 63 | 242 | 
| p6-b200.48xlarge | 31 | 242 | 
| p6-b300.48xlarge | 67 | 242 | 
| p6e-gb200.36xlarge | 38 | 120 | 
| trn1.2xlarge | 3 | 19 | 
| trn1.32xlarge | 39 | 120 | 
| trn1n.32xlarge | 79 | 242 | 
| trn2.3xlarge | 1 | 14 | 
| trn2.48xlarge | 31 | 242 | 
| trn2u.48xlarge | 31 | 242 | 
| vt1.3xlarge | 3 | 40 | 
| vt1.6xlarge | 7 | 60 | 
| vt1.24xlarge | 14 | 120 | 

## 高效能運算
<a name="eni-branch-hpc"></a>


| 執行個體類型 | 未啟用 ENI 主幹功能時的任務數量上限 | 啟用 ENI 主幹功能時的任務數量上限 | 
| --- | --- | --- | 
| hpc6a.48xlarge | 1 | 120 | 
| hpc6id.32xlarge | 1 | 120 | 
| hpc7g.4xlarge | 3 | 120 | 
| hpc7g.8xlarge | 3 | 120 | 
| hpc7g.16xlarge | 3 | 120 | 
| hpc8a.96xlarge | 3 | -2 | 

# 保留 Amazon ECS Linux 容器執行個體記憶體
<a name="memory-management"></a>

當 Amazon ECS 容器代理程式將容器執行個體註冊至叢集時，代理程式必須判斷容器執行個體有多少記憶體可保留給您的任務。由於存在平台記憶體額外負荷和由系統核心佔用的記憶體，這數字會與 Amazon EC2 執行個體公告的安裝記憶體數量不同。舉例而言，`m4.large` 執行個體安裝了 8 GiB 的記憶體。但在容器執行個體註冊時，未必恰好有 8192 MiB 的記憶體可供任務使用。

## ECS 受管執行個體記憶體資源判斷
<a name="ecs-mi-memory-calculation"></a>

Amazon ECS 受管執行個體使用階層方法來判斷任務的記憶體資源需求。與依賴 Docker 記憶體自我檢查的 EC2 上的 ECS 不同，ECS 受管執行個體會在排程決策期間直接從任務承載計算記憶體需求。

ECS 受管執行個體代理程式收到任務時，會使用下列優先順序來計算記憶體需求：

1. **任務層級記憶體 （最高優先順序）** - 如果任務層級記憶體是在任務定義中指定，代理程式會直接使用此值。這優先於所有容器層級的記憶體設定。

1. **容器層級記憶體總和 （備用）** - 如果未指定任務層級記憶體 （或為 0)，代理程式會加總任務中所有容器的記憶體需求。對於每個容器，它使用：

   1. *記憶體保留 （軟性限制）* - 如果容器在其組態`memoryReservation`中指定 ，代理程式會使用此值。

   1. *容器記憶體 （硬性限制）* - 如果`memoryReservation`未指定，代理程式會使用容器`memory`的欄位。

**Example 指定的任務層級記憶體**  
指定任務層級記憶體時，其優先順序會高於容器層級設定：  

```
{
  "family": "my-task",
  "memory": "2048",
  "containerDefinitions": [
    {
      "name": "container1",
      "memory": 1024,
      "memoryReservation": 512
    }
  ]
}
```
代理程式保留 2048 MiB （任務層級記憶體優先）。

**Example 具有保留的容器層級記憶體**  
未指定任務層級記憶體時，代理程式會加總容器記憶體需求：  

```
{
  "family": "my-task",
  "containerDefinitions": [
    {
      "name": "container1",
      "memory": 1024,
      "memoryReservation": 512
    },
    {
      "name": "container2",
      "memory": 512
    }
  ]
}
```
代理程式保留 512 MiB （容器 1 保留） \$1 512 MiB （容器 2 記憶體） = 總計 1024 MiB。

ECS 受管執行個體代理程式會分三個階段執行記憶體計算：

1. **任務接收** - 當任務承載從 ECS 控制平面抵達時，代理程式會立即計算所需的記憶體。

1. **資源儲存** - 計算的記憶體需求會存放在任務模型中，以供日後在資源會計操作中使用。

1. **排程決策** - 在接受任務之前，客服人員會檢查是否有足夠記憶體可用。如果可用的記憶體不足，任務會遭到拒絕，並保留在 ECS 服務佇列中，直到資源可用為止。

**注意**  
與 EC2 上的 ECS 不同，ECS 受管執行個體不會使用 `ECS_RESERVED_MEMORY` 組態變數。系統程序的記憶體保留是透過基礎平台的資源管理來處理，而代理程式會根據任務定義執行準確的資源會計。

 對於 EC2 上的 ECS，Amazon ECS 容器代理程式提供名為 的組態變數`ECS_RESERVED_MEMORY`，可用來從配置給您任務 MiB 的集區中移除指定數量的記憶體。這可為重要系統程序有效地預留記憶體。

若您的任務佔用了容器執行個體上的所有記憶體，任務可能會與重要的系統程序爭奪記憶體，也許會引發系統故障。

舉例而言，若在容器代理程式檔案中指定 `ECS_RESERVED_MEMORY=256`，則代理程式會將記憶體總量減去 256 MiB 再註冊給該執行個體，而 256 MiB 的記憶體就無法由 ECS 任務配置。如需代理程式組態變數的詳細資訊及設定方式，請參閱 [Amazon ECS 容器代理程式組態](ecs-agent-config.md) 和 [引導 Amazon ECS Linux 容器執行個體傳遞資料](bootstrap_container_instance.md)。

若指定 8192 MiB 供任務使用，而您沒有任何容器執行個體擁有 8192 MiB 或更多記憶體可滿足此需求，則任務便無法置放到叢集中。如果您使用的是受管運算環境，則 AWS Batch 必須啟動較大的執行個體類型以容納請求。

Amazon ECS 容器代理程式會使用 Docker `ReadMemInfo()` 函數來查詢作業系統可用的記憶體總量。Linux 和 Windows 均有提供命令列公用程式來判斷記憶體總量。

**Example - 判定 Linux 記憶體總量**  
**free** 命令會傳回作業系統辨識出的記憶體總量。  

```
$ free -b
```
執行 Amazon ECS 最佳化 Amazon Linux AMI 的 `m4.large` 執行個體的輸出範例。  

```
             total       used       free     shared    buffers     cached
Mem:    8373026816  348180480 8024846336      90112   25534464  205418496
-/+ buffers/cache:  117227520 8255799296
```
執行個體的記憶體總量有 8373026816 位元組，轉為任務可使用的記憶體則有 7985 MiB。

**Example - 判定 Windows 記憶體總量**  
**wmic** 命令會傳回作業系統辨識出的記憶體總量。  

```
C:\> wmic ComputerSystem get TotalPhysicalMemory
```
執行 Amazon ECS 最佳化 Windows Server AMI 的 `m4.large` 執行個體的輸出範例。  

```
TotalPhysicalMemory
8589524992
```
執行個體的記憶體總量有 8589524992 位元組，轉為任務可使用的記憶體則有 8191 MiB。

## 檢視容器執行個體記憶體
<a name="viewing-memory"></a>

您可以在 Amazon ECS 主控台中檢視容器執行個體註冊的記憶體量 (也可以使用 [DescribeContainerInstances](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeContainerInstances.html) API 操作)。若要為特定執行個體類型的任務提供盡可能多的記憶體，以最大化資源使用率，您可以觀察該容器執行個體有多少可用的記憶體量，然後再向任務指派盡可能多的記憶體。

**檢視容器執行個體記憶體**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中選擇**叢集**，再選取託管容器執行個體的叢集。

1. 選擇**基礎結構**，然後在容器執行個體下選擇容器執行個體。

1. **資源**區段會顯示容器執行個體的已註冊和可使用的記憶體。

   **已註冊**的記憶體值是容器執行個體首次啟動時向 Amazon ECS 註冊的記憶體量，而**可用**記憶體的值則是尚未分配給任務的記憶體量。

# 使用 從遠端管理 Amazon ECS 容器執行個體 AWS Systems Manager
<a name="ec2-run-command"></a>

您可以在 AWS Systems Manager (Systems Manager) 中使用執行命令功能，以安全且遠端的方式管理 Amazon ECS 容器執行個體的組態。Run Command 提供執行常見管理任務的簡單方法，而不需在本機登入執行個體。您可以同時對多個容器執行個體執行命令，跨叢集管理組態變更。Run Command 會報告每個命令的狀態和結果。

以下是您可以使用 Run Command 執行的一些任務類型範例：
+ 安裝或解除安裝套件。
+ 執行安全性更新。
+ 清除 Docker 映像。
+ 停止或啟動服務。
+ 檢視系統資源。
+ 檢視日誌檔。
+ 執行檔案操作。

如需執行命令的詳細資訊，請參閱 *AWS Systems Manager 使用者指南*中的 [AWS Systems Manager 執行命令](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)。

以下是搭配 Amazon ECS 使用 Systems Manager 的先決條件。

1. 您必須授予容器執行個體角色 (**ecsInstanceRole**) 存取 Systems Manager API 的許可。您可以透過將 **AmazonSSMManagedInstanceCore** 指派給 `ecsInstanceRole` 角色來執行此操作。如需有關如何將政策連接至角色的資訊，請參閱 *AWS Identity and Access Management User Guide* 中的 [Update permissions for a role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)

1. 確認 SSM Agent 安裝於您的容器執行個體上。如需詳細資訊，請參閱 [Manually installing and uninstalling SSM Agent on EC2 instances for Linux](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)。

將 Systems Manager 受管政策連接到 `ecsInstanceRole`並確認 AWS Systems Manager 代理程式 (SSM 代理程式） 已安裝在您的容器執行個體之後，您就可以開始使用 Run Command 將命令傳送至您的容器執行個體。如需有關在執行個體上執行命令和 shell 指令碼並檢視結果輸出的詳細資訊，請參閱 *AWS Systems Manager 使用者指南*中的[使用 Systems Manager Run Command 執行命令](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)和[執行命令演練](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command-walkthroughs.html)。

常見的使用案例是透過 Run Command 更新容器執行個體軟體。您可以使用下列參數，遵循 AWS Systems Manager 使用者指南中的程序。


| 參數 | Value | 
| --- | --- | 
|  **命令文件**  | AWS-RunShellScript | 
| 命令 |  <pre>$ yum update -y</pre> | 
| 目標執行個體 | 您的容器執行個體 | 

# 為 Amazon ECS Linux 容器執行個體使用 HTTP Proxy
<a name="http_proxy_config"></a>

您可以設定您的 Amazon ECS 容器執行個體，針對 Amazon ECS 容器代理程式和 Docker 常駐程式使用 HTTP 代理。這在您的容器執行個體沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體進行外部網路存取時會很有用。

若要設定您的 Amazon ECS Linux 容器執行個體以使用 HTTP 代理，請在啟動時 (使用 Amazon EC2 使用者資料) 設定相關檔案中的下列變數。您也可以手動編輯組態檔案，再重新啟動代理程式。

`/etc/ecs/ecs.config` (Amazon Linux 2 與 Amazon Linux AMI)    
`HTTP_PROXY=10.0.0.131:3128`  
將此數值設為要讓 Amazon ECS 代理程式連線到網際網路的 HTTP 代理之主機名稱 (或 IP 地址) 及連接埠號碼。例如，您的容器執行個體可能沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體的外部網路存取。  
`NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock`  
將此值設為 `169.254.169.254,169.254.170.2,/var/run/docker.sock`，篩選 EC2 執行個體中繼資料、任務的 IAM 角色，以及來自代理的 Docker 常駐程式流量。

`/etc/systemd/system/ecs.service.d/http-proxy.conf` (僅限 Amazon Linux 2)    
`Environment="HTTP_PROXY=10.0.0.131:3128/"`  
將此數值設為要讓 `ecs-init` 連線到網際網路的 HTTP 代理之主機名稱 (或 IP 地址) 及連接埠號碼。例如，您的容器執行個體可能沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體的外部網路存取。  
`Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock"`  
將此值設為 `169.254.169.254,169.254.170.2,/var/run/docker.sock`，篩選 EC2 執行個體中繼資料、任務的 IAM 角色，以及來自代理的 Docker 常駐程式流量。

`/etc/init/ecs.override` (僅限 Amazon Linux AMI)    
`env HTTP_PROXY=10.0.0.131:3128`  
將此數值設為要讓 `ecs-init` 連線到網際網路的 HTTP 代理之主機名稱 (或 IP 地址) 及連接埠號碼。例如，您的容器執行個體可能沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體的外部網路存取。  
`env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock`  
將此值設為 `169.254.169.254,169.254.170.2,/var/run/docker.sock`，篩選 EC2 執行個體中繼資料、任務的 IAM 角色，以及來自代理的 Docker 常駐程式流量。

`/etc/systemd/system/docker.service.d/http-proxy.conf` (僅限 Amazon Linux 2)    
`Environment="HTTP_PROXY=http://10.0.0.131:3128"`  
將此數值設為要讓 Docker 常駐程式連線到網際網路的 HTTP 代理之主機名稱 (或 IP 地址) 及連接埠號碼。例如，您的容器執行個體可能沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體的外部網路存取。  
`Environment="NO_PROXY=169.254.169.254,169.254.170.2"`  
將此數值設為 `169.254.169.254,169.254.170.2`，篩選來自代理的 EC2 執行個體中繼資料。

`/etc/sysconfig/docker` (僅限 Amazon Linux AMI 和 Amazon Linux 2)    
`export HTTP_PROXY=http://10.0.0.131:3128`  
將此數值設為要讓 Docker 常駐程式連線到網際網路的 HTTP 代理之主機名稱 (或 IP 地址) 及連接埠號碼。例如，您的容器執行個體可能沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體的外部網路存取。  
`export NO_PROXY=169.254.169.254,169.254.170.2`  
將此數值設為 `169.254.169.254,169.254.170.2`，篩選來自代理的 EC2 執行個體中繼資料。

設定上述檔案中的這些環境變數只會影響 Amazon ECS 容器代理、`ecs-init` 及 Docker 常駐程式。他們不會設定任何其他服務 (例如 **yum**) 使用代理。

如需有關如何設定代理的資訊，請參閱[如何在 Amazon Linux 2 或 Amazon Linux 2023 中，為 Docker 和 Amazon ECS 容器代理程式設定 HTTP Proxy](https://repost.aws/knowledge-center/ecs-http-proxy-docker-linux2)。

# 為 Amazon ECS Auto Scaling 群組設定預先初始化的執行個體
<a name="using-warm-pool"></a>

Amazon ECS 支援 Amazon EC2 Auto Scaling 暖集區。暖集區是一組準備投入使用的預先初始化 Amazon EC2 執行個體。每當應用程式需要水平擴展時，Amazon EC2 Auto Scaling 都會使用暖集區中的預初始化執行個體 (而不是啟動冷執行個體)，讓任何最終初始化程序執行，然後將執行個體投入使用。

若要瞭解有關暖集區以及如何將暖集區新增到 Auto Scaling 群組中的詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》**中的 [Amazon EC2 Auto Scaling 的暖集區](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html)。

當您為 Amazon ECS 的 Auto Scaling 群組建立或更新暖集區時，無法設定將執行個體傳回縮減暖集區的選項 (`ReuseOnScaleIn`)。如需詳細資訊，請參閱 *AWS Command Line Interface 參考*中的 [put-warm-pool](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-warm-pool.html)。

若要將暖集區與 Amazon ECS 叢集配合使用，請在 Amazon EC2 Auto Scaling 群組啟動範本 **User data** (使用者資料) 欄位中將 `ECS_WARM_POOLS_CHECK` 代理程式組態變數設定為 `true`。

下列示範如何在 Amazon EC2 啟動範本的 **User data** (使用者資料) 欄位中指定代理程式組態變數。將 *MyCluster* 取代為您的叢集名稱。

```
#!/bin/bash
cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=MyCluster
ECS_WARM_POOLS_CHECK=true
EOF
```

僅代理程式版本 `1.59.0` 和更新版本支援 `ECS_WARM_POOLS_CHECK` 變數。如需變數的詳細資訊，請參閱 [Amazon ECS 容器代理程式組態](ecs-agent-config.md)。

# 更新 Amazon ECS 容器代理程式
<a name="ecs-agent-update"></a>

有時，您可能需要更新 Amazon ECS 容器代理程式，以取得錯誤修正和新功能。更新 Amazon ECS 容器代理不會中斷容器執行個體上正在執行中的任務或服務。更新代理程式的程序有所不同，這取決於您是否使用 Amazon ECS 最佳化 AMI 來啟動容器執行個體，或是否是在其他作業系統上。

**注意**  
代理更新不適用於 Windows 容器執行個體。我們建議您啟動新的容器執行個體，以更新您 Windows 叢集中的代理版本。

## 檢查 Amazon ECS 容器代理程式版本
<a name="checking_agent_version"></a>

您可以檢查在您的容器執行個體上執行的容器代理版本，以查看是否需要更新它。Amazon ECS 主控台中的容器執行個體檢視可提供代理程式版本。請使用下列步驟來檢查您的代理版本。

------
#### [ Amazon ECS console ]

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選擇註冊外部執行個體所在的區域。

1. 在導覽窗格中選擇 **Clusters** (叢集)，並選取託管外部執行個體的叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。

1. 在 **Container instances** (容器執行個體) 下，注意您容器執行個體的 **Agent version** (代理程式版本) 資料欄。如果容器執行個體不包含最新版的容器代理，主控台會使用訊息和標記提醒您過時的代理版本。

   若您的代理版本已過時，可以使用以下程序更新容器代理程式：
   + 若您的容器執行個體執行的是 Amazon ECS 最佳化 AMI，請參閱 [在 Amazon ECS 最佳化 AMI 上更新 Amazon ECS 容器代理](agent-update-ecs-ami.md)。
   + 若您的容器執行個體執行的不是 Amazon ECS 最佳化 AMI，請參閱 [手動更新 Amazon ECS 容器代理程式 (適用於非 Amazon ECS 最佳化 AMI)](manually_update_agent.md)。
**重要**  
若要在您的 Amazon ECS 最佳化 AMI 上，更新 v1.0.0 版本之前的 Amazon ECS 代理程式版本，我們建議您終止目前的容器執行個體，並使用最近的 AMI 版本啟動新的執行個體。任何使用預覽版本的容器執行個體都應進行淘汰，並使用最近的 AMI 取代。如需詳細資訊，請參閱[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。

------
#### [ Amazon ECS container agent introspection API  ]

您也可以使用 Amazon ECS 容器代理程式從容器執行個體自我檢查 API 版本。如需詳細資訊，請參閱[Amazon ECS 容器自我檢查](ecs-agent-introspection.md)。

**若要使用自我檢查 API 檢查您的 Amazon ECS 容器代理是否執行最新版本**

1. 透過 SSH 登入您的容器執行個體。

1. 查詢自我檢查 API。

   ```
   [ec2-user ~]$ curl -s 127.0.0.1:51678/v1/metadata | python3 -mjson.tool
   ```
**注意**  
自我檢查 API 在 Amazon ECS 容器代理版本 v1.0.0 中新增 `Version` 資訊。若在查詢自我檢查 API 時沒有看見 `Version`，或是您的代理中甚至沒有自我檢查 API，則您執行的版本便是 v0.0.3 及更早版本。您應更新您的版本。

------

# 在 Amazon ECS 最佳化 AMI 上更新 Amazon ECS 容器代理
<a name="agent-update-ecs-ami"></a>

若您使用的是 Amazon ECS 最佳化 AMI，您有幾個選項可取得最新版本的 Amazon ECS 容器代理程式 (以下顯示的順序為建議順序)：
+ 終止容器執行個體，並啟動最新版本的 Amazon ECS 最佳化 Amazon Linux 2 AMI (以手動方式或使用最新 AMI 更新您的 Auto Scaling 啟動組態)。這可提供全新的容器執行個體，以及最新已測試和驗證的 Amazon Linux、Docker、`ecs-init` 和 Amazon ECS 容器代理程式的版本。如需詳細資訊，請參閱[Amazon ECS 最佳化 Linux AMI](ecs-optimized_AMI.md)。
+ 使用 SSH 連線到執行個體，將 `ecs-init` 套裝服務 (及其相依性) 更新到最新版本。此操作可提供 Amazon Linux 儲存庫中目前經過測試及驗證的 Docker 和 `ecs-init` 版本，以及最新版 Amazon ECS 容器代理程式。如需詳細資訊，請參閱[若要更新 Amazon ECS 最佳化 AMI 上的 `ecs-init` 套件](#procedure_update_ecs-init)。
+ 透過主控台或使用 AWS CLI AWS SDKs，使用 `UpdateContainerAgent` API 操作更新容器代理程式。如需詳細資訊，請參閱[使用 `UpdateContainerAgent` API 操作更新 Amazon ECS 容器代理程式](#agent-update-api)。

**注意**  
代理更新不適用於 Windows 容器執行個體。我們建議您啟動新的容器執行個體，以更新您 Windows 叢集中的代理版本。<a name="procedure_update_ecs-init"></a>

**若要更新 Amazon ECS 最佳化 AMI 上的 `ecs-init` 套件**

1. 透過 SSH 登入您的容器執行個體。

1. 使用以下命令更新 `ecs-init` 套裝服務。

   ```
   sudo yum update -y ecs-init
   ```
**注意**  
`ecs-init` 套件和 Amazon ECS 容器代理程式會立即更新。但是，直到 Docker 常駐程式重新啟動前，都不會載入較新版本的 Docker。將執行個體重新開機，或在執行個體上執行下列命令，以重新啟動：  
Amazon ECS 最佳化 Amazon Linux 2 AMI：  

     ```
     sudo systemctl restart docker
     ```
Amazon ECS 最佳化 Amazon Linux AMI：  

     ```
     sudo service docker restart && sudo start ecs
     ```

## 使用 `UpdateContainerAgent` API 操作更新 Amazon ECS 容器代理程式
<a name="agent-update-api"></a>

**重要**  
僅在 Amazon ECS 最佳化 AMI 的 Linux 變體上支援 `UpdateContainerAgent` API，但 Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 除外。對於使用 Amazon ECS 最佳化 Amazon Linux 2 (arm64) AMI 的容器執行個體，請更新 `ecs-init` 套件以更新代理程式。針對在其他作業系統上執行的容器執行個體，請參閱「[手動更新 Amazon ECS 容器代理程式 (適用於非 Amazon ECS 最佳化 AMI)](manually_update_agent.md)」。如果您正在使用 Windows 容器執行個體，我們建議您啟動新的容器執行個體，以更新您 Windows 叢集中的代理程式版本。

當您透過主控台或使用 AWS CLI AWS SDKs 請求代理程式更新時，`UpdateContainerAgent`API 程序就會開始。Amazon ECS 會比對您目前的代理程式版本與最新可用的代理程式版本，判斷是否可執行更新。若無法取得更新 (例如若代理已在執行最近的版本)，便會傳回 `NoUpdateAvailableException`。

上圖顯示更新程序中的階段如下：

`PENDING`  
有可用的代理更新，並已啟動更新程序。

`STAGING`  
代理已開始下載代理更新。若代理無法下載更新，或更新的內容不正確或已損毀，則代理會傳送失敗的通知，且更新的狀態會轉換成 `FAILED` 狀態。

`STAGED`  
代理下載已完成並已驗證代理內容。

`UPDATING`  
`ecs-init` 服務已重新啟動，並使用最新版本的代理。若代理程式因為某些原因無法重新啟動，則更新會轉換為 `FAILED` 狀態；否則，代理程式會通知 Amazon ECS 更新已完成。

**注意**  
代理更新不適用於 Windows 容器執行個體。我們建議您啟動新的容器執行個體，以更新您 Windows 叢集中的代理版本。

**若要在主控台的 Amazon ECS 最佳化 AMI 上更新 Amazon ECS 容器代理程式**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選擇註冊外部執行個體所在的區域。

1. 在導覽窗格中，選擇 **Clusters** (叢集)，然後選取叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。

1. 在**容器執行個體**下，選取要更新的執行個體，然後選擇**動作**、**更新代理程式**。

# 手動更新 Amazon ECS 容器代理程式 (適用於非 Amazon ECS 最佳化 AMI)
<a name="manually_update_agent"></a>

有時，您可能需要更新 Amazon ECS 容器代理程式，以取得錯誤修正和新功能。更新 Amazon ECS 容器代理不會中斷容器執行個體上正在執行中的任務或服務。
**注意**  
代理更新不適用於 Windows 容器執行個體。我們建議您啟動新的容器執行個體，以更新您 Windows 叢集中的代理版本。

1. 透過 SSH 登入您的容器執行個體。

1. 檢查以查看您的代理是否是使用 `ECS_DATADIR` 環境變數儲存其狀態。

   ```
   ubuntu:~$ docker inspect ecs-agent | grep ECS_DATADIR
   ```

   輸出：

   ```
   "ECS_DATADIR=/data",
   ```
**重要**  
若先前的命令並未傳回 `ECS_DATADIR` 環境變數，您必須停止任何在此容器執行個體上執行的任務，才能更新您的代理。較新的代理會使用 `ECS_DATADIR` 環境變數儲存其狀態，讓您可以在任務執行中時更新它們，而不會有任何問題。

1. 停用 Amazon ECS 容器代理程式。

   ```
   ubuntu:~$ docker stop ecs-agent
   ```

1. 刪除代理容器。

   ```
   ubuntu:~$ docker rm ecs-agent
   ```

1. 確認 `/etc/ecs` 目錄和 Amazon ECS 容器代理程式組態檔案存在於 `/etc/ecs/ecs.config`。

   ```
   ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
   ```

1. 編輯 `/etc/ecs/ecs.config` 檔案，並確保其至少包含以下變數宣告。若您不希望您的容器執行個體使用預設叢集註冊，請將叢集名稱指定為 `ECS_CLUSTER` 的值。

   ```
   ECS_DATADIR=/data
   ECS_ENABLE_TASK_IAM_ROLE=true
   ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
   ECS_LOGFILE=/log/ecs-agent.log
   ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"]
   ECS_LOGLEVEL=info
   ECS_CLUSTER=default
   ```

   如需這些和其他代理執行時間選項的詳細資訊，請參閱「[Amazon ECS 容器代理程式組態](ecs-agent-config.md)」。
**注意**  
您可以選擇性地將您的代理程式環境變數存放在 Amazon S3 中 (可在啟動時使用 Amazon EC2 使用者資料將其下載到您的容器執行個體)。針對敏感性資訊 (例如私有存放庫的身分驗證登入資料)，此為建議選項。如需詳細資訊，請參閱[將 Amazon ECS 容器執行個體組態儲存於 Amazon S3 中](ecs-config-s3.md)及[在 Amazon ECS 中使用非AWS 容器映像](private-auth.md)。

1. 從 Amazon Elastic Container Registry Public 取出最新的 Amazon ECS 容器代理程式映像。

   ```
   ubuntu:~$ docker pull public.ecr.aws/ecs/amazon-ecs-agent:latest
   ```

   輸出：

   ```
   Pulling repository amazon/amazon-ecs-agent
   a5a56a5e13dc: Download complete
   511136ea3c5a: Download complete
   9950b5d678a1: Download complete
   c48ddcf21b63: Download complete
   Status: Image is up to date for amazon/amazon-ecs-agent:latest
   ```

1. 在您的容器執行個體上執行最新的 Amazon ECS 容器代理程式。
**注意**  
使用 Docker 重新啟動政策或處理序管理員 (例如 **upstart** 或 **systemd**) 將容器代理程式做為服務或常駐程式處理，並確保在結束後重新啟動它。因此 Amazon ECS 最佳化 AMI 會使用 `ecs-init` RPM，您可以在 GitHub 上檢視[此 RPM 的來源程式碼](https://github.com/aws/amazon-ecs-init)。

   以下代理程式執行命令範例分成獨立的各行來顯示每個選項。如需這些和其他代理執行時間選項的詳細資訊，請參閱「[Amazon ECS 容器代理程式組態](ecs-agent-config.md)」。
**重要**  
針對啟用 SELinux 的作業系統，需要在您的 **docker run** 命令中包含 `--privileged` 選項。此外，針對啟用 SELinux 的容器執行個體，我們建議您為 `/log` 和 `/data` 磁碟區掛載新增 `:Z` 選項。但是，這些磁碟區的主機掛載必須在您執行命令前存在，否則您會接收到 `no such file or directory` 錯誤。若您在啟用 SELinux 的容器執行個體上執行 Amazon ECS 代理程式時遭遇困難，請採取以下動作：  
在您的容器執行個體上建立主機磁碟區掛載點。  

     ```
     ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
     ```
為以下 **docker run** 命令新增 `--privileged` 選項。
為以下 **docker run** 命令的 `/log` 和 `/data` 容器磁碟區掛載附加 `:Z` 選項 (例如，`--volume=/var/log/ecs/:/log:Z`)。

   ```
   ubuntu:~$ sudo docker run --name ecs-agent \
   --detach=true \
   --restart=on-failure:10 \
   --volume=/var/run:/var/run \
   --volume=/var/log/ecs/:/log \
   --volume=/var/lib/ecs/data:/data \
   --volume=/etc/ecs:/etc/ecs \
   --volume=/etc/ecs:/etc/ecs/pki \
   --net=host \
   --env-file=/etc/ecs/ecs.config \
   amazon/amazon-ecs-agent:latest
   ```
**注意**  
若您接收到 `Error response from daemon: Cannot start container` 訊息，您可以使用 **sudo docker rm ecs-agent** 命令刪除失敗的容器，並再度嘗試執行代理程式。

# Amazon ECS 最佳化 Windows AMI
<a name="ecs-optimized_windows_AMI"></a>

Amazon ECS 最佳化 AMI 已預先設定好執行 Amazon ECS 工作負載所需的必要元件。雖然您可以建立自己的容器執行個體 AMI，以符合在 Amazon ECS 上執行容器化工作負載所需的基本規格，但 Amazon ECS 最佳化 AMIs 是由 AWS 工程師在 Amazon ECS 上預先設定和測試。這是讓您快速上手並在 AWS 上執行容器最簡單的方法。

可以透過程式設計方式擷取每個變體的 Amazon ECS 最佳化 AMI 中繼資料，包括 AMI 名稱、Amazon ECS 容器代理程式版本，以及包含 Docker 版本的 Amazon ECS 執行時間版本。如需詳細資訊，請參閱[擷取 Amazon ECS 最佳化 Windows AMI 中繼資料](retrieve-ecs-optimized_windows_AMI.md)。

**重要**  
 2022 年 8 月之後生產的所有 ECS 最佳化 AMI 變體，將從 Docker EE (Mirantis) 遷移至 Docker CE (Moby 專案)。  
為確保客戶預設擁有最新的安全更新，Amazon ECS 至少維護最後三個 Windows Amazon ECS 最佳化 AMI。在發佈新的 Windows Amazon ECS 最佳化 AMI 之後，Amazon ECS 使舊的 Windows Amazon ECS 最佳化 AMI 變為私有。如果有您需要存取的私有 AMI，請向 Cloud Support 提出票證，從而通知我們。

## Amazon ECS 最佳化 AMI 變體
<a name="ecs-optimized-ami-variants"></a>

下列 Amazon ECS 最佳化 AMI 的 Windows Server 變體適用於您的 Amazon EC2 執行個體。

**重要**  
8 月之後生產的所有 ECS 最佳化 AMI 變體，將從 Docker EE (Mirantis) 遷移至 Docker CE (Moby 專案)。
+ **Amazon ECS 最佳化 Windows Server 2025 Full AMI** 
+ **Amazon ECS 最佳化 Windows Server 2025 Core AMI** 
+ **Amazon ECS 最佳化 Windows Server 2022 Full AMI** 
+ **Amazon ECS 最佳化 Windows Server 2022 Core AMI** 
+ **Amazon ECS 最佳化 Windows Server 2019 Full AMI** 
+ **Amazon ECS 最佳化 Windows Server 2019 Core AMI** 
+ **Amazon ECS 最佳化 Windows Server 2016 Full AMI**

**重要**  
Windows Server 2016 不支援最新版本的 Docker，例如 25.x.x。因此，Windows Server 2016 Full AMI 不會收到 Docker 執行時期的安全性修補程式或錯誤修補程式。建議遷移至下列任一 Windows 平台：  
Windows Server 2022 Full
Windows Server 2022 Core
Windows Server 2019 Full
Windows Server 2019 Core

在 2022 年 8 月 9 日，Amazon ECS 最佳化的 Windows Server 20H2 Core AMI 已屆支援終止日期。不再發佈此 AMI 的新版本。如需詳細資訊，請參閱 [Windows Server 發行版本資訊](https://learn.microsoft.com/en-us/windows-server/get-started/windows-server-release-info)。

Windows Server 2025、Windows Server 2022、Windows Server 2019 和 Windows Server 2016 是長期維護通道 (LTSC) 的發行版本。Windows Server 20H2 是半年通道 (SAC) 的發行版本。如需詳細資訊，請參閱 [Windows Server 發行版本資訊](https://learn.microsoft.com/en-us/windows-server/get-started/windows-server-release-info)。

### 考量事項
<a name="windows_caveats"></a>

以下是一些您應該知道的 Amazon EC2 Windows 容器和 Amazon ECS 有關事項。
+ Windows 容器無法在 Linux 容器執行個體上執行，反之亦然。為更合理放置 Windows 和 Linux 任務，將 Windows 和 Linux 容器執行個體放置在不同的叢集中，而且只在 Windows 叢集中放置 Windows 任務。您可以設定下列置放限制：`memberOf(ecs.os-type=='windows')`，以確保 Windows 任務定義只放置在 Windows 執行個體。
+ Windows 容器支援使用 EC2 和 Fargate 的任務。
+ Windows 容器和容器執行個體無法支援所有可供 Linux 容器和容器執行個體使用的任務定義參數。有些參數完全不予以支援，有些參數在 Windows 的行為表現和在 Linux 上不同。如需詳細資訊，請參閱[EC2 Windows 執行個體的 Amazon ECS 任務定義差異](windows_task_definitions.md)。
+ 針對任務功能的 IAM 角色，您需要設定您的 Windows 容器執行個體，在啟動時允許該功能。您的容器必須在它們使用該功能時執行部分提供的 PowerShell 程式碼。如需詳細資訊，請參閱[Amazon EC2 Windows 執行個體的額外組態](task-iam-roles.md#windows_task_IAM_roles)。
+ 任務的 IAM 角色功能會使用登入資料代理將登入資料提供給容器。此登入資料代理佔用了容器執行個體的連接埠 80，所以如果您使用任務的 IAM 角色，連接埠 80 就不提供任務使用。對於 Web 服務容器，您可以使用 Application Load Balancer 和動態連接埠映射，向您的容器提供標準的 HTTP 連接埠 80 連線。如需詳細資訊，請參閱[使用負載平衡分佈 Amazon ECS 服務流量](service-load-balancing.md)。
+ Windows 伺服器 Docker 映像很大 (9 GiB)。所以您的 Windows 容器執行個體需要比 Linux 容器執行個體還多的儲存空間。
+ 若要在 Windows 伺服器上執行 Windows 容器，容器的基本映像作業系統版本必須與主機的版本相符。如需詳細資訊，請參閱 Microsoft 文件網站上的 [Windows 容器版本相容性](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-11)。如果您的叢集執行多個 Windows 版本，您可以使用置放條件限制：`memberOf(attribute:ecs.os-family == WINDOWS_SERVER_<OS_Release>_<FULL or CORE>)`，確保將任務置放在執行相同版本的 EC2 執行個體上。如需詳細資訊，請參閱[擷取 Amazon ECS 最佳化 Windows AMI 中繼資料](retrieve-ecs-optimized_windows_AMI.md)。

# 擷取 Amazon ECS 最佳化 Windows AMI 中繼資料
<a name="retrieve-ecs-optimized_windows_AMI"></a>

透過查詢 Systems Manager 參數存放區 API，可以程式設計方式擷取 Amazon ECS 最佳化 AMI 的每個變體的 AMI ID、映像名稱、作業系統、容器代理程式版本以及執行時間版本。如需有關 Systems Manager 參數存放區 API 的詳細資訊，請參閱 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) 和 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html)。

**注意**  
您的管理使用者必須擁有以下 IAM 許可，才能擷取 Amazon ECS 最佳化 AMI 中繼資料。已將這些權限新增至 `AmazonECS_FullAccess` IAM 政策。  
ssm:GetParameters
ssm:GetParameter
ssm:GetParametersByPath

## Systems Manager 參數存放區參數格式。
<a name="ecs-optimized-ami-parameter-format"></a>

**注意**  
下列 Systems Manager 參數存放區 API 參數已淘汰，不應該用來擷取最新的 Windows AMI：  
`/aws/service/ecs/optimized-ami/windows_server/2016/english/full/recommended/image_id `
`/aws/service/ecs/optimized-ami/windows_server/2019/english/full/recommended/image_id`

以下是每個 Amazon ECS 最佳化 AMI 變體的參數名稱格式。
+ Windows Server 2025 完整 AMI 中繼資料：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2025-English-Full-ECS_Optimized
  ```
+ Windows Server 2025 Core AMI 中繼資料：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2025-English-Core-ECS_Optimized
  ```
+ Windows Server 2022 Full AMI 中繼資料：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2022-English-Full-ECS_Optimized
  ```
+ Windows Server 2022 Core AMI 中繼資料：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2022-English-Core-ECS_Optimized
  ```
+ Windows Server 2019 Full AMI 中繼資料：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized
  ```
+ Windows Server 2019 Core AMI 中繼資料：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-ECS_Optimized
  ```
+ Windows Server 2016 Full AMI 中繼資料：

  ```
  /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-ECS_Optimized
  ```

下列參數名稱格式擷取最新穩定 Windows Server 2019 Full AMI 的中繼資料。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized
```

以下是傳回參數值的 JSON 物件範例。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized",
            "Type": "String",
            "Value": "{\"image_name\":\"Windows_Server-2019-English-Full-ECS_Optimized-2023.06.13\",\"image_id\":\"ami-0debc1fb48e4aee16\",\"ecs_runtime_version\":\"Docker (CE) version 20.10.21\",\"ecs_agent_version\":\"1.72.0\"}",
            "Version": 58,
            "LastModifiedDate": "2023-06-22T19:37:37.841000-04:00",
            "ARN": "arn:aws:ssm:us-east-1::parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}
```

輸出中的每個欄位可做為子參數查詢。透過將子參數名稱附加至所選 AMI 路徑來建構子參數的參數路徑。下列子參數可供使用：
+ `schema_version`
+ `image_id`
+ `image_name`
+ `os`
+ `ecs_agent_version`
+ `ecs_runtime_version`

## 範例
<a name="ecs-optimized-ami-windows-parameter-examples"></a>

下列範例顯示您可擷取每個 Amazon ECS 最佳化 AMI 變體中繼資料的方法。

### 擷取最新的穩定 Amazon ECS 最佳化 AMI 的中繼資料
<a name="ecs-optimized-ami-windows-parameter-examples-1"></a>

您可以使用 AWS CLI 搭配下列 AWS CLI 命令，擷取最新的穩定 Amazon ECS 最佳化 AMI。
+ **對於 Amazon ECS 最佳化 Windows Server 2025 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Full-ECS_Optimized --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Windows Server 2025 Core AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Core-ECS_Optimized --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Windows Server 2022 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Full-ECS_Optimized --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Windows Server 2022 Core AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Core-ECS_Optimized --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Windows Server 2019 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Windows Server 2019 Core AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-ECS_Optimized --region us-east-1
  ```
+ **對於 Amazon ECS 最佳化 Windows Server 2016 Full AMI：**

  ```
  aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-ECS_Optimized --region us-east-1
  ```

### 在 CloudFormation 範本中使用最新建議的 Amazon ECS 最佳化 AMI
<a name="ecs-optimized-ami-windows-parameter-examples-5"></a>

透過參考 Systems Manager 參數存放區名稱，可以在 CloudFormation 範本中參考最新建議的 Amazon ECS 最佳化 AMI。

```
Parameters:
  LatestECSOptimizedAMI:
    Description: AMI ID
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized/image_id
```

# Amazon ECS 最佳化 AMI 版本
<a name="ecs-windows-ami-versions"></a>

檢視目前和舊版的 Amazon ECS 最佳化 AMI，及其對應的 Amazon ECS 容器代理程式、Docker 和 `ecs-init` 套件版本。

可透過程式設計方式擷取每個變體的 Amazon ECS 最佳化 AMI 中繼資料 (包括 AMI ID)。如需詳細資訊，請參閱[擷取 Amazon ECS 最佳化 Windows AMI 中繼資料](retrieve-ecs-optimized_windows_AMI.md)。

以下標籤顯示 Windows Amazon ECS 最佳化 AMI 版本清單。如需在 CloudFormation 範本中參考 Systems Manager 參數存放區參數的詳細資訊，請參閱 [在 CloudFormation 範本中使用最新建議的 Amazon ECS 最佳化 AMI](retrieve-ecs-optimized_AMI.md#ecs-optimized-ami-parameter-examples-5)。

**重要**  
為確保客戶預設擁有最新的安全更新，Amazon ECS 至少維護最後三個 Windows Amazon ECS 最佳化 AMI。在發佈新的 Windows Amazon ECS 最佳化 AMI 之後，Amazon ECS 使舊的 Windows Amazon ECS 最佳化 AMI 變為私有。如果有您需要存取的私有 AMI，請向 Cloud Support 提出票證，從而通知我們。  
Windows Server 2016 不支援最新版本的 Docker，例如 25.x.x。因此，Windows Server 2016 Full AMI 不會收到 Docker 執行時期的安全性修補程式或錯誤修補程式。建議遷移至下列任一 Windows 平台：  
Windows Server 2022 Full
Windows Server 2022 Core
Windows Server 2019 Full
Windows Server 2019 Core

**注意**  
繼 2025 年 8 月 AMI 版本後，gMSA 外掛程式記錄已從檔案型記錄 `(C:\ProgramData\Amazon\gmsa)` 遷移至 Windows Event logging 。公開版日誌收集器指令碼會收集所有 gMSA 日誌。如需詳細資訊，請參閱[使用 Amazon ECS 日誌收集器收集容器日誌](ecs-logs-collector.md)。

------
#### [ Windows Server 2025 Full AMI versions ]

下表列出 Amazon ECS 最佳化 Windows Server 2025 Full AMI 的目前和先前版本，以及其 Amazon ECS 容器代理程式和 Docker 的對應版本。


|  Amazon ECS 最佳化 Windows Server 2025 Full AMI  |  Amazon ECS 容器代理程式版本  |  Docker 版本  |  Visibility  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2026.03.13**  |  `1.102.0`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2026.02.13**  |  `1.101.3`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2026.01.16**  |  `1.101.2`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2025-English-Full-ECS\$1Optimized-2025.12.13**  |  `1.101.0`  |  `25.0.6 (Docker CE)`  |  公有  | 

使用下列 AWS CLI 命令擷取目前的 Amazon ECS 最佳化 Windows Server 2025 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Full-ECS_Optimized
```

------
#### [ Windows Server 2025 Core AMI versions ]

下表列出 Amazon ECS 最佳化 Windows Server 2025 Core AMI 的目前和先前版本，以及其 Amazon ECS 容器代理程式和 Docker 的對應版本。


|  Amazon ECS 最佳化 Windows Server 2025 Core AMI  |  Amazon ECS 容器代理程式版本  |  Docker 版本  |  Visibility  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2026.03.13**  |  `1.102.0`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2026.02.13**  |  `1.101.3`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2026.01.16**  |  `1.101.2`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2025-English-Core-ECS\$1Optimized-2025.12.13**  |  `1.101.0`  |  `25.0.6 (Docker CE)`  |  公有  | 

使用下列 AWS CLI 命令來擷取目前的 Amazon ECS 最佳化 Windows Server 2025 Core AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2025-English-Core-ECS_Optimized
```

------
#### [ Windows Server 2022 Full AMI versions ]

下表列出目前和舊版的 Amazon ECS 最佳化 Windows Server 2022 Full AMI 的完整清單及其對應的 Amazon ECS 容器代理程式和 Docker 版本。


|  Amazon ECS 最佳化 Windows Server 2022 Full AMI  |  Amazon ECS 容器代理程式版本  |  Docker 版本  |  Visibility  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2022-English-Full-ECS\$1Optimized-2026.03.13**  |  `1.102.0`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2022-English-Full-ECS\$1Optimized-2026.02.13**  |  `1.101.3`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2022-English-Full-ECS\$1Optimized-2026.01.16**  |  `1.101.2`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2022-English-Full-ECS\$1Optimized-2025.12.13**  |  `1.101.0`  |  `25.0.6 (Docker CE)`  |  公有  | 

使用下列 AWS CLI 命令擷取目前的 Amazon ECS 最佳化 Windows Server 2022 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Full-ECS_Optimized
```

------
#### [ Windows Server 2022 Core AMI versions ]

下表列出目前和舊版的 Amazon ECS 最佳化 Windows Server 2022 Core AMI 的完整清單及其對應的 Amazon ECS 容器代理程式和 Docker 版本。


|  Amazon ECS 最佳化 Windows Server 2022 Core AMI  |  Amazon ECS 容器代理程式版本  |  Docker 版本  |  Visibility  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2022-English-Core-ECS\$1Optimized-2026.03.13**  |  `1.102.0`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2022-English-Core-ECS\$1Optimized-2026.02.13**  |  `1.101.3`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2022-English-Core-ECS\$1Optimized-2026.01.16**  |  `1.101.2`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2022-English-Core-ECS\$1Optimized-2025.12.13**  |  `1.101.0`  |  `25.0.6 (Docker CE)`  |  公有  | 

使用以下 AWS CLI 命令擷取目前的 Amazon ECS 最佳化 Windows Server 2022 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2022-English-Core-ECS_Optimized
```

------
#### [ Windows Server 2019 Full AMI versions ]

下表列出目前和舊版的 Amazon ECS 最佳化 Windows Server 2019 Full AMI 的完整清單及其對應的 Amazon ECS 容器代理程式和 Docker 版本。


|  Amazon ECS 最佳化 Windows Server 2019 Full AMI  |  Amazon ECS 容器代理程式版本  |  Docker 版本  |  Visibility  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2019-English-Full-ECS\$1Optimized-2026.03.13**  |  `1.102.0`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2019-English-Full-ECS\$1Optimized-2026.02.13**  |  `1.101.3`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2019-English-Full-ECS\$1Optimized-2026.01.16**  |  `1.101.2`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2019-English-Full-ECS\$1Optimized-2025.12.13**  |  `1.101.0`  |  `25.0.6 (Docker CE)`  |  公有  | 

使用下列 AWS CLI 命令來擷取目前的 Amazon ECS 最佳化 Windows Server 2019 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-ECS_Optimized
```

------
#### [ Windows Server 2019 Core AMI versions ]

下表列出目前和舊版的 Amazon ECS 最佳化 Windows Server 2019 Core AMI 的完整清單及其對應的 Amazon ECS 容器代理程式和 Docker 版本。


|  Amazon ECS 最佳化 Windows Server 2019 Core AMI  |  Amazon ECS 容器代理程式版本  |  Docker 版本  |  Visibility  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2019-English-Core-ECS\$1Optimized-2026.03.13**  |  `1.102.0`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2019-English-Core-ECS\$1Optimized-2026.02.13**  |  `1.101.3`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2019-English-Core-ECS\$1Optimized-2026.01.16**  |  `1.101.2`  |  `25.0.6 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2019-English-Core-ECS\$1Optimized-2025.12.13**  |  `1.101.0`  |  `25.0.6 (Docker CE)`  |  公有  | 

使用下列 AWS CLI 命令來擷取目前的 Amazon ECS 最佳化 Windows Server 2019 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-ECS_Optimized
```

------
#### [ Windows Server 2016 Full AMI versions ]

**重要**  
Windows Server 2016 不支援最新版本的 Docker，例如 25.x.x。因此，Windows Server 2016 Full AMI 不會收到 Docker 執行時期的安全性修補程式或錯誤修補程式。建議遷移至下列任一 Windows 平台：  
Windows Server 2022 Full
Windows Server 2022 Core
Windows Server 2019 Full
Windows Server 2019 Core

下表列出目前和舊版的 Amazon ECS 最佳化 Windows Server 2016 Full AMI 的完整清單及其對應的 Amazon ECS 容器代理程式和 Docker 版本。


|  Amazon ECS 最佳化 Windows Server 2016 Full AMI  |  Amazon ECS 容器代理程式版本  |  Docker 版本  |  Visibility  | 
| --- | --- | --- | --- | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2026.03.13**  |  `1.102.0`  |  `20.10.23 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2026.02.13**  |  `1.101.3`  |  `20.10.23 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2026.01.16**  |  `1.101.2`  |  `20.10.23 (Docker CE)`  |  公有  | 
|  **Windows\$1Server-2016-English-Full-ECS\$1Optimized-2025.12.13**  |  `1.101.0`  |  `20.10.23 (Docker CE)`  |  公有  | 

使用下列 AWS CLI Amazon ECS 最佳化 Windows Server 2016 Full AMI。

```
aws ssm get-parameters --names /aws/service/ami-windows-latest/Windows_Server-2016-English-Full-ECS_Optimized
```

------

# 建立自己的 Amazon ECS 最佳化 Windows AMI
<a name="windows-custom-ami"></a>

使用 EC2 Image Builder 自行建立自訂 Amazon ECS 最佳化 Windows AMI。這使得在 Amazon ECS 上使用您自己的授權 Windows AMI 變得更簡單。Amazon ECS 提供受管的 Image Builder 元件，由該元件提供執行 Windows 執行個體所需的系統組態，以託管您的容器。每個 Amazon ECS 受管元件包含特定的容器代理程式和 Docker 版本。您可以自訂映像以使用最新的 Amazon ECS 受管元件，或者如果需要較舊的容器代理程式或 Docker 版本，您可以指定不同的元件。

如需使用 EC2 Image Builder 的完整逐步解說，請參閱 *EC2 Image Builder 使用者指南*中的 [EC2 Image Builder 入門](https://docs.aws.amazon.com/imagebuilder/latest/userguide/set-up-ib-env.html#image-builder-accessing-prereq)。

在使用 EC2 Image Builder 建立您自己的 Amazon ECS 最佳化 Windows AMI 時，您將建立映像配方。您的映像配方必須符合以下要求：
+ **來源映像**應以 Windows Server 2019 Core、Windows Server 2019 Full、Windows Server 2022 Core 或 Windows Server 2022 Full 為基礎。任何其他 Windows 作業系統不受支援，而且可能與元件不相容。
+ 指定**建置元件**時需要 `ecs-optimized-ami-windows` 元件。為確保映像包含最新的安全性更新，建議使用 `update-windows` 元件。

  若要指定不同的元件版本，展開 **Versioning options** (版本控制選項) 選單，然後指定您要使用的元件版本。如需詳細資訊，請參閱[列出 `ecs-optimized-ami-windows` 元件版本](#windows-component-list)。

## 列出 `ecs-optimized-ami-windows` 元件版本
<a name="windows-component-list"></a>

在建立 EC2 Image Builder 配方並指定 `ecs-optimized-ami-windows` 元件時，您可以使用預設選項，或者您也可以指定特定的元件版本。要判定可用的元件版本，以及元件所包含的 Amazon ECS 容器代理程式和 Docker 版本，您可以使用 AWS 管理主控台。

**列出可用的 `ecs-optimized-ami-windows` 元件版本**

1. 開啟 EC2 Image Builder 主控台，位於 [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/)。

1. 在導覽列上選取您在哪個區域建立您的映像。

1. 在導覽窗格的 **Saved configurations** (已儲存組態) 選單的下方，選擇 **Components** (元件)。

1. 在 **Components** (元件) 頁面的搜尋列鍵入 `ecs-optimized-ami-windows`，然後向下拉資格選單並選取 **Quick start (Amazon-managed)** (Quick start (Amazon 受管))。

1. 使用 **Description** (描述) 欄來判定元件版本，以及您的映像所需的 Amazon ECS 容器代理程序和 Docker 版本。

# Amazon ECS Windows 容器執行個體管理
<a name="manage-windows"></a>

在將 EC2 執行個體用於 Amazon ECS 工作負載時，您必須負責維護執行個體。

代理更新不適用於 Windows 容器執行個體。我們建議您啟動新的容器執行個體，以更新您 Windows 叢集中的代理版本。

**Topics**
+ [啟動容器執行個體](launch_window-container_instance.md)
+ [引導容器執行個體](bootstrap_windows_container_instance.md)
+ [為 Windows 容器執行個體使用 HTTP Proxy](http_proxy_config-windows.md)
+ [設定容器執行個體接收 Spot 執行個體通知](windows-spot-instance-draining-container.md)

# 啟動 Amazon ECS Windows 容器執行個體
<a name="launch_window-container_instance"></a>

您的 Amazon ECS 容器執行個體是使用 Amazon EC2 主控台建立的。開始之前，請務必先完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟。

如需有關啟動精靈的詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Launch an instance using the new launch instance wizard](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-launch-instance-wizard.html)。

您可以使用新的 Amazon EC2 精靈啟動執行個體。您可以使用以下參數列表，並將參數保留不作為預設列出。下列指示會引導您完成每個參數群組。

## 程序
<a name="liw-initiate-instance-launch"></a>

開始之前，請完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟。

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在畫面頂端的導覽列中，會顯示目前的 AWS 區域 （例如美國東部 （俄亥俄）)。選取要在其中啟動執行個體的區域。這項選擇非常重要，因為有些 Amazon EC2 資源可在不同區域間共享，其他則無法。

1. 從 Amazon EC2 主控台儀表板選擇 **Launch Instance (啟動執行個體)**。

## 名稱和標籤
<a name="liw-name-and-tags"></a>

執行個體名稱是一個標籤，其中鍵是 **Name** (名稱)，而值是您指定的名稱。您可以標記執行個體、磁碟區和彈性圖形。對於 Spot 執行個體，您只能標記 Spot 執行個體請求。

指定執行個體名稱和其他標籤是選用的。
+ 對於 **Name** (名稱)，輸入執行個體的描述性名稱。如果您未指定名稱，則可以透過其 ID 來標識執行個體，該 ID 將在您啟動執行個體時自動產生。
+ 若要新增其他標籤，請選擇 **Add additional tags** (新增其他標籤)。選取 **Add tag** (新增標籤)，然後輸入鍵和值，然後選取要標記的資源類型。為每個要新增的其他標籤重新選擇 **Add tag** (新增標籤)。

## 應用程式和作業系統映像 (Amazon Machine Image)
<a name="liw-ami"></a>

Amazon Machine Image (AMI) 包含建立執行個體所需的資訊。例如，AMI 可能包含作為 Web 伺服器所必需的軟體，例如 Apache 和您的網站。

如需最新的 Amazon ECS 最佳化 AMI 及其值，請參閱《[Windows Amazon ECS 最佳化 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_windows_AMI.html)》。

使用**搜尋**列來尋找由 發佈的適當 Amazon ECS 最佳化 AMI AWS。

1. 根據您的要求，在 **Search** (搜尋) 列中輸入以下其中一個 AMI，並按下 **Enter**。
   + Windows\$1Server-2022-English-Full-ECS\$1Optimized
   + Windows\$1Server-2022-English-Core-ECS\$1Optimized
   + Windows\$1Server-2019-English-Full-ECS\$1Optimized
   + Windows\$1Server-2019-English-Core-ECS\$1Optimized
   + Windows\$1Server-2016-English-Full-ECS\$1Optimized

1. 在 **Choose an Amazon Machine Image (AMI)** (選擇 Amazon Machine Image (AMI)) 頁面上，選取 **Community AMIs** (社群 AMI) 索引標籤。

1. 從出現的清單中，選擇具有最新發佈日期的 Microsoft 驗證 AMI，然後按一下 **Select** (選取)。

## 執行個體類型
<a name="liw-instance-type"></a>

執行個體類型定義執行個體的硬體組態和大小。較大的執行個體類型具有較多的 CPU 和記憶體。如需詳細資訊，請參閱[執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。
+ 針對 **Instance type** (執行個體類型)，選取執行個體的執行個體類型。

   您選取的執行個體類型，會決定您任務執行所在的可用資源。

## 金鑰對 （登入）
<a name="liw-key-pair"></a>

針對 **Key pair name** (金鑰對名稱)，選擇現有的金鑰對，或選擇 **Create new key pair** (建立新的金鑰對) 以建立新的金鑰對。

**重要**  
如果您選擇 **Proceed without key pair (Not recommended)** (繼續而不使用金鑰對 (不建議)) 選項，您將無法連線到執行個體，除非您選擇已設定為允許使用者透過其他方式登入的 AMI。

## 網路設定
<a name="liw-network-settings"></a>

視需要設定網路設定。
+ **Networking platform** (聯網平台)：選擇 **Virtual Private Cloud (VPC)** (虛擬私有雲端 (VPC))，然後在 **Network interfaces** (網路介面) 區段指定子網路。
+ **VPC**：選取要在其中建立安全群組的現有 VPC。
+ **子網路** ：您可以在與可用區域、Local Zone、Wavelength 區域或 Outpost 相關聯的子網路中啟動執行個體。

  若要在可用區域中啟動執行個體，請選取要在當中啟動執行個體的子網路。若要建立新的子網路，請選擇**建立新的子網路**，前往 Amazon VPC 主控台。完成後，請返回啟動執行個體精靈並選擇「重新整理」圖示，載入清單中的子網路。

  在 Local Zone 中啟動執行個體，選取您在 Local Zone 中建立的子網路。

  若要在 Outpost 中啟動執行個體，請在與 Outpost 相關聯的 VPC 中選取子網路。
+ **Auto-assign Public IP** (自動指派公有 IP)：如果您的執行個體應從網際網路存取，請確認 **Auto-assign Public IP** (自動指派公有 IP) 欄位設為 **Enable** (啟用)。如果不是，請將此欄位設為 **Disable** (停用)。
**注意**  
容器執行個體需要存取，才可以與 Amazon ECS 服務端點通訊。可透過介面 VPC 端點或透過具備公有 IP 位址的容器執行個體來實現。  
如需介面 VPC 端點的詳細資訊，請參閱 [Amazon ECS 介面 VPC 端點 (AWS PrivateLink)](vpc-endpoints.md)  
如果您沒有設定介面 VPC 端點，且容器執行個體沒有公有 IP 位址，則它們必須使用網路位址轉譯 (NAT) 來提供此存取。如需詳細資訊，請參閱《Amazon VPC 使用者指南》中的 [NAT 閘道](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)和本指南中的 [為 Amazon ECS Linux 容器執行個體使用 HTTP Proxy](http_proxy_config.md)。
+ **Firewall (security groups)** (防火牆 (安全群組))：使用安全群組定義容器執行個體的防火牆規則。這些規則指定傳遞至容器執行個體的傳入網路流量。所有其他流量都會遭到忽略。
  + 若要選取現有的安全群組，請選擇 **Select existing security group** (選取現有安全群組)，然後從您在[設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md)建立的安全群組選取您的安全群組。

## 設定儲存
<a name="liw-storage"></a>

您選取的 AMI 包含一或多個儲存體磁碟區，包括根磁碟區。您可以指定要連接至執行個體的其他磁碟區。

您可以使用 **Simple** (簡單) 檢視。
+ **Storage type** (儲存類型)：為您的容器執行個體設定儲存。

  如果您使用的是 Amazon ECS 最佳化 Amazon Linux AMI，執行個體已設定兩個磁碟區。**Root** (根目錄) 磁碟區供作業系統使用，而第二個 Amazon EBS 磁碟區 (連接到 `/dev/xvdcz`) 則供 Docker 使用。

  您可以選擇性地增加或減少您執行個體的磁碟區大小，使其符合您的應用程式需求。

## 進階詳細資訊
<a name="liw-advanced-details"></a>

針對 **Advanced Details (進階詳細資訊)**，展開此區段來檢視欄位，指定執行個體的其他參數。
+ **Purchasing option** (購買選項)：選擇 **Request Spot instances** (請求 Spot 執行個體) 以請求 Spot 執行個體。您也需要設定與 Spot 執行個體相關的其他欄位。如需詳細資訊，請參閱「[Spot 執行個體要求](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html)」。
**注意**  
如果您使用的是 Spot 執行個體，而且看到 `Not available` 訊息，您可能需要選擇不同的執行個體類型。

  .
+ **IAM instance profile** (IAM 執行個體設定檔)：選取您的容器執行個體 IAM 角色。這通常命名為 `ecsInstanceRole`。
**重要**  
如果您未使用適當的 IAM 許可啟動容器執行個體，Amazon ECS 代理程式就無法連線到叢集。如需詳細資訊，請參閱[Amazon ECS 容器執行個體 IAM 角色](instance_IAM_role.md)。
+ (選用) **User data** (使用者資料)：利用使用者資料設定您的 Amazon ECS 容器執行個體，例如 [Amazon ECS 容器代理程式組態](ecs-agent-config.md)中的代理程式環境變數。Amazon EC2 使用者資料指令碼僅於執行個體初次啟動時執行一次。以下是使用者資料用途的常見範例：
  + 您的容器執行個體預設會在您的預設叢集中啟動。若要在非預設的叢集中啟動，請選擇 **Advanced Details** (進階詳細資訊) 清單。然後，將以下指令碼貼入 **User data** (使用者資料) 欄位，以您的叢集名稱取代 *your\$1cluster\$1name*。

    `EnableTaskIAMRole` 會開啟任務的任務 IAM 角色功能。

    此外，當您使用 `awsvpc` 網路模式時，可使用以下選項。
    + `EnableTaskENI`：此標記會開啟任務聯網，並且當您使用 `awsvpc` 網路模式時需要它。
    + `AwsvpcBlockIMDS`：此選擇性標記會封鎖在 `awsvpc` 網路模式中執行的任務容器的 IMDS 存取。
    + `AwsvpcAdditionalLocalRoutes`：此選擇性標記可讓您在任務命名空間中擁有其他路由。

      將 `ip-address` 替換為其他路由的 IP 地址，例如 172.31.42.23/32。

    ```
    <powershell>
    Import-Module ECSTools
    Initialize-ECSAgent -Cluster your_cluster_name -EnableTaskIAMRole -EnableTaskENI -AwsvpcBlockIMDS -AwsvpcAdditionalLocalRoutes
    '["ip-address"]'
    </powershell>
    ```

# 引導 Amazon ECS Windows 容器執行個體傳遞資料
<a name="bootstrap_windows_container_instance"></a>

當您啟動 Amazon EC2 執行個體時，可以將使用者資料傳送到 EC2 執行個體。此資料可用來執行常見的自動化組態任務，甚至在執行個體啟動時，執行指令碼。對於 Amazon ECS，使用者資料的最常用案例是將組態資訊傳送到 Docker 常駐程式和 Amazon ECS 容器代理程式。

您可以將多種類型的使用者資料傳遞給 Amazon EC2，包含雲端 boothook、shell 指令碼和 `cloud-init` 指令。如需這些和其他格式類型的詳細資訊，請參閱 [Cloud-Init 文件](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)。

您可以在使用 Amazon EC2 啟動精靈時傳遞此使用者資料。如需詳細資訊，請參閱[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。

## 預設 Windows 使用者資料
<a name="windows-default-userdata"></a>

此範例使用者資料指令碼顯示您使用主控台時，Windows 容器執行個體所收到的預設使用者資料。下列指令碼會執行下列動作：
+ 將叢集名稱設定為您輸入的名稱。
+ 設定任務的 IAM 角色。
+ 將 `json-file` 和 `awslogs` 設定為可用的記錄驅動程式。

此外，當您使用 `awsvpc` 網路模式時，可使用以下選項。
+ `EnableTaskENI`：此標記會開啟任務聯網，並且當您使用 `awsvpc` 網路模式時需要它。
+ `AwsvpcBlockIMDS`：此選擇性標記會封鎖在 `awsvpc` 網路模式中執行的任務容器的 IMDS 存取。
+ `AwsvpcAdditionalLocalRoutes`：此選擇性標記可讓您擁有其他路由。

  將 `ip-address` 替換為其他路由的 IP 地址，例如 172.31.42.23/32。

您可以將此指令碼用於您自己的容器執行個體 (前提是執行個體是從 Amazon ECS 最佳化 Windows Server AMI 啟動)。

替換 `-Cluster cluster-name` 行以指定您自己的叢集名稱。

```
<powershell>
Initialize-ECSAgent -Cluster cluster-name -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' -EnableTaskENI -AwsvpcBlockIMDS -AwsvpcAdditionalLocalRoutes
'["ip-address"]'
</powershell>
```

 對於設定為使用 `awslogs` 日誌記錄驅動程式的 Windows 任務，您也必須在容器執行個體上設定 `ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE` 環境變數。請使用下列語法。

替換 `-Cluster cluster-name` 行以指定您自己的叢集名稱。

```
<powershell>
[Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine")
Initialize-ECSAgent -Cluster cluster-name -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]'
</powershell>
```

## Windows 代理程式安裝使用者資料
<a name="agent-service-userdata"></a>

此範例使用者資料指令碼會將 Amazon ECS 容器代理程式安裝在以 **Windows\$1Server-2016-English-Full-Containers** AMI 啟動的執行個體上。它已從 [Amazon ECS Container Agent GitHub 儲存庫](https://github.com/aws/amazon-ecs-agent)讀我檔案頁面的代理程式安裝說明調整。

**注意**  
此指令碼會基於舉例用途而共享。使用 Amazon ECS 最佳化 Windows Server AMI，更容易開始使用 Windows 容器。如需詳細資訊，請參閱[為 Fargate 工作負載建立 Amazon ECS 叢集](create-cluster-console-v2.md)。

如需有關如何在 Windows Server 2022 Full 上安裝 Amazon ECS 代理程式的資訊，請參閱 GitHub 上的 [Issue 3753](https://github.com/aws/amazon-ecs-agent/issues/3753)。

您可以對您自己的容器執行個體使用此指令碼 (假設是使用 **Windows\$1Server-2016-English-Full-Containers** AMI 啟動它們)。務必取代 `windows` 一行，以指定您自己的叢集名稱 (如果您使用的叢集名稱不是 `windows`)。

```
<powershell>
# Set up directories the agent uses
New-Item -Type directory -Path ${env:ProgramFiles}\Amazon\ECS -Force
New-Item -Type directory -Path ${env:ProgramData}\Amazon\ECS -Force
New-Item -Type directory -Path ${env:ProgramData}\Amazon\ECS\data -Force
# Set up configuration
$ecsExeDir = "${env:ProgramFiles}\Amazon\ECS"
[Environment]::SetEnvironmentVariable("ECS_CLUSTER", "windows", "Machine")
[Environment]::SetEnvironmentVariable("ECS_LOGFILE", "${env:ProgramData}\Amazon\ECS\log\ecs-agent.log", "Machine")
[Environment]::SetEnvironmentVariable("ECS_DATADIR", "${env:ProgramData}\Amazon\ECS\data", "Machine")
# Download the agent
$agentVersion = "latest"
$agentZipUri = "https://s3.amazonaws.com/amazon-ecs-agent/ecs-agent-windows-$agentVersion.zip"
$zipFile = "${env:TEMP}\ecs-agent.zip"
Invoke-RestMethod -OutFile $zipFile -Uri $agentZipUri
# Put the executables in the executable directory.
Expand-Archive -Path $zipFile -DestinationPath $ecsExeDir -Force
Set-Location ${ecsExeDir}
# Set $EnableTaskIAMRoles to $true to enable task IAM roles
# Note that enabling IAM roles will make port 80 unavailable for tasks.
[bool]$EnableTaskIAMRoles = $false
if (${EnableTaskIAMRoles}) {
  $HostSetupScript = Invoke-WebRequest https://raw.githubusercontent.com/aws/amazon-ecs-agent/master/misc/windows-deploy/hostsetup.ps1
  Invoke-Expression $($HostSetupScript.Content)
}
# Install the agent service
New-Service -Name "AmazonECS" `
        -BinaryPathName "$ecsExeDir\amazon-ecs-agent.exe -windows-service" `
        -DisplayName "Amazon ECS" `
        -Description "Amazon ECS service runs the Amazon ECS agent" `
        -DependsOn Docker `
        -StartupType Manual
sc.exe failure AmazonECS reset=300 actions=restart/5000/restart/30000/restart/60000
sc.exe failureflag AmazonECS 1
Start-Service AmazonECS
</powershell>
```

# 為 Amazon ECS Windows 容器執行個體使用 HTTP Proxy
<a name="http_proxy_config-windows"></a>

您可以設定您的 Amazon ECS 容器執行個體，針對 Amazon ECS 容器代理程式和 Docker 常駐程式使用 HTTP 代理。這在您的容器執行個體沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體進行外部網路存取時會很有用。

若要設定您的 Amazon ECS Windows 容器執行個體以使用 HTTP 代理，請在啟動時 (使用 Amazon EC2 使用者資料) 設定下列變數。

`[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.mydomain:port", "Machine")`  
將 `HTTP_PROXY` 設為要讓 Amazon ECS 代理連線到網際網路的 HTTP 代理之主機名稱 (或 IP 地址) 及連接埠號碼。例如，您的容器執行個體可能沒有透過 Amazon VPC 網際網路閘道、NAT 閘道或執行個體的外部網路存取。

`[Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")`  
將 `NO_PROXY` 設為 `169.254.169.254,169.254.170.2,\\.\pipe\docker_engine`，篩選 EC2 執行個體中繼資料、任務的 IAM 角色，以及來自代理的 Docker 常駐程式流量。

**Example Windows HTTP 代理使用者資料指令碼**  
以下範例使用者資料 PowerShell 指令碼會設定 Amazon ECS 容器代理程式和 Docker 常駐程式，以使用您指定的 HTTP 代理。您也可以指定容器執行個體自行註冊的叢集。  
若要在您啟動容器執行個體時使用此指令碼，請遵循「[啟動 Amazon ECS Windows 容器執行個體](launch_window-container_instance.md)」中的步驟進行。只要複製以下 PowerShell 指令碼，並在 **User data (使用者資料)** 欄位中貼上即可 (請確認您使用自己的代理和叢集資訊取代紅色的範例數值)。  
`-EnableTaskIAMRole` 選項是啟用任務的 IAM 角色的必要項目。如需詳細資訊，請參閱[Amazon EC2 Windows 執行個體的額外組態](task-iam-roles.md#windows_task_IAM_roles)。

```
<powershell>
Import-Module ECSTools

$proxy = "http://proxy.mydomain:port"
[Environment]::SetEnvironmentVariable("HTTP_PROXY", $proxy, "Machine")
[Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")

Restart-Service Docker
Initialize-ECSAgent -Cluster MyCluster -EnableTaskIAMRole
</powershell>
```

# 設定 Amazon ECS Windows 容器執行個體接收 Spot 執行個體通知
<a name="windows-spot-instance-draining-container"></a>

當 Spot 價格超過請求的最高價或容量不再可用時，Amazon EC2 會終止、停止或休眠您的 Spot 執行個體。Amazon EC2 會提供 Spot 執行個體中斷通知，在執行個體中斷前會向執行個體發出兩分鐘的警告。如果在執行個體上啟用 Amazon ECS Spot 執行個體耗盡，則 ECS 會收到 Spot 執行個體中斷通知，並將執行個體置於 `DRAINING` 狀態。

**重要**  
Amazon ECS 會監控具有 `terminate` 和 `stop` 執行個體動作的 Spot 執行個體中斷通知。如果您在請求 Spot 執行個體或 Spot 機群時指定了 `hibernate` 執行個體中斷行為，則這些執行個體不支援 Amazon ECS Spot 執行個體耗盡。

將容器執行個體設定為 `DRAINING` 時，Amazon ECS 會避免在容器執行個體中放置新的任務排程。`PENDING` 狀態下即將耗盡的容器執行個體服務任務會立即停止。如果叢集有可用的容器執行個體，則會在這些容器執行個體上啟動替代服務任務。

您可以在啟動執行個體時啟用 Spot 執行個體排空。您必須先設定 `ECS_ENABLE_SPOT_INSTANCE_DRAINING` 參數，然後才能啟動容器代理程式。使用您叢集的名稱取代 *my-cluster*。

```
[Environment]::SetEnvironmentVariable("ECS_ENABLE_SPOT_INSTANCE_DRAINING", "true", "Machine")

# Initialize the agent
Initialize-ECSAgent -Cluster my-cluster
```

如需詳細資訊，請參閱[啟動 Amazon ECS Windows 容器執行個體](launch_window-container_instance.md)。

# 外部執行個體的 Amazon ECS 叢集
<a name="ecs-anywhere"></a>

Amazon ECS Anywhere 支援將*外部執行個體* (例如內部部署伺服器或虛擬機器 (VM)) 註冊到 Amazon ECS 叢集。外部執行個體已進行優化，可執行產生傳出流量或處理資料的應用程式。如果您的應用程式需要傳入流量，缺乏 Elastic Load Balancing 支援會使這些工作負載的執行效率降低。Amazon ECS 新增了一個新的 `EXTERNAL` 啟動類型，可用來在外部執行個體上建立服務或執行任務。

## 支援的作業系統和系統架構
<a name="ecs-anywhere-supported-os"></a>

以下是支援的作業系統清單。支援 `x86_64` 和 `ARM64` CPU 架構。
+ Amazon Linux 2023
+ Ubuntu 20、Ubuntu 22、Ubuntu 24
+ RHEL 9 — 在執行 [ECS Anywhere 安裝指令碼](https://github.com/aws/amazon-ecs-agent/blob/master/scripts/ecs-anywhere-install.sh)之前，您必須確保已安裝 Docker。如需詳細資訊，請參閱 [Docker 文件中的在 RHEL 上安裝 Docker 引擎](https://docs.docker.com/engine/install/rhel/)。

從 2026 年 8 月 7 日開始，Amazon ECS Anywhere 不再支援下列作業系統：
+ Amazon Linux 2
+ CentOS Stream 9
+ RHEL 7、RHEL 8
+ Fedora 32、Fedora 33、Fedora 40
+ openSUSE Tumbleweed
+ Ubuntu 18
+ Debian 9、Debian 10、Debian 11、Debian 12
+ SUSE Enterprise Server 15
+ Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 20H2

## 考量事項
<a name="ecs-anywhere-considerations"></a>

在您開始使用外部執行個體之前，請注意下列考量事項。
+ 您可以一次向一個叢集註冊外部執行個體。如需有關如何向其他叢集註冊外部執行個體的說明，請參閱 [取消註冊 Amazon ECS 外部執行個體](ecs-anywhere-deregistration.md)。
+ 您的外部執行個體需要允許其與 AWS APIs IAM 角色。如需詳細資訊，請參閱[Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。
+ 您的外部執行個體不應該在本機定義預先設定的執行個體憑證鏈結，因為這會干擾註冊指令碼。
+ 若要將容器日誌傳送至 CloudWatch Logs，請確定您已在任務定義中建立並指定任務執行 IAM 角色。
+ 當外部執行個體註冊到叢集時，`ecs.capability.external` 屬性會與執行個體相關聯。此屬性會將執行個體視為外部執行個體。您可以將自訂屬性新增至外部執行個體，以作為任務置放條件限制。如需詳細資訊，請參閱[自訂屬性](task-placement-constraints.md#ecs-custom-attributes)。
+ 您可以將資源標籤新增至外部執行個體。如需詳細資訊，請參閱[將標籤新增至 Amazon ECS 的外部容器執行個體](instance-details-tags-external.md)。
+ 外部執行個體支援 ECS Exec。如需詳細資訊，請參閱[使用 ECS Exec 監控 Amazon ECS 容器](ecs-exec.md)。
+ 以下是與外部執行個體聯網時特有的其他考量。如需詳細資訊，請參閱[聯網](#ecs-anywhere-networking)。
  + 不支援服務負載平衡。
  + 不支援服務探索。
  + 在外部執行個體上執行的任務必須使用 `bridge`、`host` 或`none` 網路模式。不支援 `awsvpc` 網路模式。
  + 每個 AWS 區域都有 Amazon ECS 服務網域。必須允許這些服務網域將流量傳送到您的外部執行個體。
  + 安裝在外部執行個體上的 SSM Agent 會維護 IAM 憑證，會使用硬體指紋每 30 分鐘輪換這些憑證。如果您的外部執行個體失去與 的連線 AWS，SSM Agent 會在重新建立連線後自動重新整理登入資料。如需詳細資訊，請參閱 *AWS Systems Manager 使用者指南*中的[使用硬體指紋驗證內部部署伺服器和虛擬機器](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-technical-details.html#fingerprint-validation)。
  + 只要執行個體位於純 IPv6 子網路中，即可在採用純 IPv6 組態的外部執行個體上執行 Linux 任務。如需詳細資訊，請參閱[在純 IPv6 模式下使用 VPC](task-networking.md#networking-ipv6-only)。
+ 不支援 `UpdateContainerAgent` API。如需有關如何更新外部執行個體上的 SSM Agent 或 Amazon ECS 代理程式的說明，請參閱 [更新外部執行個體上的 AWS Systems Manager 代理程式和 Amazon ECS 容器代理程式](ecs-anywhere-updates.md)。
+ 不支援 Amazon ECS 容量提供者。若要在外部執行個體上建立服務或執行獨立任務，請使用 `EXTERNAL` 啟動類型。
+ 不支援 SELinux。
+ 不支援使用 Amazon EFS 磁碟區或指定 `EFSVolumeConfiguration`。
+ 不支援與 App Mesh 整合。
+ 如果您使用主控台建立外部執行個體任務定義，則必須使用主控台 JSON 編輯器建立任務定義。
+ 當您使用非 Amazon ECS 最佳化 AMI 時，請在外部容器執行個體上執行下列命令，以設定規則將 IAM 角色用於任務。如需詳細資訊，請參閱[外部執行個體的額外組態](task-iam-roles.md#enable_task_iam_roles)。

  ```
  $ sysctl -w net.ipv4.conf.all.route_localnet=1
  $ iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
  $ iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
  ```

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

Amazon ECS 外部執行個體已進行優化，可執行產生傳出流量或處理資料的應用程式。如果您的應用程式需要傳入流量 (例如 Web 服務)，則缺少 Elastic Load Balancing 支援會使執行這些工作負載效率降低，因為不支援將這些工作負載置於負載平衡器之後。

以下是與外部執行個體聯網時特有的其他考量。
+ 不支援服務負載平衡。
+ 不支援服務探索。
+ 在外部執行個體上執行的 Linux 任務必須使用 `bridge`、`host` 或`none` 網路模式。不支援 `awsvpc` 網路模式。

  如需有關每個網路模式的詳細資訊，請參閱 [EC2 執行個體的 Amazon ECS 任務聯網選項](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)。
+ 只要執行個體位於純 IPv6 子網路中，即可在採用純 IPv6 組態的外部執行個體上執行 Linux 任務。如需詳細資訊，請參閱[在純 IPv6 模式下使用 VPC](task-networking.md#networking-ipv6-only)。
+ 每個區域中有 Amazon ECS 服務網域，且必須允許將流量傳送到您的外部執行個體。
+ 安裝在外部執行個體上的 SSM Agent 會維護 IAM 憑證，會使用硬體指紋每 30 分鐘輪換這些憑證。如果您的外部執行個體失去與 的連線 AWS，SSM Agent 會在重新建立連線後自動重新整理登入資料。如需詳細資訊，請參閱 *AWS Systems Manager 使用者指南*中的[使用硬體指紋驗證內部部署伺服器和虛擬機器](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-technical-details.html#fingerprint-validation)。

下列網域用於 Amazon ECS 服務與外部執行個體上安裝的 Amazon ECS 代理程式之間的通訊。請確定允許流量，而且 DNS 解析可以運作。對於每個端點，*區域*表示 Amazon ECS 支援的 AWS 區域的區域識別符，例如美國東部 (俄亥俄) 區域的 `us-east-2`。應允許您使用的所有區域的端點。對於 `ecs-a` 和 `ecs-t` 端點，應該包含星號 (例如 `ecs-a-*`)。
+ `ecs-a-*.region.amazonaws.com` - 管理任務時會使用此端點。
+ `ecs-t-*.region.amazonaws.com` - 此端點可用來管理任務和容器指標。
+ `ecs.region.amazonaws.com` - 這是適用於 Amazon ECS 的服務端點。
+ `ssm.region.amazonaws.com ` — 這是 的服務端點 AWS Systems Manager。
+ `ec2messages.region.amazonaws.com` — 這是服務端點， AWS Systems Manager 用於在 Systems Manager 代理程式和雲端中的 Systems Manager 服務之間進行通訊。
+ `ssmmessages.region.amazonaws.com` — 必須使用這個服務端點建立和刪除連往雲端工作階段管理員服務的工作階段管道。
+ 如果您的任務需要與任何其他 AWS 服務通訊，請確定允許這些服務端點。應用程式範例包括使用 Amazon ECR 來提取容器映像或將 CloudWatch 用於 CloudWatch Logs。如需詳細資訊，請參閱 *AWS 一般參考*中的[服務端點](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)。

### Amazon FSx for Windows File Server 搭配 ECS Anywhere
<a name="ecs-anywhere-fsx"></a>

**重要**  
Amazon ECS Anywhere 的 Windows 支援已棄用。本節不再適用。

若要 Amazon FSx for Windows File Server 搭配 Amazon ECS 外部執行個體使用 ，您必須在內部部署資料中心與 之間建立連線 AWS 雲端。如需關於將您的網路連線至 VPC 連線選項的資訊，請參閱 [Amazon Virtual Private Cloud 連線能力選項](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/introduction.html)。

### gMSA 搭配 ECS Anywhere
<a name="ecs-anywhere-gmsa"></a>

**重要**  
Amazon ECS Anywhere 的 Windows 支援已棄用。本節不再適用。

當 Windows 是支援的作業系統時，ECS Anywhere 支援下列使用案例。
+ Active Directory 位於 AWS 雲端 - 對於此組態，您可以使用 連線在內部部署網路與 AWS 雲端 之間建立 AWS Direct Connect 連線。如需有關如何建立連線的資訊，請參閱 [Amazon Virtual Private Cloud 連線選項](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/introduction.html)。請在 AWS 雲端建立一個 Active Directory。如需有關如何開始使用 的資訊 AWS Directory Service，請參閱《 *AWS Directory Service 管理指南*》中的[設定 AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/setting_up.html)。然後，您可以使用 AWS Direct Connect 連線將外部執行個體加入網域。如需搭配 Amazon ECS 使用 gMSA 的詳細資訊，請參閱[了解如何在 Amazon ECS 上為 EC2 Windows 容器使用 gMSA](windows-gmsa.md)。
+ Active Directory 位於內部部署資料中心。- 對於此組態，您將外部執行個體加入到內部部署 Active Directory。然後，您可以在執行 Amazon ECS 任務時使用本機可用的憑證。

# 為外部執行個體工作負載建立 Amazon ECS 叢集
<a name="create-cluster-console-v2-ecs-anywhere"></a>

您可以透過建立叢集，定義任務與服務執行所在的基礎結構。

開始之前，請務必先完成 [設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md) 中的步驟，並指派適當的 IAM 許可。如需詳細資訊，請參閱[Amazon ECS 叢集範例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。Amazon ECS 主控台提供簡單的方法，透過建立 CloudFormation 堆疊來建立 Amazon ECS 叢集所需的資源。

為了使叢集建立程序盡可能簡單，主控台提供了許多可供選擇的預設選項，我們將在下方加以說明。主控台的大多數區段還有說明面板，以提供更多上下文。

您可以修改下列選項：
+ 將命名空間新增至叢集。

  命名空間可讓您在叢集中建立的服務連線到命名空間中的其他服務，而不需要額外的組態。如需詳細資訊，請參閱[互連 Amazon ECS 服務](interconnecting-services.md)。
+ 設定外部執行個體的叢集
+ 為您的受管儲存指派 AWS KMS 金鑰。如需有關如何建立金鑰的資訊，請參閱 *AWS Key Management Service User Guide* 中的 [Create a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。
+ 新增標籤以協助您識別叢集。

**建立新叢集 (Amazon ECS 主控台)**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇 **Create cluster** (建立叢集)。

1. 在**叢集組態**下，設定下列項目：
   + 在**叢集名稱**下輸入唯一的名稱。

     名稱可以包含最多 255 個字母 (大小寫)、數字與連字號。
   + (選用) 若要讓 Service Connect 使用的命名空間與叢集名稱不同，請在**命名空間**中輸入唯一的名稱。

1. (選用) 使用 Container Insights，展開**監控**區段，然後選擇下列任一選項：
   + 若要使用建議的具有增強可觀測性的 Container Insights，請選擇**具有增強可觀測性的 Container Insights**。
   + 若要使用 Container Insights，請選擇 **Container Insights**。

1. (選用) 若要使用 ECS Exec 在叢集中偵錯任務，請展開**疑難排解組態**區段，然後設定下列項目：
   + 選取**啟用 ECS Exec**。
   + （選用） 對於 **AWS KMS ECS Exec 的金鑰**，輸入您要用來加密 ECS Exec 工作階段資料的 AWS KMS 金鑰 ARN。
   + (選用) 在 **ECS Exec 記錄**欄位中，選擇日誌目的地：
     + 若要將日誌傳送至 CloudWatch Logs，請選擇 **Amazon CloudWatch**。
     + 若要將日誌傳送至 Amazon S3，請選擇 **Amazon S3**。
     + 若要停用記錄，請選擇**無**。

1. (選用) 加密受管儲存上的資料。在**加密**下，針對**受管儲存**，輸入您要用來加密受管儲存資料的 AWS KMS 金鑰 ARN。

1. (選用) 為協助識別您的叢集，請展開 **Tags** (標籤)，然後設定標籤。

   [新增標籤] 選擇**新增標籤**，並執行下列動作：
   + 在**金鑰**欄位中，輸入金鑰名稱。
   + 在**值**欄位中，輸入金鑰值。

1. 選擇**建立**。

## 後續步驟
<a name="cluster-next-steps-ecs-anywhere"></a>

您必須向叢集註冊執行個體。如需詳細資訊，請參閱[將外部執行個體註冊到 Amazon ECS 叢集](ecs-anywhere-registration.md)。

為外部啟動類型建立任務定義。如需詳細資訊，請參閱[使用主控台建立 Amazon ECS 任務定義](create-task-definition.md)

將應用程式作為獨立任務執行，或作為服務的組成分執行。如需詳細資訊，請參閱下列內容：
+ [將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md)
+ [建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)

# 將外部執行個體註冊到 Amazon ECS 叢集
<a name="ecs-anywhere-registration"></a>

對於您向 Amazon ECS 叢集註冊的每個外部執行個體，它必須安裝 SSM Agent、Amazon ECS 容器代理程式和 Docker。若要將外部執行個體註冊到 Amazon ECS 叢集，必須先將其註冊為 AWS Systems Manager 受管執行個體。在 Amazon ECS 主控台上按幾下，可建立安裝指令碼。安裝指令碼包含 Systems Manager 啟用金鑰，以及安裝每個必要的代理程式和 Docker 的命令。必須在內部部署伺服器或虛擬機器上執行安裝指令碼，才能完成安裝和註冊步驟。

**注意**  
在向叢集註冊 Linux 外部執行個體之前，請先在外部執行個體上建立 `/etc/ecs/ecs.config` 檔案，並新增您想要的任何容器代理程式組態參數。將外部執行個體註冊到叢集之後，您無法執行此操作。如需詳細資訊，請參閱[Amazon ECS 容器代理程式組態](ecs-agent-config.md)。

------
#### [ AWS 管理主控台 ]

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇要向其註冊外部執行個體的叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。

1. 在 **Register external instances** (註冊外部執行個體) 頁面上，完成下列步驟。

   1. 對於 **Activation key duration (in days)** (啟用金鑰持續時間 (以天為單位))，輸入啟用金鑰保持作用中的天數。在您輸入的天數到期之後，當註冊外部執行個體時，金鑰就不再有效。

   1. 對於 **Number of instances** (執行個體數目)，輸入要使用啟用金鑰向叢集註冊的外部執行個體數。

   1. 對於 **Instance role** (執行個體角色)，選擇要與外部執行個體建立關聯的 IAM 角色。如果尚未建立角色，請選擇 **Create new role** (建立新角色)，讓 Amazon ECS 代表您建立角色。如需外部執行個體需要哪些 IAM 許可的詳細資訊，請參閱 [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

   1.  複製註冊命令。應該在您要將其註冊到叢集的每個外部執行個體上執行此命令。
**重要**  
指令碼的 bash 部分必須以 root 身分執行。如果命令不是以 root 身分執行，則會傳回錯誤。

   1. 選擇**關閉**。

------
#### [ AWS CLI for Linux operating systems ]

1. 建立 Systems Manager 啟用對。這是用於 Systems Manager 受管執行個體啟用。輸出包含 `ActivationId` 和 `ActivationCode`。在後續步驟中會使用它們。請確定指定您已建立的 ECS Anywhere IAM 角色。如需詳細資訊，請參閱[Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

   ```
   aws ssm create-activation --iam-role ecsAnywhereRole | tee ssm-activation.json
   ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，下載安裝指令碼。

   ```
   curl --proto "https" -o "/tmp/ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh"
   ```

1. (選用) 在您的內部部署伺服器或虛擬機器 (VM) 上，使用指令碼簽章檔案透過以下步驟來驗證安裝指令碼。

   1. 下載並安裝 GnuPG。如需 GNUpg 的詳細資訊，請參閱 [GnuPG 網站](https://www.gnupg.org)。若您的系統為 Linux，請使用套件軟體管理工具在 Linux 上安裝 `gpg`。

   1. 擷取Amazon ECS PGP 公有金鑰。

      ```
      gpg --keyserver hkp://keys.gnupg.net:80 --recv BCE9D9A42D51784F
      ```

   1. 下載安裝指令碼簽章。簽章是 ASCII 分離的 PGP 簽章，存放於副檔名為 `.asc` 的檔案中。

      ```
      curl --proto "https" -o "/tmp/ecs-anywhere-install.sh.asc" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh.asc"
      ```

   1. 使用金鑰驗證安裝指令碼檔案。

      ```
      gpg --verify /tmp/ecs-anywhere-install.sh.asc /tmp/ecs-anywhere-install.sh
      ```

      預期的輸出如下：

      ```
      gpg: Signature made Tue 25 May 2021 07:16:29 PM UTC
      gpg:                using RSA key 50DECCC4710E61AF
      gpg: Good signature from "Amazon ECS <ecs-security@amazon.com>" [unknown]
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: F34C 3DDA E729 26B0 79BE  AEC6 BCE9 D9A4 2D51 784F
           Subkey fingerprint: D64B B6F9 0CF3 77E9 B5FB  346F 50DE CCC4 710E 61AF
      ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，執行安裝指令碼。在第一步中指定叢集名稱、區域和 Systems Manager 啟用 ID 和啟用代碼。

   ```
   sudo bash /tmp/ecs-anywhere-install.sh \
       --region $REGION \
       --cluster $CLUSTER_NAME \
       --activation-id $ACTIVATION_ID \
       --activation-code $ACTIVATION_CODE
   ```

   對於內部部署伺服器，或已為 GPU 工作負載安裝 NVIDIA 驅動程式的虛擬機器 (VM)，您必須將 `--enable-gpu` 旗標新增至安裝指令碼。指定此旗標時，安裝指令碼會驗證 NVIDIA 驅動程式是否正在執行，然後新增所需的組態變數來執行您的 Amazon ECS 任務。如需關於執行 GPU 工作負載和在任務定義中指定 GPU 要求的詳細資訊，請參閱 [在 Amazon ECS 任務定義中指定 GPU](ecs-gpu-specifying.md)。

   ```
   sudo bash /tmp/ecs-anywhere-install.sh \
       --region $REGION \
       --cluster $CLUSTER_NAME \
       --activation-id $ACTIVATION_ID \
       --activation-code $ACTIVATION_CODE \
       --enable-gpu
   ```

進行以下步驟向其他叢集註冊現有的外部執行個體

**若要向其他叢集註冊現有的外部執行個體**

1. 停用 Amazon ECS 容器代理程式。

   ```
   sudo systemctl stop ecs.service
   ```

1. 編輯 `/etc/ecs/ecs.config` 檔案，在 `ECS_CLUSTER` 行中，確保叢集名稱與要註冊外部執行個體的叢集名稱相符。

1. 移除現有的 Amazon ECS 代理程式資料。

   ```
   sudo rm /var/lib/ecs/data/agent.db
   ```

1. 啟動 Amazon ECS 容器代理程式。

   ```
   sudo systemctl start ecs.service
   ```

------
#### [ AWS CLI for Windows operating systems ]

1. 建立 Systems Manager 啟用對。這是用於 Systems Manager 受管執行個體啟用。輸出包含 `ActivationId` 和 `ActivationCode`。在後續步驟中會使用它們。請確定指定您已建立的 ECS Anywhere IAM 角色。如需詳細資訊，請參閱[Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

   ```
   aws ssm create-activation --iam-role ecsAnywhereRole | tee ssm-activation.json
   ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，下載安裝指令碼。

   ```
   Invoke-RestMethod -URI "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install.ps1" -OutFile “ecs-anywhere-install.ps1”
   ```

1. (選用) Powershell 指令碼由 Amazon 簽署，因此 Windows 會自動對該指令碼執行相同的憑證驗證。您不需要執行任何手動驗證。

   若要手動驗證憑證，請用右鍵按一下該檔案，導覽到屬性，然後使用 Digital Signatures (數位簽署) 索引標籤取得更多詳細資料。

   僅在主機在憑證存放區中具有憑證時，此選項才可用。

   驗證應會傳回類似以下內容的資訊：

   ```
   # Verification (PowerShell)
   Get-AuthenticodeSignature -FilePath .\ecs-anywhere-install.ps1
   
   SignerCertificate                         Status      Path
   -----------------                         ------      ----
   EXAMPLECERTIFICATE                        Valid       ecs-anywhere-install.ps1
   
   ...
   
   Subject              : CN="Amazon Web Services, Inc.",...
   
   ----
   ```

1. 在您的內部部署伺服器或虛擬機器 (VM) 上，執行安裝指令碼。在第一步中指定叢集名稱、區域和 Systems Manager 啟用 ID 和啟用代碼。

   ```
   .\ecs-anywhere-install.ps1 -Region $Region -Cluster $Cluster -ActivationID $ActivationID -ActivationCode $ActivationCode
   ```

1. 驗證 Amazon ECS 容器代理程式是否正在執行。

   ```
   Get-Service AmazonECS
   
   Status   Name               DisplayName
   ------   ----               -----------
   Running  AmazonECS          Amazon ECS
   ```

進行以下步驟向其他叢集註冊現有的外部執行個體

**若要向其他叢集註冊現有的外部執行個體**

1. 停用 Amazon ECS 容器代理程式。

   ```
   Stop-Service AmazonECS
   ```

1. 修改 `ECS_CLUSTER` 參數，以便叢集名稱與要註冊外部執行個體的叢集名稱相符。

   ```
   [Environment]::SetEnvironmentVariable("ECS_CLUSTER", $ECSCluster, [System.EnvironmentVariableTarget]::Machine)
   ```

1. 移除現有的 Amazon ECS 代理程式資料。

   ```
   Remove-Item -Recurse -Force $env:ProgramData\Amazon\ECS\data\*
   ```

1. 啟動 Amazon ECS 容器代理程式。

   ```
   Start-Service AmazonECS
   ```

------

在執行安裝指令碼以完成外部執行個體註冊程序之前， AWS CLI 可用來建立 Systems Manager 啟用。

# 取消註冊 Amazon ECS 外部執行個體
<a name="ecs-anywhere-deregistration"></a>

我們建議您在完成執行個體 AWS Systems Manager 之後，從 Amazon ECS 和 取消註冊執行個體。取消註冊後，外部執行個體即不再接受新的任務。

如果在您取消註冊容器執行個體時，還有執行中的任務，則這些任務會繼續執行，直到透過一些其他方式停用為止。不過，Amazon ECS 不再監控或負責這些任務。如果外部執行個體中的這些任務是 Amazon ECS 服務的一部分，則服務排程器可能會在不同的執行個體上啟動該任務的另一個副本。

取消註冊執行個體之後，請清除執行個體上剩餘的 AWS 資源。之後，您可以將該執行個體註冊至新的叢集。

## 程序
<a name="ecs-anywhere-deregistration-procedure"></a>

------
#### [ AWS 管理主控台 ]

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選擇註冊外部執行個體所在的區域。

1. 在導覽窗格中選擇 **Clusters** (叢集)，並選取託管外部執行個體的叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。

1. 在 **Container instances** (容器執行個體) 中，選擇要取消註冊的外部執行個體 ID。系統會將您重新導向至容器執行個體詳細資訊頁面。

1. 在 **Container Instance : *id*** (容器執行個體：ID) 頁面中選擇 **Deregister** (取消註冊)。

1. 檢閱取消註冊訊息。選取 **Deregister from AWS Systems Manager** (從 AWS Systems Manager中取消註冊)，也將作為 Systems Manager 受管執行個體來取消註冊外部執行個體。選擇 **Deregister (取消註冊)**。
**注意**  
在 Systems Manager 主控台中，可作為 Systems Manager 受管執行個體來取消註冊外部執行個體。如需說明，請參閱 *AWS Systems Manager User Guide* 中的 [Deregistering managed nodes in a hybrid and multicloud environment](https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-manager-deregister-hybrid-nodes.html)。

1. 取消註冊執行個體後，請清除現場部署伺服器或 VM 上的 AWS 資源。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/ecs-anywhere-deregistration.html)

------
#### [ AWS CLI ]

1. 您需要執行個體 ID 和容器執行個體 ARN，才能取消註冊容器執行個體。如果您沒有這些值，請執行下列命令

   執行下列命令以取得執行個體 ID。

   您可以使用執行個體 ID (`instanceID`) 取得容器執行個體 ARN (`containerInstanceARN`)。

   ```
   instanceId=$(aws ssm describe-instance-information --region "{{ region }}" | jq ".InstanceInformationList[] |select(.IPAddress==\"{{ IPv4 Address }}\") | .InstanceId" | tr -d'"'
   ```

   執行下列命令。

   您可以在命令中使用 `containerInstanceArn` 做為參數來取消註冊執行個體 (`deregister-container-instance`)。

   ```
   instances=$(aws ecs list-container-instances --cluster "{{ cluster }}" --region "{{ region }}" | jq -c '.containerInstanceArns')
   containerInstanceArn=$(aws ecs describe-container-instances --cluster "{{ cluster }}" --region "{{ region }}" --container-instances $instances | jq ".containerInstances[] | select(.ec2InstanceId==\"{{ instanceId }}\") | .containerInstanceArn" | tr -d '"')
   ```

1.  執行下列命令以消耗執行個體。

   ```
   aws ecs update-container-instances-state --cluster "{{ cluster }}" --region "{{ region }}" --container-instances "{{ containerInstanceArn }}" --status DRAINING
   ```

1. 容器執行個體完成消耗後，執行下列命令以取消註冊執行個體。

   ```
   aws ecs deregister-container-instance --cluster "{{ cluster }}" --region "{{ region }}" --container-instance "{{ containerInstanceArn }}"
   ```

1. 使用下列命令從 SSM 移除容器執行個體。

   ```
   aws ssm deregister-managed-instance --region "{{ region }}" --instance-id "{{ instanceId }}"
   ```

1. 取消註冊執行個體後，請清除現場部署伺服器或 VM 上的 AWS 資源。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/ecs-anywhere-deregistration.html)

------

# 更新外部執行個體上的 AWS Systems Manager 代理程式和 Amazon ECS 容器代理程式
<a name="ecs-anywhere-updates"></a>

執行 Amazon ECS 工作負載時，您的內部部署伺服器或 VM 必須同時執行 AWS Systems Manager 代理程式 (SSM 代理程式） 和 Amazon ECS 容器代理程式。 新增或更新任何功能時， 會 AWS 發行這些代理程式的新版本。如果您的外部執行個體使用舊版代理程式，您可以使用下列程序來更新它們。

## 在外部執行個體上更新 SSM Agent
<a name="ecs-anywhere-updates-ssmagent"></a>

AWS Systems Manager 建議您自動執行更新執行個體上 SSM Agent 的程序。它們提供多種方法來自動化更新。如需詳細資訊，請參閱 *AWS Systems Manager 使用者指南*中的[自動化 SSM Agent 更新](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-automatic-updates.html)。

## 在外部執行個體上更新 Amazon ECS 代理程式
<a name="ecs-anywhere-updates-ecsagent"></a>

在外部執行個體上，Amazon ECS 容器代理程式會透過升級 `ecs-init` 套件進行更新。更新 Amazon ECS 代理程式不會中斷執行中的任務或服務。Amazon ECS 在每個區域的 Amazon S3 儲存貯體中提供 `ecs-init` 套件和簽章檔案。從 `ecs-init` 版本 `1.52.1-1` 開始，Amazon ECS 提供單獨的 `ecs-init` 套件以供使用，這取決於外部執行個體所使用的作業系統和系統架構。

依據外部執行個體使用的作業系統和系統架構，使用下表來確定您應下載的 `ecs-init` 套件。

**注意**  
透過使用下列命令來確定外部執行個體所使用的作業系統和系統架構。  

```
cat /etc/os-release
uname -m
```


| 作業系統 (架構) | ecs-init 套件 | 
| --- | --- | 
|  CentOS 7 (x86\$164) CentOS 8 (x86\$164) CentOS Stream 9 (x86\$164) SUSE Enterprise Server 15 (x86\$164) RHEL 7 (x86\$164) RHEL 8 (x86\$164)  |  `amazon-ecs-init-latest.x86_64.rpm`  | 
|  CentOS 7 (aarch64) CentOS 8 (aarch64) CentOS Stream 9 (aarch64) RHEL 7 (aarch64)  |  `amazon-ecs-init-latest.aarch64.rpm`  | 
|  Debian 9 (x86\$164) Debian 10 (x86\$164) Debian 11 (x86\$164) Debian 12 (x86\$164) Ubuntu 18 (x86\$164) Ubuntu 20 (x86\$164) Ubuntu 22 (x86\$164) Ubuntu 24 (x86\$164)  |  `amazon-ecs-init-latest.amd64.deb`  | 
|  Debian 9 (aarch64) Debian 10 (aarch64) Debian 11 (aarch64) Debian 12 (aarch64) Ubuntu 18 (aarch64) Ubuntu 20 (aarch64) Ubuntu 22 (aarch64) Ubuntu 24 (aarch64)  |  `amazon-ecs-init-latest.arm64.deb`  | 

請依照以下步驟更新 Amazon ECS 代理程式。

**若要更新 Amazon ECS 代理程式**

1. 確認您正在執行的 Amazon ECS 代理程式版本。

   ```
   curl -s 127.0.0.1:51678/v1/metadata | python3 -mjson.tool
   ```

1. 下載適用於您的作業系統和系統架構的 `ecs-init` 套件。Amazon ECS 在每個區域的 Amazon S3 儲存貯體中提供 `ecs-init` 套件檔案。請務必將命令中的 *<region>* 識別符替換為與您的地理位置最接近的區域名稱 (例如，`us-west-2`)。

   **amazon-ecs-init-latest.x86\$164.rpm**

   ```
   curl -o amazon-ecs-init.rpm https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.x86_64.rpm
   ```

   **amazon-ecs-init-latest.aarch64.rpm**

   ```
   curl -o amazon-ecs-init.rpm https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.aarch64.rpm
   ```

   **amazon-ecs-init-latest.amd64.deb**

   ```
   curl -o amazon-ecs-init.deb https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.amd64.deb
   ```

   **amazon-ecs-init-latest.arm64.deb**

   ```
   curl -o amazon-ecs-init.deb https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.arm64.deb
   ```

1. (選用) 使用 PGP 簽章確認 `ecs-init` 套件檔案的有效性。

   1. 下載並安裝 GnuPG。如需 GNUpg 的詳細資訊，請參閱 [GnuPG 網站](https://www.gnupg.org)。若您的系統為 Linux，請使用套件軟體管理工具在 Linux 上安裝 `gpg`。

   1. 擷取Amazon ECS PGP 公有金鑰。

      ```
      gpg --keyserver hkp://keys.gnupg.net:80 --recv BCE9D9A42D51784F
      ```

   1. 下載 `ecs-init` 套件簽章。簽章是 ASCII 分離的 PGP 簽章，存放於副檔名為 `.asc` 的檔案中。Amazon ECS 在每個區域的 Amazon S3 儲存貯體中提供簽章檔案。請務必將命令中的 *<region>* 識別符替換為與您的地理位置最接近的區域名稱 (例如，`us-west-2`)。

      **amazon-ecs-init-latest.x86\$164.rpm**

      ```
      curl -o amazon-ecs-init.rpm.asc https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.x86_64.rpm.asc
      ```

      **amazon-ecs-init-latest.aarch64.rpm**

      ```
      curl -o amazon-ecs-init.rpm.asc https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.aarch64.rpm.asc
      ```

      **amazon-ecs-init-latest.amd64.deb**

      ```
      curl -o amazon-ecs-init.deb.asc https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.amd64.deb.asc
      ```

      **amazon-ecs-init-latest.arm64.deb**

      ```
      curl -o amazon-ecs-init.deb.asc https://s3.<region>.amazonaws.com/amazon-ecs-agent-<region>/amazon-ecs-init-latest.arm64.deb.asc
      ```

   1. 使用金鑰驗證 `ecs-init` 套件檔案。

      **對於 `rpm` 套件**

      ```
      gpg --verify amazon-ecs-init.rpm.asc ./amazon-ecs-init.rpm
      ```

      **對於 `deb` 套件**

      ```
      gpg --verify amazon-ecs-init.deb.asc ./amazon-ecs-init.deb
      ```

      預期的輸出如下：

      ```
      gpg: Signature made Fri 14 May 2021 09:31:36 PM UTC
      gpg:                using RSA key 50DECCC4710E61AF
      gpg: Good signature from "Amazon ECS <ecs-security@amazon.com>" [unknown]
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: F34C 3DDA E729 26B0 79BE  AEC6 BCE9 D9A4 2D51 784F
           Subkey fingerprint: D64B B6F9 0CF3 77E9 B5FB  346F 50DE CCC4 710E 61AF
      ```

1. 安裝 `ecs-init` 套裝服務。

   **對於 CentOS 7、CentOS 8 以及 RHEL 7 中的 `rpm` 套件**

   ```
   sudo yum install -y ./amazon-ecs-init.rpm
   ```

   **對於 SUSE Enterprise Server 15 中的 `rpm` 套件**

   ```
   sudo zypper install -y --allow-unsigned-rpm ./amazon-ecs-init.rpm
   ```

   **對於 `deb` 套件**

   ```
   sudo dpkg -i ./amazon-ecs-init.deb
   ```

1. 重新啟動 `ecs` 服務。

   ```
   sudo systemctl restart ecs
   ```

1. 確認 Amazon ECS 代理程式版本已更新。

   ```
   curl -s 127.0.0.1:51678/v1/metadata | python3 -mjson.tool
   ```

# 更新 Amazon ECS 叢集
<a name="update-cluster-v2"></a>

您可以修改下列叢集屬性：
+ 設定預設容量提供者

  每個叢集可以有一或多個容量提供者和選用的容量提供者策略。容量提供者策略會決定任務在叢集的容量提供者之間分散的方式。當您執行獨立任務或建立服務時，可以使用叢集的預設容量提供者策略，也可以使用能覆寫預設值的容量提供者策略。
+ 開啟 Container Insights。

  CloudWatch Container Insights 會從您的容器化應用程式和微型服務收集、彙總及總結指標和日誌。Container Insights 還提供診斷資訊，例如容器重新啟動故障，您可以使用這些資訊快速隔離和解決這些問題。如需詳細資訊，請參閱[使用具有增強可觀測性的 Container Insights 監控 Amazon ECS](cloudwatch-container-insights.md)。
+ 新增標籤以協助您識別叢集。

**程序**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集。

1. 在**叢集：*名稱***頁面上，選擇**更新叢集**。

1. 若要設定預設容量提供者，請在**預設容量提供者策略**下選擇**新增更多**。

   1. 對於**容量提供者**，選擇容量提供者。

   1. (選用) 在**基礎**中，輸入在容量提供者上執行的任務的最小數目。

      您只能為一個容量提供者設定**基礎**值。

   1. (選用) 在**加權**中，輸入使用指定容量提供者的任務在已啟動任務的總數中所佔的相對百分比。

   1. (選用) 針對任何其他容量提供者重複上述步驟。

1. 若要開啟或關閉 Container Insights，請展開**監控**，然後開啟**使用 Container Insights**。

1. 為協助識別您的叢集，請展開**標籤**，然後設定標籤。

   [新增標籤] 選擇**新增標籤**，並執行下列動作：
   + 在**金鑰**欄位中，輸入金鑰名稱。
   + 在**值**欄位中，輸入金鑰值。

   [移除標籤] 選擇標籤「金鑰」和「值」右側的**移除**。

1. 選擇**更新**。

# 刪除 Amazon ECS 叢集
<a name="delete_cluster-new-console"></a>

如果叢集已使用完畢，即可將其刪除。刪除叢集後，其會轉換到 `INACTIVE` 狀態。具有 `INACTIVE` 狀態的叢集可能會在您的帳戶中保持可探索一段時間。不過，此行為未來可能變動，因此不建議依賴 `INACTIVE` 叢集得以保存。

刪除叢集之前，您必須執行下列操作：
+ 刪除叢集中的所有服務。如需詳細資訊，請參閱[使用主控台刪除 Amazon ECS 服務](delete-service-v2.md)。
+ 停止所有當前正在執行的任務。如需詳細資訊，請參閱[停止 Amazon ECS 任務](standalone-task-stop.md)。
+ 取消註冊叢集中的所有已註冊的容器執行個體。如需詳細資訊，請參閱[取消註冊 Amazon ECS 容器執行個體](deregister_container_instance.md)。
+ 刪除命名空間。如需詳細資訊，請參閱 *AWS Cloud Map 開發人員指南*中的[刪除命名空間](https://docs.aws.amazon.com/cloud-map/latest/dg/deleting-namespaces.html)。

**程序**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters (叢集)** 頁面上，選取要刪除的叢集。

1. 在頁面右上角，選擇**刪除叢集**。

   當您沒有刪除與叢集關聯的所有資源時，將顯示一則訊息。

1. 在確認方塊中，輸入 **delete *cluster name***。

# 取消註冊 Amazon ECS 容器執行個體
<a name="deregister_container_instance"></a>

**重要**  
本主題僅適用於在 Amazon EC2 中建立的容器執行個體。如需取消註冊外部執行個體的詳細資訊，請參閱 [取消註冊 Amazon ECS 外部執行個體](ecs-anywhere-deregistration.md)。

完成 Amazon EC2 支援的容器執行個體後，應該可以從您的叢集中取消註冊它。取消註冊後，容器執行個體即不再接受新的任務。

如果在您取消註冊容器執行個體時，還有執行中的任務，這些任務會繼續執行，直到您終止執行個體或任務因某些緣由而停止為止。不過，這些任務是孤立的，這意味著 Amazon ECS 不再監控或負責它們。如果容器執行個體中的孤立任務是 Amazon ECS 服務的一部分，該服務排程器有可能會在不同的容器執行個體上啟動該任務的另一個副本。會取消註冊已註冊有 Application Load Balancer 目標群組的孤立服務任務中的所有容器。他們會根據負載平衡器或目標群組的設定，開始進行連接耗盡。如果孤立任務正在使用 `awsvpc` 網路模式，則會刪除其彈性網路介面。

如果在取消註冊後，您打算將容器執行個體另作他用，您應該先停止該容器執行個體上執行的所有任務，再取消註冊。這可防止任何遺棄的任務耗費資源。

取消註冊容器執行個體時，請注意下列考量事項。
+ 因為每個容器執行個體都有唯一的狀態資訊，所以不應從一個叢集取消註冊，又在另一個叢集中重新註冊。若要重新定位容器執行個體資源，我們建議您從一個叢集終止容器執行個體，再於新叢集中啟動新的容器執行個體。如需詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Terminate your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)，以及[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。
+ 如果容器執行個體是由 Auto Scaling 群組或 CloudFormation 堆疊管理，請透過更新 Auto Scaling 群組或 CloudFormation 堆疊來終止執行個體。否則，Auto Scaling 群組或 CloudFormation 會在您終止執行個體後建立新執行個體。
+ 如果您終止的是具有連線的 Amazon ECS 容器代理的執行中容器執行個體，代理程式會自動從您的叢集取消註冊該執行個體。如果是已停止的容器執行個體或具有中斷連線代理的執行個體，則不會在終止時自動取消註冊。
+ 取消註冊容器執行個體會從叢集中移除執行個體，但不會終止 Amazon EC2 執行個體。如果您已完成使用執行個體，請務必終止它以停止計費。如需詳細資訊，請參閱*《Amazon EC2 使用者指南》*中的[終止您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

## 程序
<a name="deregister_container_instance_procedure"></a>

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選擇註冊外部執行個體所在的區域。

1. 在導覽窗格中選擇 **Clusters** (叢集)，並選取託管執行個體的叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。

1. 在 **Container instances** (容器執行個體) 中，選取要取消註冊的執行個體 ID。系統會將您重新導向至容器執行個體詳細資訊頁面。

1. 在 **Container Instance : *id*** (容器執行個體：ID) 頁面中選擇 **Deregister** (取消註冊)。

1. 在確認畫面上，選擇**取消註冊**。

1. 如果您完成容器執行個體，請終止基礎的 Amazon EC2 執行個體。如需詳細資訊，請參閱*《Amazon EC2 使用者指南》*中的[終止您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

# 排空 Amazon ECS 容器執行個體
<a name="container-instance-draining"></a>

有時候您可能需要從叢集中移除容器執行個體，以便執行系統更新或叢集容量規模縮減等作業。Amazon ECS 可讓您將容器執行個體轉換為 `DRAINING` 狀態。這稱為*容器執行個體耗盡*。將容器執行個體設定為 `DRAINING` 時，Amazon ECS 會避免在容器執行個體中放置新的任務排程。

## 服務的耗盡行為
<a name="draining-service-behavior"></a>

會立即停止屬於 `PENDING` 狀態之服務的任何任務。如果叢集中有可用的容器執行個體容量，服務排程器將會啟動取代任務。如果容器執行個體容量不足，則會傳送服務事件訊息，指出該問題。

在容器執行個體上處於 `RUNNING` 狀態的服務的任務會轉換為 `STOPPED` 狀態。服務排程器會嘗試根據服務的部署類型和部署組態參數 (`minimumHealthyPercent` 和 `maximumPercent`) 來取代任務。如需詳細資訊，請參閱[Amazon ECS 服務](ecs_services.md)及[Amazon ECS 服務定義參數](service_definition_parameters.md)。
+ 如果 `minimumHealthyPercent` 低於 100%，則排程器在任務取代期間可以暫時忽略 `desiredCount`。例如，`desiredCount` 為四項任務，下限 50% 允許排程器先停止兩項現有的任務，再開始兩項新的任務。如果下限為 100%，則直到替代任務視為正常運作前，服務排程器都無法移除現有的任務。如果未使用負載平衡器的服務任務為 `RUNNING` 狀態，則視為運作良好。如果使用負載平衡器的服務任務為 `RUNNING` 狀態，且負載平衡器回報託管所在的容器執行個體運作良好，任務即視為運作良好。
**重要**  
如果您使用 Spot 執行個體且 `minimumHealthyPercent` 大於或等於 100%，則在 Spot 執行個體終止之前，服務將沒有足夠的時間取代任務。
+ `maximumPercent` 參數代表任務取代期間的執行任務數量上限，這允許您定義替代批次大小。例如，如果 `desiredCount` 為四項任務，可先啟動四項新任務再停止四項要耗盡任務的上限為 200% (前提是有執行此作業所需的可用叢集資源)。如果上限為 100%，則在要耗盡的任務停止之前，皆無法啟動替代任務。
**重要**  
如果 `minimumHealthyPercent` 和 `maximumPercent` 兩者皆為 100%，則服務無法刪除現有任務，也無法啟動替換任務。這可以防止容器執行個體成功耗盡，並避免進行新部署。

## 獨立任務的耗盡行為
<a name="draining-standalone-behavior"></a>

處於 `PENDING` 或 `RUNNING` 狀態的任何獨立任務不會受到影響；您必須等待其自行停止或手動停止。容器執行個體將維持 `DRAINING` 狀態。

## Amazon ECS 受管執行個體的排空行為
<a name="managed-instances-draining-behavior"></a>

Amazon ECS 受管執行個體終止可確保正常的工作負載轉換，同時最佳化成本和維護系統運作狀態。終止系統為執行個體終止提供三種不同的決策路徑，每種都具有不同的時間特性與客戶影響設定檔。

客戶啟動的終止  
在您需要從服務中立即移除容器執行個體時，提供執行個體移除的直接控制權。執行 `deregister-container-instance`時，`force`請求參數會設為 true。這表示即使有任何執行中的工作負載，仍需要立即終止。

系統啟動的閒置終止  
Amazon ECS 受管執行個體透過終止未執行任何任務的閒置 Amazon ECS 容器執行個體，持續監控並主動最佳化成本。ECS 使用啟發式延遲，讓容器執行個體有機會在終止之前取得新啟動的任務。這可以使用 `scaleInAfter` Amazon ECS 受管執行個體容量提供者組態參數來自訂。

基礎結構重新整理終止  
Amazon ECS 受管執行個體會自動管理和更新受管容器執行個體上的軟體，以確保安全性和合規性，同時維持工作負載可用性。如需詳細資訊，請參閱 [Amazon ECS 受管執行個體中的修補](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-patching.html)。

終止系統會實作兩階段方法，可平衡工作負載持續性與基礎結構管理需求。

**階段 1：優雅完成期間**  
在此階段，系統會實作優先考量工作負載持續性的優雅排空策略。服務任務會透過正常的 Amazon ECS 排程程序優雅排空。獨立任務可能會自然完成，因此會持續執行。系統會監控所有任務，透過自然完成程序達到停止狀態。

**階段 2：硬性截止日期強制執行**  
當優雅完成在可接受的時間範圍內未達成終止目標時，系統會實作硬性截止日期強制執行。硬性截止日期通常設定為排空啟動時間加 7 天，為優雅完成提供大量時間，同時維持營運需求。強制執行包括自動強制取消註冊程序，並立即終止所有剩餘的任務，無論完成狀態如何。

當執行個體上執行的所有任務轉換為 `STOPPED` 狀態時，容器執行個體完成耗盡。容器執行個體會保持在 `DRAINING` 狀態，直到再次啟動或刪除為止。您可以確認容器執行個體上的任務狀態，方法是搭配使用 [ListTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTasks.html) 操作與 `containerInstance` 參數以取得執行個體上的任務清單，然後搭配使用 [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html) 操作與每個任務的 Amazon Resource Name (ARN) 或 ID 以驗證任務狀態。

當您準備好讓容器執行個體重新開始託管任務時，您可以將容器執行個體的狀態從 `DRAINING` 變更為 `ACTIVE`。然後，Amazon ECS 服務排程器將再次考慮容器執行個體以進行任務置放。

## 程序
<a name="drain-instances"></a>

透過運用新的 AWS 管理主控台，可使用下列步驟將容器執行個體設定為耗盡。

您也可以使用 [UpdateContainerInstancesState](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateContainerInstancesState.html) API 動作或 [update-container-instances-state](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-container-instances-state.html) 命令將容器執行個體的狀態變更成 `DRAINING`。

**AWS 管理主控台**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇託管您執行個體的叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。然後，在 **Container instances** (容器執行個體)下，選取您要耗盡之每個容器執行個體的核取方塊。

1. 依序選擇**動作**、**耗盡**。

# 在 Auto Scaling 群組之外變更執行個體類型或大小
<a name="container-instance-change-type"></a>

AWS 建議您保持基礎設施不變。如果您需要變更執行個體大小，您可以：
+ 水平擴展並新增其他執行個體。然後，在這些執行個體上放置其他任務，或者 
+ 啟動新的較大/較小執行個體，然後耗盡舊執行個體，以垂直擴展。

這兩種方法都有助於將應用程式可用性的影響降至最低。

如果您使用其他方法來變更執行個體，您可能會收到下列錯誤：

```
Container instance type changes are not supported.
```

當您收到此錯誤時，請執行下列步驟：

1. 啟動具有所需執行個體類型的新執行個體。

1. 耗盡舊執行個體類型。如需詳細資訊，請參閱[排空 Amazon ECS 容器執行個體](container-instance-draining.md)。

# Amazon ECS EC2 容器執行個體
<a name="ecs-agent-versions"></a>

Amazon ECS 代理程式是在每個已註冊至叢集的容器執行個體上執行的程序。該程序有助於容器執行個體與 Amazon ECS 之間的通訊。

**注意**  
在 Linux 容器執行個體上，代理程式容器會掛載最上層目錄，例如 `/lib`、`/lib64` 與 `/proc`。這對於 Amazon EBS 磁碟區、`awsvpc` 網路模式、Amazon ECS Service Connect 與 FireLens for Amazon ECS 等 ECS 功能是必要的。

每個 Amazon ECS 容器代理程式版本都支援不同的功能集，並提供先前版本的錯誤修復。可能的話，我們建議您一律使用最新版本的 Amazon ECS 容器代理程式。若要將您的容器代理更新到最新版本，請參閱「[更新 Amazon ECS 容器代理程式](ecs-agent-update.md)」。

Amazon ECS 容器代理程式包含 `amazon-ecs-pause` 映像。Amazon ECS 會將此映像用於採用 `awsvpc` 網路模式的任務。

若要查看每個代理版本中包含哪些功能和強化功能，請參閱 [https://github.com/aws/amazon-ecs-agent/releases](https://github.com/aws/amazon-ecs-agent/releases)。

**重要**  
可靠指標的最低 Docker 版本是 Docker 版本 `v20.10.13` 及更新版本，該版本隨附於 Amazon ECS 最佳化 AMI `20220607` 及更新版本中。  
Amazon ECS 代理程式版本 `1.20.0` 和更新版本已不支援 `18.01.0` 之前的 Docker 版本。

## 生命週期
<a name="container-lifecycle"></a>

當 Amazon ECS 容器代理程式在您的叢集中註冊 Amazon EC2 執行個體時，Amazon EC2 執行個體會將其狀態報告為 `ACTIVE`，其代理程式連線狀態為 `TRUE`。這個容器執行個體可以接受執行任務請求。

如果您停止 (非終止) 容器執行個體，狀態會維持在 `ACTIVE`，但代理程式連線狀態會在幾分鐘內轉換成 `FALSE`。容器執行個體上執行的所有任務都會停止。如果您再次啟動容器執行個體，容器代理會與 Amazon ECS 服務重新連線，而您即可再次在執行個體上執行任務。

如果您將容器執行個體的狀態變更為 `DRAINING`，新的任務就不會放置在容器執行個體中。如果可能，容器執行個體上執行的所有服務任務都會移除，以便您可以執行系統更新。如需詳細資訊，請參閱[排空 Amazon ECS 容器執行個體](container-instance-draining.md)。

如果您取消註冊或終止容器執行個體，則容器執行個體狀態會立即變更為 `INACTIVE`，且在您列出容器執行個體時將不再回報該容器執行個體。不過，終止後的一小時內您仍然可以描述容器執行個體。一小時之後，即無法再進行執行個體描述。

您可以手動耗盡執行個體，或者建置 Auto Scaling 群組 lifecycle hook 以將執行個體狀態設定為 `DRAINING`。如需有關 Auto Scaling lifecycle hook 的詳細資訊，請參閱 [Amazon EC2 Auto Scaling lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)。

## Docker 支援
<a name="docker-support"></a>

Amazon ECS 支援在 Amazon Linux 上發布的 Docker 最近兩個主要版本。目前包括 Docker 20.10.x 與 Docker 25.x。

您可以在 GitHub 的 [Amazon ECS 代理程式規格檔案](https://github.com/aws/amazon-ecs-agent/blob/dev/packaging/amazon-linux-ami-integrated/ecs-agent.spec#L53)中找到 Amazon ECS 所需的最低 Docker 版本。

使用 Amazon ECS 最佳化 AMI 時，會預先安裝 Docker 並設定為搭配 Amazon ECS 容器代理程式使用。AMI 包含經 Amazon ECS 測試且支援的 Docker 版本。

**注意**  
雖然 Amazon ECS 支援多個 Docker 版本，但建議使用 Amazon ECS 最佳化 AMI 內建的 Docker 版本，以取得最佳相容性與技術支援。

## Amazon ECS 最佳化 AMI
<a name="ecs-optimized-ami"></a>

如需 Amazon ECS 最佳化 AMI 的詳細資訊，請參閱 [Amazon ECS 最佳化 Linux AMIs](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)。

## 其他資訊
<a name="additional-information"></a>

下列頁面提供變更的其他資訊：
+ GitHub 上的 [Amazon ECS 代理程式變更記錄](https://github.com/aws/amazon-ecs-agent/blob/master/CHANGELOG.md)
+ [Amazon Linux 2 版本備註](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)
+ Docker 文件中的 [Docker 引擎版本備註](https://docs.docker.com/engine/release-notes/27/)
+ NVIDIA 文件中的 [NVIDIA 驅動程式文件](https://docs.nvidia.com/datacenter/tesla/index.html)

# Amazon ECS 容器代理程式組態
<a name="ecs-agent-config"></a>

**適用對象**：EC2 執行個體

Amazon ECS 容器代理程式支援數個組態選項，其中大部分透過環境變數進行設定。

如果是透過 Linux 版的 Amazon ECS 最佳化 AMI 來啟動容器執行個體，您可以在 `/etc/ecs/ecs.config` 檔案中設定這些環境變數，然後重新啟動代理程式。您也可以在啟動時使用 Amazon EC2 使用者資料，將這些組態變數寫入容器執行個體。如需詳細資訊，請參閱[引導 Amazon ECS Linux 容器執行個體傳遞資料](bootstrap_container_instance.md)。

如果是透過 Windows 版的 Amazon ECS 最佳化 AMI 來啟動容器執行個體，您可以使用 PowerShell SetEnvironmentVariable 命令設定這些環境變數，然後重新啟動代理程式。如需詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Run commands when you launch an EC2 instance with user data input](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)，以及[引導 Amazon ECS Windows 容器執行個體傳遞資料](bootstrap_windows_container_instance.md)。

如果您是手動啟用 Amazon ECS 容器代理程式 (適用於非 Amazon ECS 最佳化 AMI)，則可以在用於啟用代理程式的 **docker run** 命令中使用這些環境變數。請搭配使用這些變數和語法 `--env=VARIABLE_NAME=VARIABLE_VALUE`。如需私有儲存庫的身分驗證登入資料這類敏感資訊，您應該將代理環境變數存放至一個檔案中，並使用 `--env-file path_to_env_file` 選項一次傳遞。您可使用下列命令來新增這些變數。

```
sudo systemctl stop ecs
sudo vi /etc/ecs/ecs.config 
# And add the environment variables with VARIABLE_NAME=VARIABLE_VALUE format.
sudo systemctl start ecs
```

## 透過主機 PID 命名空間執行 Amazon ECS 代理程式
<a name="ecs-agent-pid-namespace"></a>

依預設，Amazon ECS 代理程式會透過專用的 PID 命名空間執行。在下列組態中，您可以設定 Amazon ECS 代理程式採用主機 PID 命名空間執行：
+ SELinux 強制執行模式已啟用。
+ Docker 的 SELinux 安全政策設定為 true。

您可以在 `/etc/ecs/ecs.config` 檔案中將 `ECS_AGENT_PID_NAMESPACE_HOST` 環境變數設定為 `true`，實現對此行為進行設定。啟用此變數時，`ecs-init` 會使用主機的 PID 命名空間 (`--pid=host`) 啟動 Amazon ECS 代理程式容器，允許代理程式在 SELinux 強制執行環境中正確引導自身。此功能在 Amazon ECS 代理程式版本 `1.94.0` 及更新版本中可用。

若要啟用此功能，請將以下一行新增至 `/etc/ecs/ecs.config` 檔案：

```
ECS_AGENT_PID_NAMESPACE_HOST=true
```

進行此變更後，請重新啟動 Amazon ECS 代理程式，讓變更生效：

```
sudo systemctl restart ecs
```

若啟用了 SELinux 強制模式，且 Docker 安全政策設定為 true，那麼即使設定了 `ECS_AGENT_PID_NAMESPACE_HOST=true`，下列功能也無法運作。
+ Amazon ECS Exec
+ Amazon EBS 任務連接
+ Service Connect
+ FireLens for Amazon ECS

## 可用參數
<a name="ecs-agent-availparam"></a>

如需有關可用 Amazon ECS 容器代理程式組態參數的資訊，請參閱 GitHub 上的 [Amazon ECS 容器代理程式](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)。

# 將 Amazon ECS 容器執行個體組態儲存於 Amazon S3 中
<a name="ecs-config-s3"></a>

使用上述環境變數控制 Amazon ECS 容器代理程式組態。當容器代理程式啟動並隨之設定代理程式時，Linux 版的 Amazon ECS 最佳化 AMI 會在 `/etc/ecs/ecs.config` 中尋找這些變數。某些不敏感的環境變數 (例如 `ECS_CLUSTER`) 可以在啟動時透過 Amazon EC2 使用者資料傳遞給容器執行個體，並寫入此檔案，且不會造成任何問題。不過，其他敏感資訊，例如您的 AWS 登入資料或 `ECS_ENGINE_AUTH_DATA`變數，絕不應該傳遞至使用者資料中的執行個體，或以允許它們出現在`.bash_history`檔案中`/etc/ecs/ecs.config`的方式寫入 。

在 Amazon S3 中的私有儲存貯體內存放組態資訊，並對容器執行個體 IAM 角色授予唯讀存取權，這是一種允許容器執行個體在啟動時進行設定的安全且便利方法。您可以將 `ecs.config` 文件的複本儲存在私有儲存貯體中。然後，您可以使用 Amazon EC2 使用者資料來安裝 ， AWS CLI 並在執行個體啟動`/etc/ecs/ecs.config`時將您的組態資訊複製到 。

**若要在 Amazon S3 中存放 `ecs.config` 檔案**

1. 您必須授予容器執行個體角色 (**ecsInstanceRole**) 許可，才能取得 Amazon S3 的唯讀存取權。您可以將 **AmazonS3ReadOnlyAccess** 指派給 `ecsInstanceRole` 角色來執行此操作。如需有關如何將政策連接至角色的資訊，請參閱 *AWS Identity and Access Management User Guide* 中的 [Update permissions for a role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)

1. 使用下列格式建立包含有效 Amazon ECS 代理程式組態變數的 `ecs.config` 檔案。本範例將設定私有登錄檔身分驗證。如需詳細資訊，請參閱[在 Amazon ECS 中使用非AWS 容器映像](private-auth.md)。

   ```
   ECS_ENGINE_AUTH_TYPE=dockercfg
   ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}
   ```
**注意**  
如需可用 Amazon ECS 代理程式組態變數的完整清單，請參閱 GitHub 上的 [Amazon ECS 容器代理程式](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)。

1. 若要存放您的組態檔案，請在 Amazon S3 中建立私有儲存貯體。如需詳細資訊，請參閱 *Amazon Simple Storage Service User Guide* 中的 [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

1. 將 `ecs.config` 檔案上傳至 S3 儲存貯體。如需詳細資訊，請參閱 *Amazon Simple Storage Service 使用者指南*中的[上傳物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。

**若要在啟動時從 Amazon S3 載入 `ecs.config` 檔案**

1. 完成本節稍早的程序，以允許 Amazon S3 以唯讀方式存取您的容器執行個體，並將 `ecs.config` 檔案存放在私有 S3 儲存貯體。

1. 啟動新的容器執行個體，並在 EC2 使用者資料中使用如下範例指令碼。指令碼會安裝 ， AWS CLI 並將您的組態檔案複製到 `/etc/ecs/ecs.config`。如需詳細資訊，請參閱[啟動 Amazon ECS Linux 容器執行個體](launch_container_instance.md)。

   ```
   #!/bin/bash
   yum install -y aws-cli
   aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config
   ```

# 安裝 Amazon ECS 容器代理程式
<a name="ecs-agent-install"></a>

若想向 Amazon ECS 叢集註冊 Amazon EC2 執行個體，且該執行個體未使用基於 Amazon ECS 最佳化 AMI 的 AMI，您可以透過如下程序手動安裝 Amazon ECS 容器代理程式。為此，您可以從其中一個區域 S3 儲存貯體或 Amazon Elastic Container Registry Public 下載代理程式。如果從其中一個區域 Amazon S3 儲存貯體下載，您可選擇性使用 PGP 簽章驗證容器代理程式的有效性。

**注意**  
Amazon ECS 和 Docker 服務的 `systemd` 單位都有一個指令，要在啟動這兩個服務前等待 `cloud-init` 完成。在您的 Amazon EC2 使用者資料完成執行前，`cloud-init` 程序不會被視為完成。因此，透過 Amazon EC2 使用者資料啟動 Amazon ECS 或 Docker 可能會造成死鎖。若要使用 Amazon EC2 使用者資料來啟動容器代理程式，您可以使用 `systemctl enable --now --no-block ecs.service`。

## 在非 Amazon Linux EC2 執行個體上安裝 Amazon ECS 容器代理程式
<a name="ecs-agent-install-nonamazonlinux"></a>

若要在 Amazon EC2 執行個體上安裝 Amazon ECS 容器代理程式，您可以從其中一個區域 Amazon S3 儲存貯體中下載代理程式並加以安裝。

**注意**  
使用非 Amazon Linux AMI 時，您的 Amazon EC2 執行個體需要 `cgroupfs` 支援 `cgroup` 驅動程式，以便 Amazon ECS 代理程式支援任務層級資源限制。如需詳細資訊，請參閱 [GitHub 上的 Amazon ECS 代理程式](https://github.com/aws/amazon-ecs-agent)。

每個系統架構最新的 Amazon ECS 容器代理程式檔案 (依區域) 列出如下，以供參考。


| 區域 | 區域名稱 | Amazon ECS init deb 檔案 | Amazon ECS init rpm 檔案 | 
| --- | --- | --- | --- | 
| us-east-2 | 美國東部 (俄亥俄) |  [Amazon ECS init amd64](https://s3.us-east-2.amazonaws.com/amazon-ecs-agent-us-east-2/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.us-east-2.amazonaws.com/amazon-ecs-agent-us-east-2/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.us-east-2.amazonaws.com/amazon-ecs-agent-us-east-2/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.us-east-2.amazonaws.com/amazon-ecs-agent-us-east-2/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| us-east-1 | 美國東部 (維吉尼亞北部) |  [Amazon ECS init amd64](https://s3.us-east-1.amazonaws.com/amazon-ecs-agent-us-east-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.us-east-1.amazonaws.com/amazon-ecs-agent-us-east-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.us-east-1.amazonaws.com/amazon-ecs-agent-us-east-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.us-east-1.amazonaws.com/amazon-ecs-agent-us-east-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| us-west-1 | 美國西部 (加利佛尼亞北部) |  [Amazon ECS init amd64](https://s3.us-west-1.amazonaws.com/amazon-ecs-agent-us-west-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.us-west-1.amazonaws.com/amazon-ecs-agent-us-west-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.us-west-1.amazonaws.com/amazon-ecs-agent-us-west-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.us-west-1.amazonaws.com/amazon-ecs-agent-us-west-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| us-west-2 | 美國西部 (奧勒岡) |  [Amazon ECS init amd64](https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| ap-east-1 | 亞太地區 (香港) |  [Amazon ECS init amd64](https://s3.ap-east-1.amazonaws.com/amazon-ecs-agent-ap-east-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.ap-east-1.amazonaws.com/amazon-ecs-agent-ap-east-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.ap-east-1.amazonaws.com/amazon-ecs-agent-ap-east-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.ap-east-1.amazonaws.com/amazon-ecs-agent-ap-east-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| ap-northeast-1 | 亞太地區 (東京) |  [Amazon ECS init amd64](https://s3.ap-northeast-1.amazonaws.com/amazon-ecs-agent-ap-northeast-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.ap-northeast-1.amazonaws.com/amazon-ecs-agent-ap-northeast-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.ap-northeast-1.amazonaws.com/amazon-ecs-agent-ap-northeast-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.ap-northeast-1.amazonaws.com/amazon-ecs-agent-ap-northeast-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| ap-northeast-2 | 亞太地區 (首爾) |  [Amazon ECS init amd64](https://s3.ap-northeast-2.amazonaws.com/amazon-ecs-agent-ap-northeast-2/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.ap-northeast-2.amazonaws.com/amazon-ecs-agent-ap-northeast-2/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.ap-northeast-2.amazonaws.com/amazon-ecs-agent-ap-northeast-2/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.ap-northeast-2.amazonaws.com/amazon-ecs-agent-ap-northeast-2/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| ap-south-1 | 亞太地區 (孟買) |  [Amazon ECS init amd64](https://s3.ap-south-1.amazonaws.com/amazon-ecs-agent-ap-south-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.ap-south-1.amazonaws.com/amazon-ecs-agent-ap-south-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.ap-south-1.amazonaws.com/amazon-ecs-agent-ap-south-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.ap-south-1.amazonaws.com/amazon-ecs-agent-ap-south-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| ap-southeast-1 | 亞太地區 (新加坡) |  [Amazon ECS init amd64](https://s3.ap-southeast-1.amazonaws.com/amazon-ecs-agent-ap-southeast-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.ap-southeast-1.amazonaws.com/amazon-ecs-agent-ap-southeast-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.ap-southeast-1.amazonaws.com/amazon-ecs-agent-ap-southeast-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.ap-southeast-1.amazonaws.com/amazon-ecs-agent-ap-southeast-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| ap-southeast-2 | 亞太地區 (悉尼) |  [Amazon ECS init amd64](https://s3.ap-southeast-2.amazonaws.com/amazon-ecs-agent-ap-southeast-2/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.ap-southeast-2.amazonaws.com/amazon-ecs-agent-ap-southeast-2/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.ap-southeast-2.amazonaws.com/amazon-ecs-agent-ap-southeast-2/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.ap-southeast-2.amazonaws.com/amazon-ecs-agent-ap-southeast-2/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| ca-central-1 | 加拿大 (中部) |  [Amazon ECS init amd64](https://s3.ca-central-1.amazonaws.com/amazon-ecs-agent-ca-central-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.ca-central-1.amazonaws.com/amazon-ecs-agent-ca-central-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.ca-central-1.amazonaws.com/amazon-ecs-agent-ca-central-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.ca-central-1.amazonaws.com/amazon-ecs-agent-ca-central-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| eu-central-1 | 歐洲 (法蘭克福) |  [Amazon ECS init amd64](https://s3.eu-central-1.amazonaws.com/amazon-ecs-agent-eu-central-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.eu-central-1.amazonaws.com/amazon-ecs-agent-eu-central-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.eu-central-1.amazonaws.com/amazon-ecs-agent-eu-central-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.eu-central-1.amazonaws.com/amazon-ecs-agent-eu-central-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| eu-west-1 | 歐洲 (愛爾蘭) |  [Amazon ECS init amd64](https://s3.eu-west-1.amazonaws.com/amazon-ecs-agent-eu-west-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.eu-west-1.amazonaws.com/amazon-ecs-agent-eu-west-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.eu-west-1.amazonaws.com/amazon-ecs-agent-eu-west-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.eu-west-1.amazonaws.com/amazon-ecs-agent-eu-west-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| eu-west-2 | 歐洲 (倫敦) |  [Amazon ECS init amd64](https://s3.eu-west-2.amazonaws.com/amazon-ecs-agent-eu-west-2/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.eu-west-2.amazonaws.com/amazon-ecs-agent-eu-west-2/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.eu-west-2.amazonaws.com/amazon-ecs-agent-eu-west-2/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.eu-west-2.amazonaws.com/amazon-ecs-agent-eu-west-2/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| eu-west-3 | Europe (Paris) |  [Amazon ECS init amd64](https://s3.eu-west-3.amazonaws.com/amazon-ecs-agent-eu-west-3/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.eu-west-3.amazonaws.com/amazon-ecs-agent-eu-west-3/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.eu-west-3.amazonaws.com/amazon-ecs-agent-eu-west-3/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.eu-west-3.amazonaws.com/amazon-ecs-agent-eu-west-3/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| sa-east-1 | 南美洲 (聖保羅) |  [Amazon ECS init amd64](https://s3.sa-east-1.amazonaws.com/amazon-ecs-agent-sa-east-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.sa-east-1.amazonaws.com/amazon-ecs-agent-sa-east-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.sa-east-1.amazonaws.com/amazon-ecs-agent-sa-east-1/amazon-ecs-init-latest.x86_64.rpm) [Amazon ECS aarch64](https://s3.sa-east-1.amazonaws.com/amazon-ecs-agent-sa-east-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| us-gov-east-1 | AWS GovCloud （美國東部） |  [Amazon ECS init amd64](https://s3.us-gov-east-1.amazonaws.com/amazon-ecs-agent-us-gov-east-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.us-gov-east-1.amazonaws.com/amazon-ecs-agent-us-gov-east-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.us-gov-east-1.amazonaws.com/amazon-ecs-agent-us-gov-east-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.us-gov-east-1.amazonaws.com/amazon-ecs-agent-us-gov-east-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 
| us-gov-west-1 | AWS GovCloud （美國西部） |  [Amazon ECS init amd64](https://s3.us-gov-west-1.amazonaws.com/amazon-ecs-agent-us-gov-west-1/amazon-ecs-init-latest.amd64.deb) (amd64) [Amazon ECS init arm64](https://s3.us-gov-west-1.amazonaws.com/amazon-ecs-agent-us-gov-west-1/amazon-ecs-init-latest.arm64.deb) (arm64)  |  [Amazon ECS init x86\$164](https://s3.us-gov-west-1.amazonaws.com/amazon-ecs-agent-us-gov-west-1/amazon-ecs-init-latest.x86_64.rpm) (x86\$164) [Amazon ECS aarch64](https://s3.us-gov-west-1.amazonaws.com/amazon-ecs-agent-us-gov-west-1/amazon-ecs-init-latest.aarch64.rpm) (aarch64)  | 

**使用非 Amazon Linux AMI 在 Amazon EC2 執行個體上安裝 Amazon ECS 容器代理程式**

1. 使用允許存取 Amazon ECS 的 IAM 角色來啟動 Amazon EC2 執行個體。如需詳細資訊，請參閱[Amazon ECS 容器執行個體 IAM 角色](instance_IAM_role.md)。

1. 連線到您的執行個體。

1. 在您的執行個體上安裝最新版本的 Docker。

1. 檢查您的 Docker 版本，驗證您的系統符合最低版本需求。如需有關 Docker 支援的詳細資訊，請參閱 [Amazon ECS EC2 容器執行個體](ecs-agent-versions.md)。

   ```
   docker --version
   ```

1. 下載適用於您作業系統和系統架構的 Amazon ECS 代理程式檔案並加以安裝。

   對於 `deb` 架構：

   ```
   ubuntu:~$ curl -O https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.amd64.deb
   ubuntu:~$ sudo dpkg -i amazon-ecs-init-latest.amd64.deb
   ```

   對於 `rpm` 架構：

   ```
   fedora:~$ curl -O https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.x86_64.rpm
   fedora:~$ sudo yum localinstall -y amazon-ecs-init-latest.x86_64.rpm
   ```

1. 編輯 `/lib/systemd/system/ecs.service` 檔案，並在 `[Unit]` 區段結尾處新增以下一行。

   ```
   After=cloud-final.service
   ```

1. (選用) 若要將執行個體註冊到 `default` 叢集之外的叢集，請編輯 `/etc/ecs/ecs.config` 檔案並新增以下內容。以下範例會指定 `MyCluster` 叢集。

   ```
   ECS_CLUSTER=MyCluster
   ```

   如需這些和其他代理執行時間選項的詳細資訊，請參閱「[Amazon ECS 容器代理程式組態](ecs-agent-config.md)」。
**注意**  
您可以選擇性地將您的代理程式環境變數存放在 Amazon S3 中 (可在啟動時使用 Amazon EC2 使用者資料將其下載到您的容器執行個體)。針對敏感性資訊 (例如私有存放庫的身分驗證登入資料)，此為建議選項。如需詳細資訊，請參閱[將 Amazon ECS 容器執行個體組態儲存於 Amazon S3 中](ecs-config-s3.md)及[在 Amazon ECS 中使用非AWS 容器映像](private-auth.md)。

1. 啟動 `ecs` 服務。

   ```
   ubuntu:~$ sudo systemctl start ecs
   ```

## 使用主機網路模式執行 Amazon ECS 代理程式
<a name="container_agent_host"></a>

當執行 Amazon ECS 容器代理程式時，`ecs-init` 將使用 `host` 網路模式建立容器代理程式容器。對於容器代理程式容器，這是唯一支援的網路模式。

對於容器代理程式啟動的容器，這允許您封鎖對 [Amazon EC2 執行個體中繼資料服務端點](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) (`http://169.254.169.254`) 的存取。這可確保容器不能從容器執行個體設定檔存取 IAM 角色憑證，並強制任務只使用 IAM 任務角色憑證。如需詳細資訊，請參閱[Amazon ECS 任務 IAM 角色](task-iam-roles.md)。

這也可讓容器代理程式不會在 `docker0` 橋接上爭奪連線和網路流量。

## Amazon ECS 容器代理程式日誌組態參數
<a name="agent-logs"></a>

Amazon ECS 容器代理程式會在您的容器執行個體儲存紀錄。

針對 1.36.0 版和更新版本的容器代理程式，根據預設，紀錄會位在 Linux 執行個體的 `/var/log/ecs/ecs-agent.log`，以及 Windows 執行個體的 `C:\ProgramData\Amazon\ECS\log\ecs-agent.log`。

針對 1.35.0 版和更舊版本的容器代理程式，根據預設，紀錄會位在 Linux 執行個體的 `/var/log/ecs/ecs-agent.log.timestamp`，以及 Windows 執行個體的 `C:\ProgramData\Amazon\ECS\log\ecs-agent.log.timestamp`。

根據預設，代理程式紀錄會每小時輪換一次，最多儲存 24 個日誌。

下列是容器代理程式組態變數，可用來變更預設的代理程式紀錄行為。如需有關所有可用組態參數的詳細資訊，請參閱 [Amazon ECS 容器代理程式組態](ecs-agent-config.md)或 GitHub 上的 [Amazon ECS Agent README](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)。

針對 1.36.0 和更新版本的容器代理程式，可參考以下使用 `logfmt` 格式時的範例日誌檔。

```
level=info time=2019-12-12T23:43:29Z msg="Loading configuration" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-agent:latest" module=parse.go
level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-pause:0.1.0" module=parse.go
level=info time=2019-12-12T23:43:29Z msg="Amazon ECS agent Version: 1.36.0, Commit: ca640387" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Creating root ecs cgroup: /ecs" module=init_linux.go
level=info time=2019-12-12T23:43:29Z msg="Creating cgroup /ecs" module=cgroup_controller_linux.go
level=info time=2019-12-12T23:43:29Z msg="Loading state!" module=statemanager.go
level=info time=2019-12-12T23:43:29Z msg="Event stream ContainerChange start listening..." module=eventstream.go
level=info time=2019-12-12T23:43:29Z msg="Restored cluster 'auto-robc'" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Restored from checkpoint file. I am running as 'arn:aws:ecs:us-west-2:0123456789:container-instance/auto-robc/3330a8a91d15464ea30662d5840164cd' in cluster 'auto-robc'" module=agent.go
```

以下是使用 JSON 格式時的範例日誌檔。

```
{"time": "2019-11-07T22:52:02Z", "level": "info", "msg": "Starting Amazon Elastic Container Service Agent", "module": "engine.go"}
```

# 為私有 Docker 映像檔設定 Amazon ECS 容器執行個體
<a name="private-auth-container-instances"></a>

Amazon ECS 容器代理程式可利用基本身分驗證，使用私有登錄檔進行身分驗證。當您啟用私有登錄檔身分驗證時，您可以使用您任務定義中的私有 Docker 映像。只有使用 EC2 的任務才支援此功能。

另一種啟用私有登錄檔身分驗證的方法，是使用 AWS Secrets Manager 安全地存放私有登錄檔登入資料，然後在容器定義中參考它們。這可讓您的任務使用來自私有儲存庫的映像。此方法支援使用 EC2 或 Fargate 的任務。如需詳細資訊，請參閱[在 Amazon ECS 中使用非AWS 容器映像](private-auth.md)。

Amazon ECS 容器代理程式會在啟動時尋找兩個環境變數：
+ `ECS_ENGINE_AUTH_TYPE` 可指定要傳送之身分驗證資料的類型。
+ `ECS_ENGINE_AUTH_DATA` 包含實際身分驗證的登入資料。

Linux 版 Amazon ECS 最佳化 AMI 會在容器執行個體啟動及每一次服務啟動時 (使用 **sudo start ecs** 命令)，針對這些變數掃描 `/etc/ecs/ecs.config` 檔案。不是 Amazon ECS 最佳化的 AMI 應將這些環境變數存放在一個檔案中，並使用 `--env-file path_to_env_file` 選項將它們傳遞到啟動容器代理程式的 **docker run** 命令。

**重要**  
我們不建議您在執行個體啟動時使用 Amazon EC2 使用者資料插入這些身分驗證環境變數，或使用 `--env` 選項將它們傳遞至 **docker run** 命令。這些方法不適合用於敏感性資料，例如身分驗證登入資料。如需將安全地將身分驗證登入資料新增至容器執行個體的詳細資訊，請參閱 [將 Amazon ECS 容器執行個體組態儲存於 Amazon S3 中](ecs-config-s3.md)。

## 身分驗證格式
<a name="docker-auth-formats"></a>

私有登錄檔身分驗證有兩種可用的格式，`dockercfg` 和 `docker`。

**dockercfg 身分驗證格式**  
`dockercfg` 格式使用存放在執行 **docker login** 命令時建立之組態檔中的身分驗證資訊。您可以透過在您的本機系統上執行 **docker login**，輸入您的登錄使用者名稱、密碼及電子郵件地址來建立此檔案。您也可以登入容器執行個體，並在該處執行命令。根據您的 Docker 版本，這個檔案會做為 `~/.dockercfg` 或 `~/.docker/config.json` 儲存。

```
cat ~/.docker/config.json
```

輸出：

```
{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "zq212MzEXAMPLE7o6T25Dk0i"
    }
  }
}
```

**重要**  
較新版本的 Docker 會如上所示，使用外部 `auths` 物件建立組態檔。Amazon ECS 代理程式只支援以下格式的 `dockercfg` 身分驗證資料，而不包含 `auths` 物件。如果您已安裝 **jq** 公用程式，即可使用以下命令擷取此資料：**cat \$1/.docker/config.json \$1 jq .auths**

```
cat ~/.docker/config.json | jq .auths
```

輸出：

```
{
  "https://index.docker.io/v1/": {
    "auth": "zq212MzEXAMPLE7o6T25Dk0i",
    "email": "email@example.com"
  }
}
```

在上述範例中，以下環境變數應新增到 Amazon ECS 容器代理程式在執行時間載入的環境變數檔案 (適用於 Amazon ECS 最佳化 AMI 的 `/etc/ecs/ecs.config`)。如果您不使用 Amazon ECS 最佳化 AMI，且您使用 **docker run** 手動啟動代理程式，請在啟動代理程式時使用 `--env-file path_to_env_file` 選項指定環境變數檔案。

```
ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}
```

您可以使用以下語法設定多個私有登錄檔：

```
ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example-01.com"},"repo.example-02.com":{"auth":"fQ172MzEXAMPLEoF7225DU0j","email":"email@example-02.com"}}
```

**docker 身分驗證格式**  
`docker` 格式會使用代理程式應進行身分驗證的登錄伺服器 JSON 表示法。它也包含了該登錄所需要的身分驗證參數 (例如該帳戶的使用者名稱、密碼和電子郵件地址)。針對 Docker Hub 帳戶，JSON 表示法如以下內容所示：

```
{
  "https://index.docker.io/v1/": {
    "username": "my_name",
    "password": "my_password",
    "email": "email@example.com"
  }
}
```

在此範例中，以下環境變數應新增到 Amazon ECS 容器代理程式在執行時間載入的環境變數檔案 (適用於 Amazon ECS 最佳化 AMI 的 `/etc/ecs/ecs.config`)。如果您不使用 Amazon ECS 最佳化 AMI，且您使用 **docker run** 手動啟動代理程式，請在啟動代理程式時使用 `--env-file path_to_env_file` 選項指定環境變數檔案。

```
ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
```

您可以使用以下語法設定多個私有登錄檔：

```
ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"username":"my_name","password":"my_password","email":"email@example-01.com"},"repo.example-02.com":{"username":"another_name","password":"another_password","email":"email@example-02.com"}}
```

## 程序
<a name="enabling-private-registry"></a>

使用以下程序，開啟容器執行個體的私有登錄檔。

**若要在 Amazon ECS 最佳化 AMI 中啟用私有登錄檔**

1. 使用 SSH 登入您的容器執行個體。

1. 開啟 `/etc/ecs/ecs.config` 檔案，為您的登錄檔和帳戶新增 `ECS_ENGINE_AUTH_TYPE` 和 `ECS_ENGINE_AUTH_DATA` 值：

   ```
   sudo vi /etc/ecs/ecs.config
   ```

   此範例會驗證 Docker Hub 使用者帳戶：

   ```
   ECS_ENGINE_AUTH_TYPE=docker
   ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
   ```

1. 檢查您的代理程式是否是使用 `ECS_DATADIR` 環境變數儲存其狀態：

   ```
   docker inspect ecs-agent | grep ECS_DATADIR
   ```

   輸出：

   ```
   "ECS_DATADIR=/data",
   ```
**重要**  
若先前的命令並未傳回 `ECS_DATADIR` 環境變數，您必須停止任何在此容器執行個體上執行的任務，才能停止您的代理。較新的代理會使用 `ECS_DATADIR` 環境變數儲存其狀態，讓您可以在任務執行中時停止和啟動它們，而不會有任何問題。如需詳細資訊，請參閱[更新 Amazon ECS 容器代理程式](ecs-agent-update.md)。

1. 停止 `ecs` 服務：

   ```
   sudo stop ecs
   ```

   輸出：

   ```
   ecs stop/waiting
   ```

1. 重新啟動 `ecs` 服務。
   + 對於 Amazon ECS 最佳化 Amazon Linux 2 AMI：

     ```
     sudo systemctl restart ecs
     ```
   + 對於 Amazon ECS 最佳化 Amazon Linux AMI：

     ```
     sudo stop ecs && sudo start ecs
     ```

1. (選用) 您可以驗證代理已在執行中，並透過查詢代理自我檢查 API 操作，查看您新的容器執行個體的一些資訊。如需詳細資訊，請參閱[Amazon ECS 容器自我檢查](ecs-agent-introspection.md)。

   ```
   curl http://localhost:51678/v1/metadata
   ```

# Amazon ECS 任務與映像自動清理
<a name="automated_image_cleanup"></a>

每一次任務放置在容器執行個體上時，Amazon ECS 容器代理便會檢查任務中參考的映像是否是存放庫中指定標籤的最近版本。如果沒有，預設行為可讓代理程式從個別的儲存庫提取映像。若您經常更新任務和服務中的映像，您的容器執行個體儲存體可能會很快的被不再使用且可能永遠不會再使用的 Docker 映像填滿。例如，您可以使用連續整合和連續部署 (CI/CD) 管道。

**注意**  
您可以使用 `ECS_IMAGE_PULL_BEHAVIOR` 參數自訂 Amazon ECS 代理程式映像提取行為。如需詳細資訊，請參閱[Amazon ECS 容器代理程式組態](ecs-agent-config.md)。

同樣的，屬於已停止任務的容器也會使用日誌資訊、資料磁碟區和其他成品取用容器執行個體儲存體。這些成品有助於偵錯未預期停止的容器，但其中大多數的儲存體都可在一段時間之後安全的釋放。

根據預設，Amazon ECS 容器代理會自動清除停止的任務和您容器執行個體上不再由任何任務使用的 Docker 映像。

**注意**  
自動化映像清除功能需要至少 1.13.0 版本的 Amazon ECS 容器代理程式。若要將您的代理更新到最新版本，請參閱「[更新 Amazon ECS 容器代理程式](ecs-agent-update.md)」。

以下代理組態變數可用來調整您的自動化任務和映像清除體驗。如需如何在您的容器執行個體上設定這些變數的詳細資訊，請參閱「[Amazon ECS 容器代理程式組態](ecs-agent-config.md)」。

`ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION`  
等待刪除已停止任務容器的預設時間。如果該值設定為低於 1 秒，則會略過該值。根據預設，此參數會設為 3 小時，但您可以將此期間減少至 1 秒鐘 (若您的應用程式需要的話)。  
只要有容器仍在參考該映像，映像清除處理序便無法刪除映像。待容器移除後，所有未被引用的映像都將根據映像清理組態參數，成為待清理候選對象。

`ECS_DISABLE_IMAGE_CLEANUP`  
若您將此變數設為 `true`，則系統會關閉您的容器執行個體上的自動化映像清除，並且不會自動移除任何映像。

`ECS_IMAGE_CLEANUP_INTERVAL`  
此變數指定自動化映像清除處理序檢查要刪除之映像的頻率。預設值是每 30 分鐘，但您最多可以將此期間減少至 10 分鐘，以更頻繁的移除映像。

`ECS_IMAGE_MINIMUM_CLEANUP_AGE`  
此變數可指定提取映像後，到可清除該映像之間最小的時間長度。這可防止清除才剛提取的映像。預設值為 1 小時。

`ECS_NUM_IMAGES_DELETE_PER_CYCLE`  
此變數會指定單一清除週期中可移除多少映像。預設值為 5，最小值為 1。

當 Amazon ECS 容器代理程式正在執行中，且自動化映像清除未關閉時，代理程式會檢查未被執行中或已停止的容器參考的 Docker 映像檔，檢查頻率由 `ECS_IMAGE_CLEANUP_INTERVAL` 變數決定。若有找到未使用的映像，且其時間比 `ECS_IMAGE_MINIMUM_CLEANUP_AGE` 變數指定的最小清除時間還舊，則代理最多會移除 `ECS_NUM_IMAGES_DELETE_PER_CYCLE` 變數所指定數量的映像。最近參考時間距離現在最久的映像會先遭到刪除。在移除映像後，代理會等待直到下一個間隔，並重複此程序。