

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 を有効にする
+ Compute Optimizer の結果を使用する
+ 適切なサイズになるようにタスクにタグを付ける
+  AWS 請求ツールを操作するためにコスト配分タグを有効にする
+ 適切なサイズ設定の推奨事項を実装する
+ Cost Explorer で前と後のコストを確認する

### Compute Optimizer を有効にする
<a name="optimizer-ecs-fargate-rec-compute"></a>

組織レベルまたは AWS Organizationsの単一アカウントレベルで [AWS Compute Optimizer](https://docs.aws.amazon.com/compute-optimizer/latest/ug/getting-started.html#account-opt-in) を有効にできます。組織全体の設定では、すべてのメンバーアカウントのフリート全体の新規および既存のインスタンスの継続的なレポートが提供されます。これにより、適切なサイズ設定を、ポイントインタイムアクティビティではなく、繰り返し行うアクティビティにすることができます。

#### 組織レベル
<a name="optimizer-ecs-fargate-rec-compute-org"></a>

ほとんどの組織にとって、Compute Optimizer を使用する最も効率的な方法は組織レベルです。これにより、マルチアカウントとマルチリージョンの組織への可視性が提供され、レビューのためにデータを 1 つのソースに一元化できます。組織レベルでこれを有効にするには、以下を実行します。

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 が Fargate での Amazon ECS の推奨事項を生成するには、過去 14 日間に 24 時間分のメトリクスを必要とすることに注意してください。詳細については、Compute Optimizer ドキュメントの「[Requirements for Amazon ECS services on Fargate](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>

1 つのアカウントと 1 つのリージョン内で適切なサイズ変更を行うことに焦点を当てた例について考えてみましょう。この例では、Compute Optimizer はすべてのアカウントで組織レベルで有効になっています。適切なサイズ設定は破壊的なプロセスであり、ほとんどの場合、数週間にわたるスケジュールされたメンテナンス期間中にアプリケーション所有者が正確に実行するプロセスであるという点に注意してください。

組織の管理アカウント内から Compute Optimizer に移動する場合は (次の手順を参照)、調査するアカウントを選択できます。この例では、1 つのタスクが、`us-east-1` で過剰にプロビジョニングされている 1 つのアカウントで実行されています。焦点は、Amazon ECS サービスの推奨サイズへのサイズ変更です。

1. [Compute Optimizer コンソール](https://console.aws.amazon.com/compute-optimizer/)を開きます。

1. **[ダッシュボード]** ページで、Fargate のすべての Amazon ECS サービスを表示するには、**[検出結果] = [過剰なプロビジョニング]** でフィルタリングします。

1. **Fargate で過剰にプロビジョニングされた ECS サービス**の詳細な推奨事項を確認するには、****下にスクロールして **[推奨事項を表示]** を選択します。

1. **[エクスポート]** を選択し、後で使用するためにファイルを保存します。
**注記**  
今後のレビューのために推奨事項を保存するには、Compute Optimizer が各リージョンで書き込める S3 バケットが必要です。詳細については、Compute Optimizer ドキュメントの「[Amazon S3 bucket policy for 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 サービスの 1 つをドリルダウンし、Compute Optimizer の CPU とメモリの推奨事項を確認します。例えば、「**現在の設定と推奨タスクサイズの比較**」セクションと「**現在の設定と推奨コンテナサイズの比較**」セクションの推奨事項を確認します。

適切なサイズが必要な Fargate の ECS サービスのリストを取得するには、以下を実行します。

1. [Amazon S3 コンソール](https://console.aws.amazon.com/s3/)を開きます。

1. ナビゲーションペインで **[バケット]** を選択し、結果をエクスポートしたバケットを選択します。

1. **[オブジェクト]** タブで、オブジェクトを選択し、**[ダウンロード]** を選択します。

1. ダウンロードした結果で、検出結果列をフィルタリングして、Fargate の **OVER\$1PROVISIONED** 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) を使用して、ターゲットアカウントおよび AWS リージョン内の 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
  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
```

次のコード例は、すべての Amazon ECS サービスへの[タグ伝搬](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html#ECS-UpdateService-request-propagateTags)を有効にする方法を示しています。

```
#!/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) で **Rightsizing **タグが認識され、フィルタリングできるようになります。これを有効にしない場合、タグフィルタリングオプションとデータは使用できなくなります。コスト配分タグの使用の詳細については、 AWS Billing and Cost Management ドキュメントの「[ユーザー定義のコスト配分タグのアクティブ化](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/activating-tags.html)」を参照してください。

24 時間待ってから、次のセクションで適切なサイズ設定の推奨事項を実装する前に、Cost Explorer でタグを確認できます。これを行うには、Cost Explorer で **[ライトサイジング]** タグを検索します。

### 適切なサイズ設定の推奨事項を実装する
<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** ブロックで `cpu` と `memory` を更新します。例えば、次のようになります。

   ```
   "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 を使用し、**[ライトサイジング]** タグを使用して、前と後のコストを表示できます。[リソースタグ](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html)を使用してコストを追跡できることを思い出してください。複数のタグレイヤーを使用することで、コストをきめ細かく可視化できます。このガイドで説明する例では、**[ライトサイジング] **タグを使用して、すべてのターゲットインスタンスに汎用タグを適用します。次に、**[チーム]** タグを使用して、リソースをさらに整理します。次のステップでは、アプリケーションタグを導入して、特定のアプリケーションを運用する際のコストへの影響をさらに示します。

単一のアカウントレベルで **[ライトサイジング]** タグを使用することで実現できるコスト削減の例を考えてみましょう。この例では、運用コストは 1 日あたり 30.26 USD から 7.56 USD になります。1 か月あたり 744 時間と仮定すると、適切なサイズ設定の前の年間コストは 11,044.9 USD です。適切なサイズ設定の後、年間コストは 2,759.4 USD に削減されます。これにより、このアカウントのコンピューティングコストが 75% 削減されます。これが大規模な組織全体に及ぼす影響を想像してみてください。

適切なサイズ設定ジャーニーを開始する前に、次の点を考慮してください。
+ AWS には、コスト削減のための多くのオプションがあります。これには [AWS OLA](https://aws.amazon.com/optimization-and-licensing-assessment/) が含まれます。 は、移行する前にオンプレミスインスタンス AWS を確認します AWS。 AWS OLA には、適切なサイズの推奨事項とライセンスガイダンスも用意されています。
+ [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)