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

如何通过Github Actions将AWS ECR的Docker镜像部署到Elastic Beanstalk

问题解决:ECR镜像部署到Elastic Beanstalk的Github Actions配置

核心问题原因

你之前的代码仅创建了应用版本,但未给Elastic Beanstalk提供镜像引用配置——EB不知道要拉取哪个ECR镜像,因此即使版本显示生成成功,环境也不会更新内容。

必须的配置文件:Dockerrun.aws.json

是的,你需要Dockerrun.aws.json文件,它是EB容器环境的核心配置文件,用来指定ECR镜像地址、端口映射、环境变量等。单容器部署的基础配置如下:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "<ECR_IMAGE_URI>",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "3000"
    }
  ]
}

(注:Next.js默认端口为3000,可根据实际配置调整)

Github Workflow部署步骤的正确写法

部署流程需完成:生成包含Dockerrun.aws.json的zip包、上传到S3、创建关联该zip的应用版本、更新环境。完整代码如下:

- name: Deploy to Elastic Beanstalk
  run: |
    # 获取ECR镜像URI
    ECR_REGISTRY="${{ steps.login-ecr.outputs.registry }}"
    ECR_REPOSITORY=<你的仓库名>
    IMAGE_TAG="${{ github.sha }}"
    ECR_IMAGE_URI="$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

    # 生成版本标签(避免特殊字符)
    VERSION_LABEL="deploy-${{ github.sha }}"

    # 创建临时目录并生成Dockerrun.aws.json
    mkdir -p eb-deploy
    cat > eb-deploy/Dockerrun.aws.json << EOF
    {
      "AWSEBDockerrunVersion": "1",
      "Image": {
        "Name": "$ECR_IMAGE_URI",
        "Update": "true"
      },
      "Ports": [
        {
          "ContainerPort": "3000"
        }
      ]
    }
    EOF

    # 打包成zip文件
    zip -r eb-deploy.zip eb-deploy/

    # 上传zip到S3(可使用EB默认存储桶或自行创建)
    S3_BUCKET="<你的S3桶名>"
    aws s3 cp eb-deploy.zip s3://$S3_BUCKET/eb-deploy/$VERSION_LABEL.zip

    # 创建应用版本,关联S3中的zip包
    aws elasticbeanstalk create-application-version \
      --application-name <你的应用名> \
      --version-label $VERSION_LABEL \
      --source-bundle S3Bucket=$S3_BUCKET,S3Key=eb-deploy/$VERSION_LABEL.zip \
      --auto-create-application

    # 更新EB环境使用新版本
    aws elasticbeanstalk update-environment \
      --environment-name <你的环境名> \
      --version-label $VERSION_LABEL

关键注意事项

  • AWS权限:确保Github Actions使用的IAM角色拥有S3:PutObject(S3上传)、elasticbeanstalk:CreateApplicationVersion、elasticbeanstalk:UpdateEnvironment权限,同时EB环境的实例角色需具备ECR镜像拉取权限。
  • S3桶:可使用EB自动创建的默认存储桶(命名格式一般为elasticbeanstalk-<区域>-<账号ID>),也可自行创建。
  • 端口配置:若Next.js应用使用非3000端口,需修改Dockerrun.aws.json中的ContainerPort,并确保EB环境安全组开放对应端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:43:00