【问题标题】:Why are all Google Cloud Function source files replicated for every function deployment?为什么每次功能部署都要复制所有 Google Cloud Function 源文件?
【发布时间】:2022-01-12 09:28:09
【问题描述】:

我通过 Firebase 控制台注意到我的 gcf-sources 存储桶(每个云功能区域一个)占用了大量存储空间。 (大约 2GB,当我的函数文件夹只有 47Mb 时)。

在挖掘其中一个存储桶后,我发现部署的每个函数都有 2 个文件夹(大概是最新的和最新的 -1 版本)。在这些文件夹中是一个 .zip 文件,其中包含整个 firebase 函数文件夹。所有脚本文件、完整的 node_modules 文件夹等。

你可以想象,这加起来非常快,2GB 是可以理解的。

我的问题是:

  1. 为什么每个函数都需要一个包含整个函数目录的 zip 文件?
  2. 我可以安全地删除所有这些吗?
  3. 我怎样才能防止这种情况再次发生?

对于更多的上下文,我已经完成了全部和部分功能部署,但无论哪种方式似乎都有相同的结果。

注意 - 在按照上一个问题清理我的人工制品文件夹后,我遇到了这个问题:How to delete outdated Firebase Cloud function containers from GC Storage?

【问题讨论】:

    标签: node.js firebase google-cloud-platform google-cloud-functions


    【解决方案1】:

    要了解原因,您需要了解流程。您的代码会上传到 Cloud Storage,并会根据您的代码构建一个容器(通过 Cloud Build 和 Buildpack)。每个 Cloud Functions 版本都是独立且不可变的,因此没有代码共享,每次部署一个函数时,都将整个代码部署在该函数和容器内。

    你能删除那些目录吗?是的你可以。部署后,桶上的源文件就没用了。如果需要,您可以在存储桶上设置生命周期并删除超过 1 天的文件。这样你就可以保持你的目录干净了。

    小心,我只谈论 gcf 源存储桶!因为容器存储在工件注册表中,如果您删除存储桶注册表,您现在可以再获取您的容器(和您的代码)。

    【讨论】:

    • 感谢您的解释。我仍然有点困惑,其他 SO 帖子上的答案暗示容器 can 可以安全删除(实际上 Firebase 的部署过程现在最终将它们删除)。我可以安全地删除容器(从容器控制台/让 Firebase 自动执行)删除 GCF 源存储桶是否正确?
    • Yes and no... 使用 Cloud Function v1,是的,您可以删除容器,因为只有最新的容器被部署并加载到 Cloud Functions 的缓存中。但是,对于 Cloud Functions v2,情况并非如此。事实上,您将能够对以前版本的代码执行回滚,如果您删除容器,它可能会非常戏剧化。我不想今天说“是”,在几个月后说“不”!
    • 好的,所以我今天所做的是删除 GCF 源存储桶删除所有容器(尽管有 10 多个功能,我实际上只有 2 个)。我现在在 GCF 源存储桶上设置了 1 天的保留策略。我现在将按照部署清理过程来管理容器。这感觉就像一个“新的开始”,所有功能目前都在工作。让我们看看发生了什么!谢谢
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多