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

CodeDeploy部署报错:修订版本超51200B上限求助

解决CodeDeploy ECS部署报错:The revision size is too large

我一眼就看出问题所在了——你混淆了CodeDeploy针对EC2和ECS部署的修订包要求,导致上传的Zip体积远超限制。下面给你一步步拆解问题和解决方案:

错误原因

CodeDeploy对于ECS部署的修订包(也就是你上传到S3的Zip文件)有严格的体积限制:最大50KB(51200字节)。这是因为ECS部署的修订包根本不需要包含你的应用代码,它只需要存放部署配置文件(appspec.yml和ECS任务定义JSON)。而你现在把整个NodeJS项目打包上传,体积肯定远超过50KB,自然触发了这个错误。

正确的ECS部署流程调整

ECS部署的核心是通过Docker镜像交付应用,CodeDeploy只负责更新ECS服务的任务定义。正确的Travis CI流程应该是:

  1. 构建NodeJS项目并执行测试
  2. 构建Docker镜像,推送到AWS ECR(或其他镜像仓库)
  3. 生成更新后的ECS任务定义JSON(替换镜像地址为当前构建版本)
  4. 编写ECS专用的appspec.yml
  5. 把appspec.yml和任务定义JSON打包成一个小体积Zip
  6. 上传这个Zip到S3,触发CodeDeploy部署

具体配置修改

1. 调整.travis.yml配置

替换你当前的before_deploy和deploy部分,改成如下内容(根据你的实际信息替换占位符):

language: node_js
node_js:
  - '12'
before_install:
  # 安装AWS CLI用于操作ECR和其他AWS服务
  - pip install --user awscli
  - export PATH=$PATH:$HOME/.local/bin
  # 登录AWS ECR(如果用Docker Hub的话替换为对应登录命令)
  - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <你的ECR仓库URI>
script:
  - npm install
  - npm test # 执行你的测试用例
before_deploy:
  # 构建Docker镜像并推送到ECR,用Travis构建号作为镜像标签
  - docker build -t <你的ECR仓库URI>:$TRAVIS_BUILD_NUMBER .
  - docker push <你的ECR仓库URI>:$TRAVIS_BUILD_NUMBER
  # 从模板生成最新的任务定义(先准备一个task-definition.json.tpl模板文件)
  - sed -e "s/<IMAGE_URI>/<你的ECR仓库URI>:$TRAVIS_BUILD_NUMBER/" task-definition.json.tpl > task-definition.json
  # 打包部署配置文件(只有appspec.yml和task-definition.json,体积极小)
  - zip deployment.zip appspec.yml task-definition.json
deploy:
  - provider: s3
    bucket: "myBucket"
    access_key_id: secure: keystuff
    secret_access_key: secure: keystuff
    local_dir: .
    upload_dir: deployments # 可选,在S3中创建一个目录存放部署包
    skip_cleanup: true
    on:
      branch: develop
  - provider: codedeploy
    bucket: "myBucket"
    key: deployments/deployment.zip # 对应S3中的文件路径
    bundle_type: zip
    application: "myApp"
    deployment_group: "myDeploymentGroup"
    region: "us-east-1"
    access_key_id: secure: keystuff
    secret_access_key: secure: keystuff
    on:
      branch: develop

2. 准备ECS任务定义模板

创建一个task-definition.json.tpl文件,把其中的镜像地址用占位符<IMAGE_URI>代替,示例:

{
  "family": "<你的任务定义名>",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "<你的容器名>",
      "image": "<IMAGE_URI>",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 3000,
          "hostPort": 3000,
          "protocol": "tcp"
        }
      ]
    }
  ],
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "256",
  "memory": "512"
}

3. 编写ECS专用的appspec.yml

替换你当前的appspec.yml为ECS部署专用的配置,示例:

version: 0.0
os: linux
resources:
  - targetService:
      type: AWS::ECS::Service
      properties:
        clusterName: "<你的ECS集群名>"
        serviceName: "<你的ECS服务名>"
        taskDefinition: "<你的任务定义名>" # CodeDeploy会自动使用打包的task-definition.json创建新版本
hooks:
  # 可选:添加部署前后的钩子脚本,如果不需要可以删除hooks部分
  BeforeDeployment:
    - location: scripts/before-deployment.sh
      timeout: 300
  AfterDeployment:
    - location: scripts/after-deployment.sh
      timeout: 300

验证调整

修改完成后重新触发Travis CI构建:

  1. 构建会自动把Docker镜像推送到ECR
  2. 生成的deployment.zip体积应该只有几KB,完全符合CodeDeploy的限制
  3. CodeDeploy会读取这个Zip中的配置,更新你的ECS服务,完成部署

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:24:57