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

以ECR镜像为源的AWS Lambda CodeDeploy部署问题咨询

可行实现方案

你需要在ECR源阶段和CodeDeploy部署阶段之间新增一个CodeBuild阶段,完成镜像上传Lambda、动态生成AppSpec文件的逻辑,具体步骤如下:

步骤1:配置ECR源阶段输出

ECR作为CodePipeline源时,AWS会自动输出名为imageDetail.json的构件文件,里面包含你新推送镜像的完整URI、标签等元信息,将该阶段的输出构件命名为ecr-source-artifact即可。

步骤2:新增中间CodeBuild构建阶段

该阶段的核心作用是拉取ECR镜像部署为Lambda新版本、动态生成符合要求的AppSpec文件:

  • 输入构件选择上一步输出的ecr-source-artifact
  • 为CodeBuild服务角色添加以下权限:
    • lambda:UpdateFunctionCode
    • lambda:PublishVersion
    • lambda:GetAlias
    • ECR镜像拉取相关权限
  • 构建环境选择标准Amazon Linux 2公共镜像即可,内置awscli和jq工具
  • 配置buildspec.yml内容如下:
version: 0.2
phases:
  install:
    runtime-versions:
      python: 3.9
  pre_build:
    commands:
      # 从ECR源输出构件中提取镜像URI
      - IMAGE_URI=$(cat ecr-source-artifact/imageDetail.json | jq -r '.ImageURI')
      # 替换为你的实际Lambda函数名
      - LAMBDA_FUNC_NAME="awscodestar-gateway-api-lambda-HelloWorld"
      # 上传镜像到Lambda并发布新版本,获取新版本号
      - NEW_LAMBDA_VERSION=$(aws lambda update-function-code --function-name $LAMBDA_FUNC_NAME --image-uri $IMAGE_URI --publish | jq -r '.Version')
      # 获取当前蓝绿部署别名对应的旧版本号
      - CURRENT_LAMBDA_VERSION=$(aws lambda get-alias --function-name $LAMBDA_FUNC_NAME --name live | jq -r '.FunctionVersion')
  build:
    commands:
      # 动态生成AppSpec文件
      - |
        cat > appspec.json << EOF
        {
          "version": "0.0",
          "Resources": [
            {
              "$LAMBDA_FUNC_NAME": {
                "Type": "AWS::Lambda::Function",
                "Properties": {
                  "Name": "$LAMBDA_FUNC_NAME",
                  "Alias": "live",
                  "CurrentVersion": "$CURRENT_LAMBDA_VERSION",
                  "TargetVersion": "$NEW_LAMBDA_VERSION"
                }
              }
            }
          ]
        }
        EOF
artifacts:
  files:
    - appspec.json
  name: code-deploy-artifact

步骤3:配置CodeDeploy部署阶段

  • 输入构件选择CodeBuild阶段输出的code-deploy-artifact,CodeDeploy会自动读取构件内的appspec.json执行部署逻辑
  • 提前为CodeDeploy服务角色配置Lambda别名更新、版本查询相关权限即可正常运行蓝绿部署流程

注意事项

  • Lambda函数本身的执行角色需要配置ECR镜像拉取权限,否则镜像部署后Lambda会启动失败
  • 若你需要多个Lambda函数的部署逻辑,可调整buildspec逻辑遍历生成多组Resources配置即可
  • 该方案完全兼容CodeDeploy的蓝绿部署、流量灰度、版本回滚所有原生特性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:21:00