

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

# 最佳化 Amazon ECS 上 AWS Fargate 任務的成本
<a name="optimizer-ecs-fargate"></a>

## 概觀
<a name="optimizer-ecs-fargate-overview"></a>

適當調整 AWS Fargate 任務的大小是成本最佳化的重要步驟。通常，應用程式是使用 Fargate 任務的任意大小來建置，而且永遠不會重新檢視。這可能會導致 Fargate 任務過度佈建和不必要的花費。本節說明如何使用 [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 提供可行的建議，以便針對在 Fargate 上執行的 Amazon Elastic Container Service (Amazon ECS) 服務最佳化任務 CPU 和記憶體。Compute Optimizer 也會量化採用這些建議的成本影響。這可讓您根據節省機會的大小，排定最佳化工作的優先順序。Compute Optimizer 建議提供容器層級的 CPU 和記憶體組態，以縮減任務大小。

## 成本利益
<a name="optimizer-ecs-fargate-cost-benefits"></a>

在 Fargate 上正確調整 Amazon ECS 任務的大小，可以為長時間執行的任務降低成本 30-70%。如果不檢閱應用程式效能指標以正確調整任務大小，您可以將 EC2 運算執行個體上使用的相同思維套用至容器大小。這會導致大型 Fargate 任務增加閒置資源的成本。您可以使用 Compute Optimizer 以反應方式呈現正確的大小調整機會。理想情況下，應用程式擁有者會檢閱特定應用程式效能指標，並移除作業系統額外負荷，以確保指定適當的任務大小。如需詳細資訊，請參閱本指南的將 [Windows 應用程式移至容器](windows-containers-main.md)一節。

## 成本最佳化建議
<a name="optimizer-ecs-fargate-rec"></a>

本節提供使用 Compute Optimizer 在 Fargate 任務上正確調整 Amazon ECS 大小的建議。

作為成本最佳化程序的一部分，我們建議您執行下列動作：
+ 啟用運算最佳化工具
+ 使用 Compute Optimizer 結果
+ 標記要調整大小的任務
+ 啟用成本分配標籤以使用 AWS 帳單工具
+ 實作正確的大小調整建議
+ 在 Cost Explorer 中檢閱成本前後

### 啟用運算最佳化工具
<a name="optimizer-ecs-fargate-rec-compute"></a>

您可以在[AWS Compute Optimizer](https://docs.aws.amazon.com/compute-optimizer/latest/ug/getting-started.html#account-opt-in)組織或單一帳戶層級啟用 AWS Organizations。整個組織的組態為所有成員帳戶在整個機群中新的和現有的執行個體提供持續報告。這可讓適當調整大小成為週期性活動，而不是point-in-time活動。

#### 組織層級
<a name="optimizer-ecs-fargate-rec-compute-org"></a>

對於大多數組織而言，使用 Compute Optimizer 最有效率的方式是在組織層級。這可為您的組織提供多帳戶和多區域可見性，並將資料集中到一個來源以供檢閱。若要在組織層級啟用此功能，請執行下列動作：

1. 使用具有[必要許可](https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html)的角色登入您的[AWS Organizations 管理帳戶](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)，並選擇加入此組織中的所有帳戶。您的組織必須[啟用所有功能](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html)。

1. 啟用管理帳戶後，您可以登入帳戶、查看所有其他成員帳戶，以及瀏覽他們的建議。

**注意**  
最佳實務是設定 Compute Optimizer 的[委派管理員帳戶](https://docs.aws.amazon.com/compute-optimizer/latest/ug/delegate-administrator-account.html)。這可讓您執行最低權限原則，將 AWS Organizations 管理帳戶的存取權降到最低，同時仍提供整個組織的服務存取權。

#### 單一帳戶層級
<a name="optimizer-ecs-fargate-rec-compute-account"></a>

如果您以成本高的帳戶為目標，但無法存取 AWS Organizations，您仍然可以為該帳戶和區域啟用 Compute Optimizer。若要了解選擇加入程序，請參閱 [入門 AWS Compute Optimizer](https://docs.aws.amazon.com/compute-optimizer/latest/ug/getting-started.html)。

**注意**  
建議會每天重新整理，最多可能需要 12 小時才能產生。請記住，Compute Optimizer 在過去 14 天內需要 24 小時的指標，才能在 Fargate 上為 Amazon ECS 產生建議。如需詳細資訊，請參閱 Compute Optimizer 文件中的 [Fargate 上的 Amazon ECS 服務需求](https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html#requirements-ecs-fargate)。

Compute Optimizer 會自動分析 Fargate 上 Amazon ECS 服務的下列 Amazon CloudWatch 和 Amazon ECS 使用率指標：
+ `CPUUtilization` – 服務中使用的 CPU 容量百分比。
+ `MemoryUtilization` – 服務中使用的記憶體百分比。

### 使用 Compute Optimizer 結果
<a name="optimizer-ecs-fargate-rec-results"></a>

考慮一個範例，專注於在單一帳戶和單一區域中進行正確的調整大小變更。在此範例中，運算最佳化工具會在所有帳戶的組織層級啟用。請記住，適當調整大小是一種破壞性程序，在大多數情況下，應用程式擁有者會在數週的排程維護時段以精確度執行。

如果您在組織的管理帳戶中導覽至 Compute Optimizer （如下列步驟所示），您可以選擇要調查的帳戶。在此範例中，一個任務正在 中過度佈建的單一帳戶中執行`us-east-1`。重點是調整 Amazon ECS 服務的建議大小。

1. 開啟 [Compute Optimizer 主控台](https://console.aws.amazon.com/compute-optimizer/)。

1. 在**儀表板**頁面上，依**問題清單篩選=過度佈建**，以查看 Fargate 上的所有 Amazon ECS 服務。

1. 若要檢閱 **Fargate 上過度佈建 ECS 服務**的詳細建議，請向下** **捲動，然後選擇**檢視建議**。

1. 選擇**匯出**並儲存檔案以供日後使用。
**注意**  
若要儲存建議以供未來檢閱，您必須有一個 S3 儲存貯體可供 Compute Optimizer 在每個區域中寫入 。如需詳細資訊，請參閱 Compute Optimizer 文件中的[適用於 的 Amazon S3 儲存貯體政策 AWS Compute Optimizer](https://docs.aws.amazon.com/compute-optimizer/latest/ug/create-s3-bucket-policy-for-compute-optimizer.html)。

若要查看 Compute Optimizer 的建議，請執行下列動作：

1. 在 [Compute Optimizer 主控台](https://console.aws.amazon.com/compute-optimizer/)中，前往**匯出建議**頁面。

1. 針對 **S3 儲存貯體目的地**，選擇您的 S3 儲存貯體。

1. 在**匯出篩選條件**區段中，針對**資源類型**，選擇 **Fargate 上的 ECS 服務**。

1. 在 **Fargate 的 ECS 服務建議**頁面上，深入了解 Fargate 上的其中一個 ECS 服務，並查看 Compute Optimizer 的 CPU 和記憶體建議。例如，檢閱**比較目前設定與建議任務大小**的建議，以及**比較目前設定與建議容器大小**區段的建議。

若要取得您需要正確調整大小的 Fargate ECS 服務清單，請執行下列動作：

1. 開啟 [Amazon S3 主控台](https://console.aws.amazon.com/s3/)。

1. 在導覽窗格中，選擇**儲存貯體**，然後選擇您匯出結果的儲存貯體。

1. 在**物件**索引標籤上，選取您的物件，然後選擇**下載**。

1. 在您下載的結果中，篩選調查結果欄，以僅顯示 Fargate 上的 **OVER\_PROVISIONED** Amazon ECS 服務。這會顯示您計劃針對適當大小設定目標的 Amazon ECS 服務。

1. 將任務定義存放在文字編輯器中以供日後使用。

### 適當調整標籤任務的大小
<a name="optimizer-ecs-fargate-rightsizing"></a>

標記工作負載是在 中組織資源的強大工具 AWS。您可以使用標籤來深入了解成本並啟用退款。有許多方法和策略可將標籤新增至 資源， AWS 以處理退款和自動化。如需詳細資訊，請參閱 AWS 白皮書[標記 AWS 資源的最佳實務](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html)。下列範例使用 [AWS CloudShell](https://console.aws.amazon.com/cloudshell/home)來標記目標帳戶和 內屬於任何 Amazon ECS 服務一部分的所有任務 AWS 區域。

```
#!/bin/bash
# Set variables
TAG_KEY="rightsizing"
TAG_VALUE="enabled"
# Get a list of ECS Clusters
ClustersArns=$( aws ecs list-clusters –query 'clusterArns' –output text)
for ClustersArn in $ClustersArns; do
 ServiceArns=$( aws ecs list-services –cluster $ClustersArn –query 'serviceArns' –output text)
 for ServiceArn in $ServiceArns; do
  TasksArns=$( aws ecs list-tasks –cluster $ClustersArn –service-name $ServiceArn –query 'taskArns' –output text)
  for TasksArn in $TasksArns; do
    aws ecs tag-resource –resource-arn $TasksArn –tags key=$TAG_KEY,value=$TAG_VALUE
  done
 done
done
```

下列程式碼範例示範如何啟用[標籤傳播](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html#ECS-UpdateService-request-propagateTags)至所有 Amazon ECS 服務。

```
#!/bin/bash
# Set variables
TAG_KEY="rightsizing"
TAG_VALUE="enabled"
# Get a list of ECS Clusters
ClustersArns=$(aws ecs list-clusters --query 'clusterArns' --output text)
for ClustersArn in $ClustersArns; do
 ServiceArns=$(aws ecs list-services --cluster $ClustersArn --query 'serviceArns' --output text)
 for ServiceArn in $ServiceArns; do
  aws ecs update-service --cluster $ClustersArn --service $ServiceArn --propagate-tags SERVICE &>/dev/null
  aws ecs tag-resource --resource-arn $ServiceArn --tags key=$TAG_KEY,value=$TAG_VALUE
 done
done
```

### 啟用成本分配標籤以使用 AWS 帳單工具
<a name="optimizer-ecs-fargate-rec-billing-tools"></a>

我們建議您啟用使用者定義的成本分配標籤。這可讓計費 AWS 工具 （例如 AWS Cost Explorer 和） 識別和篩選**權利調整**標籤 AWS Cost and Usage Report。如果您未啟用此功能，則標籤篩選選項和資料將無法使用。如需使用成本分配標籤的資訊，請參閱 文件中的 AWS 帳單與成本管理 [啟用使用者定義的成本分配標籤](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html)。

等待 24 小時後，您可以在 Cost Explorer 中看到 標籤，然後在下一節實作正確的大小調整建議。若要這樣做，請在 Cost Explorer 中搜尋 **Rightsizing** 標籤。

### 實作正確的大小調整建議
<a name="optimizer-ecs-fargate-rec-rightsizing-rec"></a>

Compute Optimizer 將提供任務或容器大小建議。若要實作正確的大小調整建議，請執行下列動作。

1. 開啟 [Amazon ECS 主控台](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選擇包含您任務定義的區域。

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

1. 在 **Task definitions** (任務定義) 頁面上，選擇任務，然後選擇 **Create new revision** (建立新修訂版)。

1. 在 **Create new task definition revision** (建立新任務定義修訂版) 頁面上進行變更。若要更新容器大小建議，請在 [ECS 任務定義](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size)中的 **containerDefinitions** 區塊`memory`下更新 `cpu`和 。例如：

   ```
   "containerDefinitions": [
   	{
   		"name": "your-container-name",
   		"image": "your-image",
   		"cpu": 1024,
   		"memory": 2048,
   	}
   ],
   ```

1. 驗證資訊，然後選擇 **Create** (建立)。

若要更新 Amazon ECS 服務，請執行下列動作：

1. 開啟 [Amazon ECS 主控台](https://console.aws.amazon.com/ecs/v2)。

1. 在 **Clusters** (叢集) 頁面上，選取您的叢集。

1. 在 **Cluster overview** (叢集概觀) 頁面中，選取服務，然後選擇 **Update** (更新)。

1. 針對 **Task definition** (任務定義)，選擇要使用的任務定義系列和修訂。

對於進階運算子，您可以使用 CloudShell 更新 Amazon ECS 服務。例如：

```
bash
#!/bin/bash
# Set variables
ClustersName="workshop-cluster"
ServiceName="lab7-fargate-service"
TaskDefinition="lab7-fargate-demo:3"
# update the service
aws ecs update-service --cluster $ClustersName --service $ServiceName --task-definition $TaskDefinition
```

### 檢閱成本前後
<a name="optimizer-ecs-fargate-rec-before-after"></a>

在您正確調整資源大小後，您可以使用 Cost Explorer，透過使用 **Rightsizing** 標籤來顯示成本前後。請記住，您可以使用[資源標籤](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html)來追蹤成本。透過使用多層標籤，您可以實現對成本的精細可見性。在本指南中涵蓋的範例中，**Rightizing** 標籤用於將一般標籤套用至所有目標執行個體。然後，**團隊**標籤用於進一步組織資源。下一個步驟是介紹應用程式標籤，以進一步顯示操作特定應用程式的成本影響。

考慮一個範例，說明在單一帳戶層級使用 **Rightsizing** 標籤可以實現的成本降低。在此範例中，營運成本從每天 30.26 美元降至每天 7.56 美元。假設每月 744 小時，適當調整規模之前的年度成本為 11，044.9 美元。在適當調整規模後，年成本降至 2，759.4 美元。這表示此帳戶的運算成本降低了 75%。試想這在大型組織中的影響。

開始適當調整大小的旅程之前，請考慮下列事項：
+ AWS 提供許多降低成本的選項。這包括 [AWS OLA](https://aws.amazon.com/optimization-and-licensing-assessment/)，其中 會在移至 之前 AWS 檢閱您的現場部署執行個體 AWS。OLA AWS 也為您提供適當大小的建議和授權指導。
+ 購買 [Savings Plans](https://aws.amazon.com/savingsplans/) 之前，請先完成所有正確的調整大小。這可協助您避免在 Savings Plans 承諾上過度購買。

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

我們建議執行下列步驟：

1. 檢閱您現有的環境，並考慮將 Amazon EBS gp2 磁碟區轉換為 gp3 磁碟區。

1. 檢閱 [Savings Plans](https://aws.amazon.com/savingsplans/)。

## 其他資源
<a name="optimizer-ecs-fargate-resources"></a>
+ [Compute Optimizer 入門 ](https://aws.amazon.com/compute-optimizer/getting-started/)(AWS 文件）
+ [標記 AWS 資源的最佳實務](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html) (AWS 白皮書）
+ [上的 Windows 容器 AWS](https://catalog.us-east-1.prod.workshops.aws/workshops/1de8014a-d598-4cb5-a119-801576492564/en-US) (AWS Workshop Studio)