如何编写 Terraform 模块在同一个谷歌云存储桶中创建多个文件夹?

Sek*_*har 1 google-cloud-storage google-cloud-platform terraform terraform-provider-gcp

需要在 Google 云存储桶中创建多个文件夹。我知道可以创建存储桶,但不确定如何在同一个存储桶中创建多个文件夹。

我认为下面的代码适用于存储桶中的一个文件夹。

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

  project       = "my-project"
}

resource "google_storage_bucket_object" "my_folder" {
  name          = "fold/"
  bucket        = "${google_storage_bucket.storage_bucket.name}"
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何对多个文件夹执行此操作?

cla*_*arj 5

更新以添加 raj S 答案中的内容。


您可以使用一组字符串 和for_each。像下面这样:

variable "folders" {
  type    = set(string)
  default = []
}

resource "google_storage_bucket" "storage_bucket" {
  name     = "my-test-bucket"
  location = "us-east4"
  project  = "my-project"
}


resource "google_storage_bucket_object" "folder" {
  for_each = var.folders

  name    = each.key
  bucket  = google_storage_bucket.storage_bucket.name
  content = "folder_content"
}
Run Code Online (Sandbox Code Playgroud)

然后是一个示例输入:

folders = [
  "fold/",
  "dir/",
  ...
]
Run Code Online (Sandbox Code Playgroud)

这将根据输入在存储桶中动态创建fold和文件夹。dir

如果您不需要使文件夹列表动态化(即对它们进行硬编码而不是变量输入),您也可以使用局部变量而不是变量。就像是:

locals {
  folders = toset([
    "fold/",
    "dir/",
    ...
  ])
}

resource "google_storage_bucket" "storage_bucket" {
  name     = "my-test-bucket"
  location = "us-east4"
  project  = "my-project"
}


resource "google_storage_bucket_object" "folder" {
  for_each = local.folders

  name    = each.key
  bucket  = google_storage_bucket.storage_bucket.name
  content = "folder_content"
}

Run Code Online (Sandbox Code Playgroud)