【问题标题】:SAM Deployment Fails with Size Issue For Lambda FunctionSAM 部署因 Lambda 函数的大小问题而失败
【发布时间】:2021-10-17 14:20:18
【问题描述】:

运行后

sam build --use-container && sam deploy --guided

CloudFormation 在创建 AWS Lambda 函数时失败并显示以下内容

CloudFormation Create Lambda Function Failed for Size Too Large

115885562 字节大小转换为大约 115 MB,当解压缩并包括函数代码和层时,Lambda 限制为 250 MB。

为什么会失败?

编辑:似乎 115885562 字节大小仅指 Lambda 函数,并且考虑了 250 MB 的总数(建议引用的 Lambda 层是剩余的字节大小——这是我的主要好奇心,我现在已经扣除了)。

【问题讨论】:

  • 为什么你的函数这么大?

标签: amazon-web-services aws-lambda amazon-cloudformation aws-sam


【解决方案1】:

如果您有任何大型依赖项,则您的函数依赖于为这些依赖项添加 Lambda 层,而不是在您的代码中包含它们。在任何情况下,您都希望您的函数尽可能小,因此从您的代码中删除依赖项并将它们添加到 Lambda 层中从长远来看会更好。

【讨论】:

  • 当您说从代码中删除依赖项时,您的意思是什么?我应该在 requirements.txt 中没有任何内容吗?因为在我的 template.yaml 中,我确实有以下部分用于 Lambda 层 code 资源:HelloWorldFunction:类型:AWS::Serverless::Function # 有关函数资源的更多信息:github.com/awslabs/serverless-application-model/blob/master/… 属性:CodeUri:hello_world/ 处理程序: app.lambda_handler 层:code
  • 您的代码中是否包含任何图像和/或更大的文件?而是直接在您的代码中上传不需要的任何类型的文件/对象并将其存储在 S3 或类似文件中。尝试通过 AWS 开发工具包访问它,看看是否可以让您的 Lambda 函数更小。最后,Lambda 函数越大,冷启动对你的函数来说也越大,所以尽量保持精简。
【解决方案2】:

您可以在解压缩之前检查 zip 文件的大小。如果大于 50MB,上传到 AWS Lambda 就太大了。但是,您可以使用容器来打包您的应用程序,这会将这个限制增加到 10GB。您可以查看PackageType in the AWS SAM documentation 来更改此设置。

另一种解决方案是对您拥有的任何大依赖项使用 lambda 层。

PS:sam build 的标志 --use-container 与你的函数的包类型无关。

【讨论】:

  • 如何在开箱前检查 zip 的大小?
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多