Firebase 存储库的构件非常庞大且不断增长。

38

我刚刚注意到我的应用程序的存储空间开始显著增加。

仔细查看后,发现这是由于“artifacts”存储桶引起的。

我可以看到“artifacts”存储空间每周以大约800Mb的速度增长,这让我非常担心。

我猜想这与Firestore函数部署(或者不是?)有关,但这真的是预期的吗?我能够安全地清理这些构件吗?

感谢任何有关如何安全处理此情况下的存储空间大小并将其消耗最小化的建议。

3个回答

62

我找到了一个解决方案-似乎可以在Google Cloud Console中设置自动删除规则,以清理那些混杂在存储中的图像。

  1. 进入Google Cloud控制台,选择您的项目->存储->浏览器 https://console.cloud.google.com/storage/browser

  2. 选择“artifacts”桶

  3. 在“生命周期”选项卡下添加规则以自动删除旧图像(在我的情况下,我设置“更新后1天后删除”,这对我来说效果很好)

enter image description here

现在存储是安全的!

注意:如果您稍后遇到任何部署问题,例如连续几天部署并给出部署错误,则只需手动删除artifacts中的整个“container”文件夹即可解决问题,然后重新部署。(确保不要删除artifacts bucket本身!)

希望Firebase团队会改善这种情况-当前的行为看起来很令人困惑,因为它很容易导致意外的账单,除非您采取额外的措施来防止这种情况发生。但是在它确实发生之前,你永远不会知道。


我也很惊讶,我以为有人黑了我的数据库:D 因为我大约有82个对象和总存储量约16 Mb。但是我的云存储显示已经存储了443Mb。我只使用云函数来存储评分和计算评论。你能解释一下这里发生了什么吗?我像你上面所做的那样检查了我的存储桶细节。当我检查我的us.artifacts时,有许多带有图像的文件,有些文件包含超过60 MB。我甚至没有使用功能来更改图像质量。你在哪里找到相关信息的?或者你能解释一下背后的情况吗? - Isuru Bandara
1
@IsuruBandara - 对我来说,这一切看起来都很出乎意料,所以我开始谷歌,并在SO的另一个线程中找到了一个类似的问题“这是什么?”-我已经在我的问题中包含了那个链接。正如Frank在那里提到的那样,如果您使用Node10+,这就是Firebase现在处理函数部署的方式。正如Doug在这里确认的那样,这现在是一种预期行为,我希望在某些时候会发生改变。 - vir us
1
我有90%的把握认为这个设置会导致云函数部署失败。我认为这是最近出现的问题:https://dev59.com/yFEG5IYBdhLWcg3wW7TO。还有其他人遇到这个问题吗? - Sameer Madan
这意味着问题出在别的地方。 - vir us
是的,我可以确认这个解决方案现在会导致部署出现问题。以前没有这个问题,但现在有了。https://groups.google.com/g/google-cloud-dev/c/xHqqTbRMXrk - koullislp
显示剩余4条评论

4
我假设这与云 Firestore 的函数部署有关,但这是否真的是预期的呢?
是的,这是预期的。每次部署函数时,Cloud Build 都会使用专用的 Cloud Storage 空间来构建 Docker 映像,并保留该映像直到您删除它。
我能够安全地清理这些构件吗?
是的,但那样你就不能轻松地恢复到以前的映像了。你需要从自己的源代码重新部署。

谢谢Dough。有没有办法管理这个过程,使其不会占用如此巨大的空间?还有任何上限吗,或者它将随着未来的部署无限增长?我猜以前从来没有这样的行为。 - vir us
1
有关如何控制这个过程的任何文档/参考资料吗?目前从您的回答中看来,除非我们在我们的端口明确控制它,否则默认情况下它将不断增加。如果您能详细说明一下,我们将不胜感激。 - vir us
好的,我以为这是一个与Firebase相关的过程,有文档记录在某处。无论如何,还是谢谢。 - vir us
1
嘿@DougStevenson,当你说部署一个函数时,你是什么意思?你是指每次运行一个函数,例如在我的应用程序中,如果我使它以这样的方式运行,即每次单击按钮时,云函数将运行以执行服务器功能,那么我的存储空间会每次增加,还是只有当我创建新函数时,我的函数占用的存储空间才会增加,这意味着如果我一年不编辑或创建新函数,则函数占用的存储空间也不会增加一年吗?请回答谢谢。 - Jesus Loves You
当我说运行一个函数时,我的意思是每次调用。 - Jesus Loves You
显示剩余2条评论

1
除了GCP的工件图像的生命周期设置外,您还可以考虑以下内容,以进一步优化和降低Firebase函数部署的成本:
  1. 清理你的functions文件夹,不要把不必要的文件放在里面,因为我们不知道Google是否只会按依赖项或整个functions文件夹上传文件。如果有人能确认,请随时完善此项。
  2. functions/package.jsonfunctions/node_modules和JS文件的require语句中删除不必要的依赖项,例如functions/index.js
  3. 通过删除不必要的注释、控制台日志等来压缩和压缩函数的JS文件,可以使用gruntuglify NPM包来实现。同样,我们不确定Cloud Build(或任何Google函数部署系统)是否会在将它们存储到容器注册表或云存储之前自动压缩函数的图像(如果您有更好的答案,请完善此项)。
  4. 正确组织你的函数,通过创建相关的函数组,这样你就可以只部署某些函数组而不是简单地使用firebase deploy --only functions
  5. 如有必要,编写自动检测和解决环境差异的代码,例如从本地模拟器到生产/暂存的环境变量,因为Firebase模拟器和生产环境可能不完全一致。如果你不这样做,由于某些疏忽,你可能需要每天部署多次--这会增加你的部署成本。
  6. 如有必要,更改你的部署计划:从每日到每周,甚至从每周到每月,具体取决于你的月度预算、重要性和紧急性。
最后,我希望社区也能够帮助在此帖子上添加更多的推荐成本削减计划和策略,以帮助一些小型企业和个人在Firebase和Google Cloud平台上更好地生存。即使只是一些好文章的链接也会很有帮助。谢谢!

如果我删除整个文件夹,那么我使用 Firebase 设置的 env 文件也会被删除吗? - chichi

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