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

如何结合Serverless部署与AWS Lambda PublishVersion版本发布?

回答

你完全不需要在serverless deploy执行完成后,手动逐个调用AWS CLI为每个Lambda发布版本,Serverless Framework原生支持Lambda版本管理能力,配置后可在部署流程中自动完成版本发布,和现有部署流程无缝衔接,不会增加额外操作步骤。

方案1:使用框架原生版本发布能力(推荐)

框架默认就内置了Lambda版本发布逻辑,只需要在serverless.yml中开启对应配置,原有部署命令不需要修改,执行部署时会自动完成所有关联函数的版本发布:

provider:
  name: aws
  region: eu-west-1 # 替换为你实际使用的区域
  runtime: nodejs18.x # 替换为你实际使用的函数运行时
  versionFunctions: true # 开启自动版本发布,该参数默认值即为true,多数场景下无需显式配置

如果你需要为发布的版本绑定固定别名(比如给integration环境的版本绑定integration别名,方便后续回滚、流量切分),可以直接在函数配置中声明别名,部署完成后框架会自动将别名指向本次发布的最新版本:

functions:
  test_lambda:
    handler: src/test.handler
    alias: integration # 自动绑定integration别名到本次发布的新版本
  # 其余函数同理配置即可

这种方式的优势是部署和版本发布在同一个流程内完成,不会出现部署失败但发布了无效版本、漏发某个函数版本的问题,稳定性最高。

方案2:自定义发布逻辑(适配个性化需求)

如果你需要自定义版本描述、或者在版本发布后执行额外操作(比如配置版本级权限、对接内部发布流程),可以通过框架的部署生命周期钩子实现批量自动发布,不需要手动枚举所有函数名:

  • 安装脚本钩子插件:
    serverless plugin install -n serverless-scriptable-plugin
    
  • 在serverless.yml中配置部署后钩子:
    custom:
      scriptHooks:
        after:deploy:finalize:
          - ./scripts/publishLambdaVersions.sh
    
  • 编写批量发版脚本publishLambdaVersions.sh,框架会自动将本次部署的所有函数名、区域等信息注入环境变量,无需硬编码:
    #!/bin/bash
    set -e
    # 遍历本次部署成功的所有Lambda函数
    for functionName in ${SERVERLESS_LAMBDA_FUNCTION_NAMES//,/ }
    do
      version=$(aws lambda publish-version \
        --function-name $functionName \
        --description "deployed at $(date "+%Y-%m-%d %H:%M:%S") for integration environment" \
        --region $AWS_REGION | jq -r '.Version')
      echo "Published version $version for function $functionName"
    done
    

脚本会在所有函数部署成功后自动执行,批量完成版本发布,后续新增函数时也不需要修改脚本。

注意事项

  • 不建议拆分部署和版本发布流程手动执行,一旦部署过程中部分函数更新失败,手动发版会导致版本和实际运行代码不一致,增加排障成本
  • 开启版本发布后,旧版本不会自动删除,如果需要清理历史版本,可以搭配生命周期策略自动完成,避免存储配额占用过高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:19:28