繁体   English   中英

Firebase Functions - 您已超出部署配额

[英]Firebase Functions - You have exceeded your deployment quota

我有一个包含 70 多个函数的 Firebase Functions 项目。 它在节点 8 上运行。

在 5-7 次完全部署后,我收到一个错误:

You have exceeded your deployment quota, please deploy your functions in batches by using the --only flag, and wait a few minutes before deploying again. Go to https://firebase.google.com/docs/cli/#deploy_specific_functions to learn more

不清楚这是什么原因? 我达到了哪个限制? 配额什么时候更新?

几分钟后部署不工作。

我已经就 Firebase Community slack 寻求帮助,现在我明白发生了什么。 谢谢,@katowulf。

配额在此处描述: https : //firebase.google.com/docs/functions/quotas#quota_limits_for_firebase_cli_deployment

我们有 3 个与部署相关的配额,它们是:

  1. API 调用 (READ) - 每次部署调用 1 次,无论有多少函数
  2. API 调用 (WRITE) - 每个函数调用 1 个
  3. 最长构建时间 - 每个函数几分钟,具体取决于大小

要查看您点击了哪一个,您可以转到配额管理: https : //console.cloud.google.com/projectselector2/projectselector/iam-admin/quotas?service= cloudfunctions.googleapis.com&usage = ALL&supportedpurview =project

就我而言,我达到了配额3. Max build time限制为每天 12000 秒(默认情况下)。 经过一些实验,我注意到一个函数 deploy 增加了大约 70 秒的构建时间(在您的情况下可能是不同的数字!)。 因此,12000/70 每天提供大约 170 个功能部署。

在配额管理页面(第二个链接)上,您可以使用“ Edit Quota选项要求增加任何配额。 无需任何额外批准即可获得 36000 秒的构建时间,在我的情况下,这将单个功能的部署数量增加到每天 500 多个。

配额管理员

配额在 UTC-07:00 左右 0:00 重置为 0,我的功能部署到 us-central1。 所以一天似乎有一个固定的时间段(它不是最后 24 小时移动窗口)。

对于较大的项目,您不应一次部署整个项目,而应仅部署单个功能,如链接https://firebase.google.com/docs/cli/#deploy_specific_functions 中所述

您的函数有 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 错误。

如果您想部署每个功能,您可以做的是创建一个脚本,该脚本将为每个功能调用部署。 这将确保您不会超出生产限制。

在开发中,您知道哪些函数会根据代码更改而发生变化,因此您只能部署修改后的函数并进行测试。

为了解决这个问题,我维护了一个与 index.ts 文件相同的 shell 文件,并分别维护了这些函数。

详情请看图片单击此处查看图像

随着项目变大,导致此错误的另一个潜在原因是(至少在 typescript 项目中)deploy 命令将代码转译到 src 旁边名为 lib 的文件夹中。

问题是部署命令在创建新构建之前不会清理您的构建。 在您重命名某些文件或功能之前,这很好。 旧文件保留在 lib 文件夹中,这可能会导致一些问题。

我使用的解决方案是添加一个预部署命令,在重新构建之前删除 lib 文件夹。 在这里检查我的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM