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

如何从SAM项目生成CloudFormation模板以调用createStack接口

正确上传CloudFormation模板及解决S3文件体积过大问题操作步骤

1 前置优化:减少打包文件体积(解决S3体积报错核心)

  • 先清理SAM项目的冗余文件:构建前删除本地测试数据、依赖缓存、Node.js项目node_modules目录下的开发依赖、Python项目的__pycache__目录、.git目录等非运行必需文件
  • 分层打包依赖:运行时依赖单独打包为Lambda层,不要和业务代码一起打入SAM部署包,可减少90%以上的单包体积
  • 开启sam build的优化参数:执行sam build --cached --parallel,启用构建缓存和并行构建,避免重复打包冗余内容
  • 如果是带二进制依赖的项目(比如Python依赖Pillow、Numpy),使用sam build --use-container在AWS Lambda兼容的容器环境中构建,剔除宿主环境无关的冗余二进制文件

2 SAM转CloudFormation模板并正确上传的完整流程

  • 第一步:完成项目构建,执行sam build,确认构建产物在.aws-sam/build目录下无冗余文件
  • 第二步:执行package命令时指定S3前缀、开启去重上传,命令参考:
sam package \
  --s3-bucket <你的S3桶名> \
  --s3-prefix <自定义路径前缀,比如sam-app/deployments> \
  --output-template-file packaged-template.yaml \
  --force-upload false

--force-upload false会跳过已经上传过的相同哈希的文件,避免重复上传占用空间;如果单模板文件超过CloudFormation的512KB限制,可添加--use-json输出压缩后的JSON格式模板,或使用嵌套模板拆分大模板为多个子模板

注意:CloudFormation直接支持SAM模板部署,不需要额外手动转换格式,sam package生成的模板已经是兼容CloudFormation API的标准格式,可直接调用

  • 第三步:验证生成的packaged-template.yaml文件完整性,将该模板上传后的S3路径传入Lambda中cloudformation.createStack()接口的TemplateURL参数即可
  • 第四步:如果需要创建多个栈,在Lambda逻辑中复用同一个打包后模板的S3地址,每次调用createStack时传入不同的栈名和参数即可,不需要重复打包上传模板

3 额外注意事项

  • 如果单打包文件还是超过S3上传限制,检查是否误打包了大体积静态资源,静态资源单独上传到S3其他路径,不要打入部署包
  • 确保S3桶和你要部署CloudFormation栈的区域属于同一区域,跨区域调用会增加传输体积校验失败的概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:45:03