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

如何在未知当前版本时用CodeDeploy部署Lambda函数

解决方案:动态获取Lambda别名当前版本并部署

针对你遇到的CodeDeploy部署Lambda时需要动态指定currentversion的问题,提供两种可行方案:

方案一:通过CodePipeline前置Lambda步骤获取版本并替换appspec.yml

1. 编写获取别名版本的Lambda函数

创建一个Lambda函数,用于查询staging别名当前指向的版本,代码示例(Python):

import boto3

def lambda_handler(event, context):
    lambda_client = boto3.client('lambda')
    alias_info = lambda_client.get_alias(
        FunctionName='myLambdaFunction',
        Name='staging'
    )
    return {'current_version': alias_info['FunctionVersion']}

给该Lambda函数添加权限,允许执行lambda:GetAlias操作。

2. 在CodePipeline中新增前置阶段

在Build和Deploy阶段之间,添加一个名为Fetch Staging Current Version的阶段:

  • 动作类型选择AWS Lambda -> Invoke
  • 选择上面创建的Lambda函数
  • 设置输出变量:比如命名为CURRENT_VERSION,取值为$.current_version(用JSON路径提取Lambda返回的版本号)

3. 新增CodeBuild步骤替换appspec.yml占位符

在获取版本的阶段之后,添加一个CodeBuild动作:

  • 在Build项目中,将CURRENT_VERSION作为环境变量传入
  • 在Build脚本中执行替换命令,替换appspec.yml里的占位符:
    sed -i "s/{{CURRENT_VERSION}}/${CURRENT_VERSION}/" appspec.yml
    
  • 将修改后的appspec.yml作为输出产物传递给后续的CodeDeploy阶段

4. 修改appspec.yml模板

构建阶段生成的appspec.yml使用占位符:

version: 0.0
resources:
  - myLambdaFunction:
      type: "AWS::Lambda::Function"
      properties:
        name: myLambdaFunction
        alias: staging
        targetversion: "{{TARGET_VERSION}}"  # 构建阶段替换为新版本号
        currentversion: "{{CURRENT_VERSION}}"

方案二:改用CloudFormation管理Lambda别名(更简洁)

放弃CodeDeploy的appspec.yml方式,用CloudFormation直接管理Lambda别名,它会自动处理版本切换,无需手动指定currentversion。

1. 编写CloudFormation模板片段

Resources:
  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      # 你的Lambda函数基础配置

  StagingLambdaAlias:
    Type: AWS::Lambda::Alias
    Properties:
      FunctionName: !Ref MyLambdaFunction
      FunctionVersion: !Ref NewLambdaVersion  # 传入构建生成的新版本号
      Name: staging

2. 在CodePipeline中使用CloudFormation部署动作

将部署阶段替换为CloudFormation的Create/Update Stack动作,把构建阶段生成的Lambda新版本号作为参数传入模板,CloudFormation会自动更新staging别名指向新版本,无需关心旧版本号。

方案对比

  • 方案一:保留CodeDeploy的部署策略(如蓝绿部署、流量切换),适合需要复杂发布流程的场景。
  • 方案二:配置更简洁,无需处理版本号的动态替换,适合基础的别名更新场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:22:14