【问题标题】:Is there any terraform module to create folders within a Bucket (GCP)是否有任何 terraform 模块可以在 Bucket (GCP) 中创建文件夹
【发布时间】:2019-08-26 17:51:43
【问题描述】:

是否有任何 terraform 模块可以在 Bucket (GCP) 中创建文件夹? 也就是说,我已经知道通过模块 google_storage_bucket 我们可以在 GCP 中创建 GCS 存储桶。 但是,有没有办法使用 terraform 在存储桶(GCP)中创建文件夹?

谢谢,

【问题讨论】:

  • GCS(或任何与 S3 兼容的存储)中没有文件夹/目录之类的东西。相反,键可以包含/ 字符,然后将它们显示为好像它们具有目录结构。如果您想将 foo/bar/baz 写入 GC/S3 存储桶,那么您可以在不存在 foo/bar/ 的情况下执行此操作。阅读cloud.google.com/storage/docs/gsutil/addlhelp/…了解更多信息。

标签: google-cloud-platform terraform


【解决方案1】:

所以对您的问题的快速回答是:是的。您可以使用 Terraform 在存储桶中有效地创建一个空的“目录”。方法如下:

resource "google_storage_bucket" "storage_bucket" {
  name          = "my-really-awesome-test-bucket"
  location      = "us-east4"

  project       = "my-really-awesome-project"
}

resource "google_storage_bucket_object" "content_folder" {
  name          = "empty_directory/"
  content       = "Not really a directory, but it's empty."
  bucket        = "${google_storage_bucket.storage_bucket.name}"
}

请注意,您正在创建一个名称末尾带有 / 的对象。内容无处可去,只是因为模块需要它而存在。现在,当您登录 GCP 控制台时,您会在存储桶中看到空的“目录”,您可以将新对象上传到其中。

但是您应该知道这里还有其他一些事情。 Google Cloud Storage 使用平面文件系统。这意味着当您将对象上传到服务时,您并没有真正创建目录结构并将文件存储在其中。相反,您正在创建一个以整个路径(例如:'/bucket_name/directory1/directory2/filename')作为整个文件名的文件。它实际上比这更技术性,但这是一个粗略的解释。

【讨论】:

  • 我不确定在没有意义的情况下证明它在技术上可以完成是否特别有帮助。您的其余答案很好,尽管可以通过文档链接(例如我的评论)来改进它。
  • 几周前,我和我的队友遇到了一个非常有用的用例,所以我不会说它毫无意义。
  • 我不认为它没有意义。我登录到 GCP 控制台并创建了一个存储桶。在存储桶浏览器中,可以选择创建“文件夹”。我创建了一个名为“abc”的文件夹。这导致创建了一个名为“abc/”的对象。如果我们再看这里……cloud.google.com/storage/docs/gsutil/addlhelp/… 我们会看到“规则 4”适用。似乎对我有用(意见)。
【解决方案2】:

对象存储是完全平坦的。没有文件夹。当您在 UI 中看到文件夹或命令输出时,它只是描述如何向您显示它的元数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 2016-02-23
    • 2019-08-28
    • 2018-07-27
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多