使用 terraform 创建多个 GCP 存储桶

Posted

技术标签:

【中文标题】使用 terraform 创建多个 GCP 存储桶【英文标题】:Create multiple GCP storage buckets using terraform 【发布时间】:2021-12-16 19:43:51 【问题描述】:

我使用 terraform 脚本在 GCP 中创建资源。脚本工作正常。但我的问题是 - 如何使用单个脚本创建多个存储桶。 我有两个用于创建存储桶的文件- main.tf 有 terraform code 来创建存储桶。 variables.tf 包含存储桶名称、project_id 等实际变量,如下所示:

variable "storage_class"  default = "STANDARD" 
variable "name"  default = "internal-demo-bucket-1"
variable "location"  default = "asia-southeast1" 

如何在变量名中提供多个存储桶名称?我试图在一个数组中提供多个名称,但构建失败。

【问题讨论】:

如果您的问题是关于创建多个资源(存储桶),请显示您使用的 HCL 和错误消息。 【参考方案1】:

我不知道您的所有要求,但是假设您需要创建几个具有不同名称的存储桶,而所有其他存储桶特征对于所讨论的集合中的每个存储桶都是不变的。

我会在variables.tf 文件中创建一个变量,即bucket_name_set

variable "bucket_name_set" 
  description = "A set of GCS bucket names..."
  type        = list(string)

然后,在 terraform.tfvars 文件中,我将为存储桶提供唯一名称:

bucket_name_set = [
  "some-bucket-name-001",
  "some-bucket-name-002",
  "some-bucket-name-003",
]

现在,例如,在main.tf 文件中,我可以描述资源:

resource "google_storage_bucket" "my_bucket_set" 
  project       = "some project id should be here"

  for_each      = toset(var.bucket_name_set)
  name          = each.value     # note: each.key and each.value are the same for a set

  location      = "some region should be here"
  storage_class = "STANDARD"
  force_destroy = true

  uniform_bucket_level_access = true

地形描述在这里:The for_each Meta-Argument

GCS 存储桶的地形描述在这里:google_storage_bucket

输入变量的地形描述在这里:Input Variables

【讨论】:

谢谢@al-dann。这正是我一直在寻找的。我的要求非常简单 - 只需创建多个存储桶。我有两个文件夹- main 和 modules。在我的主文件夹中,我有 main.tf 文件,它调用模块文件夹。在模块文件夹中,我有 main.tf 和 variables.tf。在这个文件夹中,我按照您的建议添加了 terraform.tfvars。我收到一个错误,例如“需要参数“bucket_name_set”,但未找到定义。”试图解决这个问题,因为我已经在 variables.tf 中定义了这个 arg 据我所知 - “bucket_name_set” - 将在一些变量文件中定义。在我上面的示例中 - 在“variabels.tf”文件中。您可能需要在您的“主”文件夹(以及“tfvars”文件)中,假设您的“模块”与存储桶列表无关 - 我想这对于“模块”并不重要 - 如何您要创建许多存储桶。 我能够通过在 variables.tf 文件本身中提供值来解决这个问题。感谢您的帮助!

以上是关于使用 terraform 创建多个 GCP 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

将多个文件上传到 Terraform 中的多个 S3 存储桶

加密存储在远程后端(如 GCS 存储桶)上的 Terraform 状态是不是有用?

在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源

Terraform - 同一个存储桶上的多个 aws_s3_bucket_notification 触发器

添加多个 S3 路径以使用 terraform 粘合爬虫

如何将 terraform 文件(main.tf)拆分为多个文件(无模块)?