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

如何通过Serverless Framework复用S3已有构件更新AWS CloudFormation栈

复用S3已有构件,仅更新CloudFormation栈的可行方案

如果只是修改了自定义资源、Lambda代码包完全没变化,想要复用S3中已上传的构件,只更新CloudFormation模板和栈配置,这里有几个实用的方法:

方法1:用--no-package参数直接部署

这是最省心的方式——Serverless Framework会跳过重新打包Lambda代码的步骤,直接读取之前部署后保留在.serverless目录里的状态文件(里面记录了已上传到S3的构件路径),然后仅生成更新后的CloudFormation模板,完成栈的更新。

执行命令:

serverless deploy --no-package

注意:要确保.serverless目录还保留着上次部署的状态文件(比如serverless-state.json、cloudformation-template-update-stack.json),这些文件是Serverless定位S3已有构件的关键。

方法2:在serverless.yml中指定S3构件路径

手动在配置文件里为Lambda函数指定已有的S3构件URI,这样Serverless会直接复用该构件,不会重新打包上传。

全局配置(所有函数共用同一个S3构件)

package:
  artifact: s3://your-bucket-name/path/to/existing-package.zip

functions:
  yourMainFunction:
    handler: handler.main
  yourSideFunction:
    handler: handler.sideTask

单个函数单独指定

如果不同函数有各自的构件,也可以在函数级别单独配置:

functions:
  yourMainFunction:
    handler: handler.main
    package:
      artifact: s3://your-bucket-name/path/to/main-function-package.zip

配置完成后,直接运行常规部署命令即可:

serverless deploy

方法3:用--no-upload参数跳过上传

如果你本地还保留着之前打包好的文件(比如.serverless/your-service.zip),且这个文件和S3上的构件完全一致,可以用--no-upload参数让Serverless跳过上传步骤,直接复用S3中已有的构件。

执行命令:

serverless deploy --no-upload

额外注意点

  • 要是你修改了Lambda的配置项(比如内存大小、超时时间、环境变量)但没改代码,以上方法同样适用——这些配置属于CloudFormation模板的一部分,会被正常更新。
  • 确保你的AWS账号权限足够:能读取指定的S3构件,同时有权执行CloudFormation栈的更新操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:07