You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置ECS Task Definition时CPU设置无效报错求助

AWS ECS Fargate任务定义CPU配置无效问题排查与解决

使用Terraform配置AWS ECS Fargate任务定义时,遇到CPU设置无效的报错,错误信息如下:

Error: creating ECS Task Definition (wb_td): ClientException: Invalid 'cpu' setting for task.

对应的Terraform配置代码:

resource "aws_ecs_task_definition" "this" {
  family                   = var.ecs_task_name
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = 1
  memory                   = 512
 #execution_role_arn       = aws_iam_role.ecs_execution.arn
 #task_role_arn            = aws_iam_role.ecs_task.arn
    
  container_definitions = jsonencode([{
    name      = "first"
    image     = "service-first"
    memory    = 128
    essential = true
    portMappings = [
      {
         containerPort = 80
         hostPort      = 80
      }
    ]
    },
    {
       name      = "second"
       image     = "service-second"
       memory    = 128
       essential = true
       portMappings = [
         {
           containerPort = 443
           hostPort      = 443
         }
       ]
     }
  ])
    
  tags = {
    Name = var.ecs_task_name
  }
}

问题原因

Fargate模式下,CPU和内存配置必须遵循AWS规定的固定组合,不能随意设置。当前配置中cpu = 1不符合Fargate的CPU规格要求,且与memory = 512的组合不合法。

修正方案

  • 调整CPU值为合法规格:Fargate的CPU取值只能是256、512、1024、2048、4096、8192、16384、32768(这些数值对应AWS定义的vCPU容量,例如256=0.25vCPU)。
  • 确保CPU与内存组合合法:比如内存设为512时,CPU只能是256。

修正后的配置示例:

resource "aws_ecs_task_definition" "this" {
  family                   = var.ecs_task_name
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = 256  # 修正为与512内存匹配的合法CPU规格
  memory                   = 512
 #execution_role_arn       = aws_iam_role.ecs_execution.arn
 #task_role_arn            = aws_iam_role.ecs_task.arn
    
  container_definitions = jsonencode([{
    name      = "first"
    image     = "service-first"
    memory    = 128
    essential = true
    portMappings = [
      {
         containerPort = 80
         hostPort      = 80
      }
    ]
    },
    {
       name      = "second"
       image     = "service-second"
       memory    = 128
       essential = true
       portMappings = [
         {
           containerPort = 443
           hostPort      = 443
         }
       ]
     }
  ])
    
  tags = {
    Name = var.ecs_task_name
  }
}

Fargate CPU与内存组合规则

  • 0.25vCPU(256):内存范围512 - 2048
  • 0.5vCPU(512):内存范围1024 - 4096
  • 1vCPU(1024):内存范围2048 - 8192
  • 2vCPU(2048):内存范围4096 - 16384
  • 4vCPU(4096):内存范围8192 - 32768
  • 8vCPU(8192):内存范围16384 - 65536
  • 16vCPU(16384):内存范围32768 - 131072
  • 32vCPU(32768):内存范围65536 - 262144

配置时需确保CPU和内存组合落在对应范围内,避免触发配置错误。

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:33:13