使用Terraform部署AWS Lambda Layer报RequestEntityTooLargeException如何解决
报错根因
AWS Lambda 直接通过本地文件上传的层版本压缩包最大限制为50MB,你当前的压缩包大小为99MB,超出直传阈值,因此触发RequestEntityTooLargeException错误。
解决方案
方案1:优化压缩包体积
如果压缩后体积可以降到50MB以内,可直接保留原有配置逻辑,仅优化压缩包即可:
- 清理依赖冗余文件:删除Python依赖中的
__pycache__目录、.pyc缓存文件、测试用例、说明文档、示例代码等非运行必需文件 - 精简依赖安装:使用
pip install <依赖包> --no-cache-dir命令安装依赖,避免引入pip缓存文件,同时移除所有未实际使用的依赖包 - 提高压缩率:使用7-Zip等工具选择最高压缩率生成zip包,通常可比系统默认zip工具压缩率高20%~40%
方案2:通过S3中转上传
如果优化后压缩包仍超过50MB,可采用官方支持的S3中转方案,该方案支持最大50MB以上、解压后总大小不超过250MB的层上传:
- 先将你的
a.zip上传到和Lambda同区域的S3存储桶中 - 修改
layers.tf配置,替换原有filename参数为S3相关参数,示例配置如下:
resource "aws_lambda_layer_version" "aa" { s3_bucket = "替换为你的S3存储桶名称" s3_key = "替换为a.zip在S3桶中的对象路径,例如layers/aa/a.zip" layer_name = "aa" compatible_runtimes = ["python3.8"] }
注意:采用该方案需要保证运行Terraform的IAM身份拥有对应S3对象的
s3:GetObject权限,否则会触发权限类报错。
方案3:拆分Lambda层
如果压缩包解压后的总大小超过250MB(Lambda层解压后硬限制),需要将依赖拆分为多个独立的Lambda层,确保所有层叠加后的解压总大小不超过250MB即可。
修改配置完成后重新执行terraform apply即可完成部署。
内容的提问来源于stack exchange,提问作者Gabriel Lopes
相关产品推荐
相关产品推荐

