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

SAM打包简单Hello World Lambda后CloudFormation模板超1MB如何解决

问题原因及解决方案

一、打包生成28.7M大文件的原因及解决

默认情况下SAM打包会将当前工作目录下所有未被忽略的文件全部打入代码包,没有配置CodeUri和忽略规则的场景下,会把开发依赖、版本控制目录、日志、本地缓存文件等无关内容全部打包,就会出现仅Hello World代码也打出几十M包的情况。
可按以下步骤优化体积:

  • 正确配置Lambda函数的CodeUri属性,指向仅存放业务代码的单独目录(如你提到的src/),不要和配置文件、依赖目录放在同一层级。
  • 在项目根目录新增.samignore文件,和.gitignore规则一致,列出所有不需要打包的内容,示例配置:
# 版本控制目录
.git/
.github/

# 开发环境相关
venv/
node_modules/
__pycache__/
.idea/
.vscode/

# 日志及临时文件
*.log
tmp/
dist/
build/

# SAM打包产物
output.yaml
*.zip
  • 依赖裁剪:安装依赖时仅安装生产必要包,例如Node.js执行npm install --production,Python执行pip install --target src/ -r requirements.txt --no-dev,排除所有开发调试类依赖。
  • 大依赖抽离为Lambda层:如果有公共大依赖,可以单独抽成Lambda层,业务代码包仅放业务逻辑,进一步压缩代码包体积。

二、配置CodeUri后报「模板包含无效字符」的原因及解决

这个报错和CodeUri配置本身无关,基本是以下两个常见原因导致:

1. 模板语法错误

YAML格式对缩进、字符要求非常严格,常见错误点:

  • 缩进错误:必须使用2空格缩进,不能用制表符,CodeUri属性必须放在AWS::Serverless::Function资源的Properties子层级下,示例正确配置:
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
  • 模板内存在全角字符、不可见特殊字符:检查是否有全角空格、全角引号、复制粘贴带入的零宽空格等特殊符号,全部替换为半角字符。

2. CloudFormation调用参数填错(最常见原因)

你调用createStack时的TemplateURL参数填错了:

注意:sam package命令会生成两个产物,一是打包好的代码zip包上传到S3,二是生成替换完代码地址的CloudFormation模板文件output.yaml。
TemplateURL参数需要填写的是**output.yaml上传到S3后的访问地址**,而不是代码zip包的地址。你之前把代码zip包的地址填到TemplateURL,CloudFormation会把zip二进制文件当做YAML模板解析,自然会先报大小超限,代码包压缩后又会报无效字符。

正确操作流程:

  1. 执行sam package生成output.yaml
  2. 将output.yaml上传到你的S3存储桶
  3. 调用createStack时,TemplateURL填写output.yaml的S3地址即可。

内容的提问来源于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:27:01