AWS 无服务器 | 代码存储限制已超过上限

38

我在AWS上部署无服务器应用时出现了错误代码存储限制超出,总大小为409 B。

错误消息如下:

发生错误:HelloLambdaFunction - 代码存储限制超出。 (服务:AWSLambda; 状态码:400; 错误代码:CodeStorageExceededException; 请求ID:...)

6个回答

47

针对与无服务器有关的问题,我特别寻找到了https://github.com/serverless/serverless/issues/400。这是无服务器框架已知的一个问题。然而,一些创业者创建了一个解决方案来解决这个问题,使用一个插件能够修剪旧版本: https://github.com/claygregory/serverless-prune-plugin。这使您可以清除旧版本和代码存储而不删除整个堆栈。

例如,您可以使用以下命令删除除最后10个版本外的所有版本:

sls prune -n 10

还有更进一步的选项来限制阶段或区域。更好的是,可以将插件集成到部署中,自动删除除x版本外的所有版本。

我在我的当前无服务器项目中使用了这个插件,它兑现了承诺。


是的,它可以工作。但是,如果有许多带有许多版本的函数,则清除版本可能需要很长时间。E:\ git \ serverless> sls prune -n 20Serverless:Prune:正在查询已部署的函数版本 Serverless:Prune:dev-insertData已发布116个附加版本和0个别名,选择删除96个版本 Serverless:Prune:正在删除Function dev-insertData v118 ... Serverless:Prune:正在删除Function dev-insertData v117 ... 。 : Serverless:Prune:正在删除Function dev-insertData v23 ... - nbs
3
这是真的。如果您已经用完了代码存储空间,第一次修剪可能需要一些时间。使用插件进行修剪时,每次部署都会进行修剪,因此它只需要清理一个版本。因此,只有第一次修剪需要时间。 - Corin

19

根据发布版本 - AWS Lambda文档,CodeStorageExceededException的意思是:

您已超出账户的最大代码总大小限制。

根据AWS Lambda限制 - AWS Lambda文档:

  • 每个区域可上传的所有部署包的总大小:75 GB
  • Lambda函数部署包大小(压缩的.zip/.jar文件):50 MB
  • 可压缩到部署包中的代码/依赖项大小(未压缩的.zip/.jar大小):250 MB
  • 设置的环境变量总大小:4 KB

3
我知道 Lambda 的限制,但我在无服务器框架中遇到了这个问题。 - Ashish Kadam

8

如上所述,每个区域可上传的部署包总大小为75 GB。因此,如果我们设置

默认情况下,框架会为每次部署创建函数版本。这种行为是可选的,在您不通过其限定符调用过去版本的情况下,可以关闭它。如果您想要这样做,可以调用arn:aws:lambda:....:function/myFunc:3来调用版本3。

要关闭此功能,请设置提供程序级别的选项versionFunctions。

provider: versionFunctions: false


4

我解决了这个问题,使用sls remove命令删除云形成堆栈,并使用sls deploy命令部署无服务器项目。这对我起作用。


8
删除您的堆栈(可能会丢失附加资源中的数据)是危险的,而且对于有更安全解决方案的问题来说是过度的(例如,sls prune -n 10)。 - Slav
我完全同意这里应该有更多免责声明,说明这个命令正在做什么。 - Julian

3

0
对于像我一样使用Zappa并看到此错误的任何人,解决方案类似于sls prune,但是在您的zappa_settings.json中使用"num_retained_versions": 10(或者您关心的保留值)即可。正如已经提到的,您的区域有一定的版本配额,不清楚何时会达到限制,但当您达到限制时,找出原因非常麻烦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接