如何从 GC 存储中删除过时的 Firebase Cloud 函数容器?

olo*_*epe 19 firebase google-cloud-functions

所以最近 Firebase 开始对 Cloud Functions 容器存储收费:https : //firebase.google.com/pricing

无免费使用 $0.026/GB

我已经多次部署了 2 个函数(不超过 10 次,不记得确切数量,但这仍然很低,IMO)。现在我已经收取了少量费用(现在是几分之一)。因此,如果我再部署这些功能几十次,我将接近一美元,因为旧的(和未使用的)容器不会从存储桶中删除。

有没有办法安全地删除过时的、未使用的容器来释放一些空间?好吧,似乎花几美分不值得花时间,但是,这仍然不是免费套餐应有的样子。

Geo*_*gii 8

对于 Firebase Cloud Functions,您可以从其文档中看到(后台函数部分的生命周期):

当您通过部署更新的代码来更新函数时,旧版本的实例将与 Cloud Storage 和 Container Registry 中的构建工件一起被清理,并被新实例替换。

当您删除该函数时,所有实例和 zip 存档以及 Cloud Storage 和 Container Registry 中的相关构建工件都会被清除。函数和事件提供者之间的连接被删除。

这意味着无需手动清理,Firebase 部署脚本会自动执行此操作。

您不应删除构建工件,因为云函数会自动扩展,并且新实例是根据这些工件构建的。

我真的不认为成本几乎是一个问题,因为它是 0.026 美元/GB,所以你需要大约 76 个函数来为其工件存储支付 1 美元(我将 1 个函数的工件的大约大小视为 500mb)。此外,工件大小不应随每个函数而增长,因为它基本上是依赖项的大小,或多或少独立于已部署函数的数量


Dou*_*son 7

  1. 进入云控制台
  2. 从汉堡菜单中的产品中选择“云存储 -> 浏览器”。
  3. 您将在那里看到多个存储桶。只需挖掘以“artifacts”开头或以“cloudbuild”结尾的存储桶,然后删除您不想要的旧文件(按日期)。

  • 我的 Cloud Console 中的“存储浏览器”为空,但我的 Firebase 控制台显示我的存储使用 717MB,已发送 1.8GB 和 2.2k 请求。我从未使用过存储(但使用过函数),只是启用它试图找出发生了什么。我为此被收取了几美分的费用。我担心当应用程序进入 Prod 时,这会向我收取疯狂且过度的费用。谷歌应该真正修复它/提供更好的信息。 (9认同)
  • 嗯……我当然看到了水桶。如果这么简单的话我就不会问这个问题了。您是否注意到该存储桶中的文件实际上是 Docker 镜像层文件?所以一张图片对应有多个文件。您不能只删除一个“旧”文件,因为它可能是在以后的版本中重复使用的图像层。同样,函数版本和存储桶中的文件之间不存在 1 对 1 的关系。 (7认同)
  • 那不是这样的。您可能拥有一个永远(理论上)在所有后续图像中使用的图层。请参阅:https://docs.docker.com/storage/storagedriver/#images-and-layers,因为该主题超出了我的问题范围。 (3认同)
  • @DougStevenson 当 google 想要扩展 firebase 功能时不使用这些文件吗?添加规则来删除这些文件是否安全?就我而言,文件名类似于“/containers/images/sha256:000235e7a1f1da4e3688b91e01158c6ee3b6e32b3b9e2e97ad7d424bf0954d12” (2认同)

D G*_*D G 7

我发现这个持续存在的问题(目前)唯一可靠的解决方案是定期删除所有工件文件(按照 Doug 的说明)。正如其他人所指出的,删除一些文件可能会导致后续的部署错误(我经历过这些)。

重要提示:只删除工件文件,而不是文件夹,因为这也会导致问题。

您可以正常进行部分或完全部署而不会出现任何问题(似乎工件文件仅在构建/部署过程中被引用)。

从长远来看并不理想,但至少将存储使用量减少到最低限度(直到它再次开始累积)。

编辑:我已经在工件存储桶中尝试了生命周期规则,以尝试自动清除容器,但提供的参数不能保证一次性清除所有内容(您需要它)。

为方便起见,您可以通过选择“添加存储桶”选项并从 GCP 导入存储桶,从 Firebase 存储 UI 中查看工件存储桶。