经过5-7次完整部署后,我遇到了一个错误:
“您已超出部署配额,请使用--only标志按批部署函数,并在再次部署之前等待几分钟。转到 https://firebase.google.com/docs/cli/#deploy_specific_functions 了解更多信息。”
目前不清楚原因是什么,我达到了哪个限制? 配额何时更新?
几分钟后,部署无法正常工作。
我在 Firebase 社区的 Slack 上寻求帮助,现在我明白了发生了什么。感谢 @katowulf。
关于配额限制,请参考以下链接: https://firebase.google.com/docs/functions/quotas#quota_limits_for_firebase_cli_deployment
我们有三个与部署相关的配额:
要查看您已达到的配额,请转到配额管理页面: 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
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
随着项目规模的扩大,这个错误的另一个潜在原因是(至少在 TypeScript 项目中),部署命令将您的代码转译到 src 旁边的一个名为 lib 的文件夹中。
问题在于,部署命令在创建新构建之前不清理您的旧构建。这没问题,直到您重命名某些文件或函数。旧文件仍然留在 lib 文件夹中,可能会导致一些问题。
我使用的解决方案是添加一个 predeploy 命令,在重新构建之前删除 lib 文件夹。在此处查看我的解决方案