Firebase Functions - 您已超出部署配额

14
我有一个使用 Node 8 的 Firebase Functions 项目,其中包含70多个函数。
经过5-7次完整部署后,我遇到了一个错误:
“您已超出部署配额,请使用--only标志按批部署函数,并在再次部署之前等待几分钟。转到 https://firebase.google.com/docs/cli/#deploy_specific_functions 了解更多信息。”
目前不清楚原因是什么,我达到了哪个限制? 配额何时更新?
几分钟后,部署无法正常工作。

您很可能超出了以下限制之一:https://firebase.google.com/docs/functions/quotas#quota_limits_for_firebase_cli_deployment - Umar Hussain
你是否在短时间内连续部署函数?你能告诉我这些部署的时间间隔吗? - Umar Hussain
4个回答

18

我在 Firebase 社区的 Slack 上寻求帮助,现在我明白了发生了什么。感谢 @katowulf。

关于配额限制,请参考以下链接: https://firebase.google.com/docs/functions/quotas#quota_limits_for_firebase_cli_deployment

我们有三个与部署相关的配额:

  1. API 调用(读取)- 每次部署 1 次调用,无论有多少个函数
  2. API 调用(写入)- 每个函数 1 次调用
  3. 最大构建时间 - 根据函数大小,每个函数几分钟不等

要查看您已达到的配额,请转到配额管理页面: https://console.cloud.google.com/projectselector2/projectselector/iam-admin/quotas?service=cloudfunctions.googleapis.com&usage=ALL&supportedpurview=project

在我的情况下,我已经达到了 3. 最大构建时间 配额限制,该限制默认为每天 12000 秒。通过一些实验,我注意到一个函数的部署会增加约 70 秒的构建时间(在您的情况下可能是不同的数字!)。因此,12000/70 大约可以实现每天部署约 170 个函数。

在配额管理页面(第二个链接)中,您可以使用“编辑配额”选项请求增加任何配额。在我的情况下,36000秒的构建时间可用,无需任何额外的批准,这使得个人函数部署数量每天超过500个。

配额管理

一个配额在UTC-07:00 0:00左右重置了,并且我的函数部署到us-central1。因此,一天似乎有一个固定的时间段(它不是最后24小时的移动窗口)。

对于更大的项目,您不应该一次性部署整个项目,而是像链接中描述的那样仅部署单个函数。https://firebase.google.com/docs/cli/#deploy_specific_functions


8
Firebase是否建议单独部署函数?这种方法会使CI变得困难,如果不是不可能的话。 - ForrestLyman
特别是考虑到没有禁用函数或函数触发器的方法-因此,如果您有导入大量数据的脚本,则必须删除并重新部署函数以避免不必要的触发器。实际上,我最常遇到的限制是删除时-而且我已经逐组删除了。但在Ci的环境中,100个限制是奇怪的。 - Misha Reyzlin
如果我们遇到这个错误并且只有一些函数部署,环境变量是否会被部署? - MadMac

4
你的函数超过70个,因此在短时间内部署5-7次将超出以下限制之一:https://firebase.google.com/docs/cli/#deployment_quotas 对于Firebase CLI部署的每个函数,以下类型的速率和时间限制会受到影响:
API calls (READ) - 1 call per deployment, no matter how many functions
    Limit: 5000 per 100 seconds
API calls (WRITE) - 1 call per function
    Limit: 80 per 100 seconds
Max build time - A few minutes per function depending on size
    Limit: 120 minutes per day

这是一个与您的错误可能有关的示例:https://firebase.google.com/docs/cli/#deployment_quotas 可能(虽然不太可能),您可能会超过限制 Firebase 部署操作的速率或容量的配额。例如,当部署大量函数时,您可能会收到 HTTP 429 配额错误消息。要解决此类问题,请尝试使用部分部署或请求特定 Firebase 服务的配额增加。例如,称为“每个用户每 100 秒写入请求数”的配额可能有助于解决上述 Cloud Functions 429 错误。
您可以创建一个脚本,为每个函数调用 deploy,如果您想要部署每个函数。这将确保您在生产中不会超过限制。
在开发中,根据代码更改,您知道哪些功能会有更改,因此您只能部署修改后的函数并进行测试。

谢谢,你真快,我只是想在这里分享我的发现 :) - Dariusz Bacinski

0
为了解决这个问题,我维护一个与index.ts文件相同的shell文件,并将函数分别深入其中。
请查看以下图片以获取详细信息: 点击此处查看图片

0

随着项目规模的扩大,这个错误的另一个潜在原因是(至少在 TypeScript 项目中),部署命令将您的代码转译到 src 旁边的一个名为 lib 的文件夹中。

问题在于,部署命令在创建新构建之前不清理您的旧构建。这没问题,直到您重命名某些文件或函数。旧文件仍然留在 lib 文件夹中,可能会导致一些问题。

我使用的解决方案是添加一个 predeploy 命令,在重新构建之前删除 lib 文件夹。在此处查看我的解决方案


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