

# Amazon ECS タスク定義の無効な CPU またはメモリエラーをトラブルシューティングする
<a name="task-cpu-memory-error"></a>

Amazon ECS API または AWS CLI を使用してタスク定義を登録する場合、無効な`cpu`または`memory`値を指定すると、以下のエラーが返されます。

```
An error occurred (ClientException) when calling the RegisterTaskDefinition operation: Invalid 'cpu' setting for task. 
```

**注記**  
Terraform の使用時に、以下のエラーが返される可能性があります。  

```
Error: ClientException: No Fargate configuration exists for given values.
```

この問題を解決するには、タスク定義でタスクの CPU とメモリにサポートされている値を指定する必要があります。`cpu` 値はタスク定義で、CPU ユニットまたは vCPU で表すことができます。タスク定義が登録されると、CPU ユニットを示す整数に変換されます。`memory` 値はタスク定義で、MiB または GB で表すことができます。タスク定義が登録されると、MiB を示す整数に変換されます。

`requiresCompatibilities` パラメータに `FARGATE` を指定しているタスク定義については (`EC2` も指定されている場合も)、次の表のいずれかの値を使用する必要があります。これらの値は、CPU とメモリのパラメータでサポートされる値の範囲を決定します。

Fargate でホストされるタスクの場合、次の表に有効な CPU とメモリの組み合わせを示します。JSON ファイルのメモリ値は MiB 単位で指定されます。この値に 1024 を掛けると、GB 値を MiB に変換できます。例えば、1 GB = 1024 MiB です。


|  CPU の値  |  メモリの値  |  AWS Fargate でサポートされるオペレーティングシステム  | 
| --- | --- | --- | 
|  256 (.25 vCPU)  |  512 MiB、1 GB、2 GB  |  Linux  | 
|  512 (.5 vCPU)  |  1 GB、2 GB、3 GB、4 GB  |  Linux  | 
|  1,024 (1 vCPU)  |  2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB  |  Linux、Windows  | 
|  2,048 (2 vCPU)  |  4 GB ～ 16 GB (1 GB のインクリメント)  |  Linux、Windows  | 
|  4,096 (4 vCPU)  |  8 GB ～ 30 GB (1 GB のインクリメント)  |  Linux、Windows  | 
|  8192 (8 vCPU)  このオプションには Linux プラットフォーム `1.4.0` 以降が必要です。   |  16 GB～60 GB (4 GB のインクリメント)  |  Linux  | 
|  16384 (16vCPU)  このオプションには Linux プラットフォーム `1.4.0` 以降が必要です。   |  32 GB～120 GB (8 GB のインクリメント)  |  Linux  | 

Amazon EC2 でホストされているタスクでサポートされるタスク CPU の値は、0.25 vCPU ～ 192 vCPU です。

CPU 制御メカニズムは、EC2 と Fargate で異なります。
+ Amazon EC2 でホストされているタスクの場合: Amazon ECS は、CPU 期間と CPU クォータを使用して、タスクサイズの CPU ハード制限を制御します。タスク定義で vCPU を指定すると、Amazon ECS は `cgroup` に適用される CPU 期間と CPU クォータの設定に値を変換します。
+ Fargate でホストされているタスクの場合: Amazon ECS は CPU 共有を使用して CPU 割り当てを制御します。CPU クォータと期間値は、Fargate タスクの CPU 制限には使用されません。

Amazon EC2 タスクの場合、CPU クォータは特定の CPU 期間中に `cgroup` に付与される CPU 時間を制御します。どちらの設定も、マイクロ秒単位で表されます。CPU クォータが CPU 期間と等しい場合、`cgroup` は 1 つの vCPU で最大 100% (または複数の vCPU の場合は合計で 100% になる割合) まで実行できます。CPU クォータは最大 1,000,000 マイクロ秒で、CPU 期間は最小 1 ミリ秒です。これらの値を使用して CPU 数の制限を設定できます。CPU クォータを変更せずに CPU 期間を変更する場合、有効になる制限はタスク定義で指定した制限とは異なります。

100 ミリ秒の期間では、0.125～10 の vCPU を使用できます。

**注記**  
タスクレベル CPU およびメモリのパラメータは Windows コンテナでは無視されます。