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

AWS CodePipeline部署ECS蓝绿环境报错:STRING_VALUE无法转换为整数的问题排查求助

我之前在配置ECS蓝绿部署时也踩过这个一模一样的坑,这个模糊的STRING_VALUE can not be converted to an Integer报错确实很头疼,不过大概率是任务定义里的数值类型字段格式不对导致的,下面给你详细的排查思路和解决方案:

排查思路

1. 优先检查任务定义的数值字段类型

ECS的任务定义JSON对字段类型有严格要求,像cpu、memory(包括顶层和容器级的)、containerPort、hostPort这些字段必须是整数类型,不能用双引号包裹成字符串。你提供的taskdef.json里刚好存在这个问题:

  • 顶层的cpu是"256"(字符串),应该是纯数字256
  • 顶层的memory是"512"(字符串),应该是纯数字512
  • 容器定义里的memory是"512"(字符串),应该是纯数字512

ECS API在解析这些字段时,会尝试把字符串转成整数,失败后就会抛出这个模糊的错误,不会明确指出具体字段,这是ECS的一个常见坑点。

2. 验证任务定义的有效性

在CodePipeline里调试太麻烦,建议先用AWS CLI手动注册任务定义,这样能得到更明确的错误提示:

aws ecs register-task-definition --cli-input-json file://taskdef.json

如果任务定义有格式问题,CLI会直接告诉你哪个字段出错,比Pipeline里的模糊报错有用得多。

3. 确认CodePipeline的构件传递是否正确

检查Build阶段生成的构件,确保taskdef.json和appspec.yaml没有被错误修改,比如<TASK_DEFINITION>变量是否被正确替换成了合法的任务定义ARN或完整JSON。有时候Build脚本的错误会导致构件内容变形,也会触发这类解析错误。

解决方案

根据上面的排查,核心修复点是修改taskdef.json里的数值字段,去掉不必要的双引号,修改后的完整任务定义如下:

{
  "family": "my-project-web",
  "taskRoleArn": "arn:aws:iam::1234567890:role/ecsTaskRole-role",
  "executionRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole-web",
  "networkMode": "awsvpc",
  "cpu": 256,
  "memory": 512,
  "containerDefinitions": [
    {
      "name": "my-project",
      "memory": 512,
      "image": "01234567890.dkr.ecr.us-east-1.amazonaws.com/my-project:a09b7d81",
      "environment": [],
      "secrets": [
        { "name": "APP_ENV", "valueFrom": "arn:aws:secretsmanager:us-east-1:1234567890:secret:web/my-project-NBcsLj:APP_ENV::" },
        { "name": "PORT", "valueFrom": "arn:aws:secretsmanager:us-east-1:1234567890:secret:web/my-project-NBcsLj:PORT::" },
        { "name": "APP_NAME", "valueFrom": "arn:aws:secretsmanager:us-east-1:1234567890:secret:web/my-project-NBcsLj:APP_NAME::" },
        { "name": "LOG_CHANNEL", "valueFrom": "arn:aws:secretsmanager:us-east-1:1234567890:secret:web/my-project-NBcsLj:LOG_CHANNEL::" },
        { "name": "APP_KEY", "valueFrom": "arn:aws:secretsmanager:us-east-1:1234567890:secret:web/my-project-NBcsLj:APP_KEY::" },
        { "name": "APP_DEBUG", "valueFrom": "arn:aws:secretsmanager:us-east-1:1234567890:secret:web/my-project-NBcsLj:APP_DEBUG::" }
      ],
      "essential": true,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "",
          "awslogs-region": "",
          "awslogs-stream-prefix": ""
        }
      },
      "portMappings": [
        { "hostPort": 3000, "protocol": "tcp", "containerPort": 3000 }
      ],
      "entryPoint": [ "web" ],
      "command": []
    }
  ],
  "requiresCompatibilities": [ "FARGATE", "EC2" ],
  "tags": [ { "key": "project", "value": "my-project" } ]
}

完成修改后,按以下步骤验证:

  1. 用AWS CLI执行注册命令,确认任务定义能成功创建
  2. 更新CodePipeline的Build阶段,确保生成的构件是修改后的正确JSON文件
  3. 重新触发Pipeline,观察蓝绿部署动作是否正常执行

另外,你的appspec.yaml配置是没问题的,ContainerPort字段是整数类型,符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:42:40