排查 Amazon ECS 任务定义 CPU 或内存无效错误 - Amazon Elastic Container Service

排查 Amazon ECS 任务定义 CPU 或内存无效错误

使用 Amazon ECS API 或 AWS CLI 注册任务定义时,或者如果指定了无效的 cpumemory,则返回以下错误。

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 为单位指定。您可以通过将 GB 值乘以 1024 来其转换为 MiB。例如 1 GB = 1024 MiB。

CPU 值 内存值 AWS Fargate 支持的操作系统
256 (.25 vCPU) 512MiB、1GB、2GB Linux
512 (.5 vCPU) 1GB、2GB、3GB、4GB Linux
1024 (1 vCPU) 2GB、3GB、4GB、5GB、6GB、7GB、8GB Linux、Windows
2048 (2 vCPU) 4GB 到 16GB 之间 (以 1GB 为增量) Linux、Windows
4096 (4 vCPU) 8GB 到 30GB 之间 (以 1GB 为增量) 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 之间。

Amazon ECS 使用 CPU 周期和 CPU 配额来控制任务大小 CPU 硬限制。当您在任务定义中指定 vCPU 时,Amazon ECS 会将该值转换为适用于 cgroup 的 CPU 周期和 CPU 配额设置。

CPU 配额控制在给定 CPU 周期内授予 cgroup 的 CPU 时间。这两个设置均以微秒为单位表示。当 CPU 配额等于 CPU 周期时,意味着 cgroup 可以在一个 vCPU 上执行高达 100%(或在多个 vCPU 上执行任意比例,总计为 100%)。CPU 配额的最大值为 1000000us,CPU 周期最小为 1 ms。您可以使用这些值来设置 CPU 数量的限制。当您在不更改 CPU 配额的情况下更改 CPU 周期时,您的有效限制与您在任务定义中指定的限制不同。

100 ms 周期允许 vCPU 的范围为 0.125 到 10。

注意

Windows 容器将忽略任务级 CPU 和内存参数。