【问题标题】:Create GCS bucket with versioning使用版本控制创建 GCS 存储桶
【发布时间】:2019-12-21 04:24:25
【问题描述】:

我想创建带有版本控制的 GCS 存储桶。

我创建了子模块。

resource "google_storage_bucket" "cloud_storage" {
    project = "${var.project}"
    name = "${var.storage_name}"
    location = "${var.location}"
    storage_class = "${var.storage_class}"
    versioning = "${var.versioning}"
}

根据 Terraform doc,我可以传递版本控制参数来配置版本控制。

我不知道 versioning 参数接受什么样的数据。我尝试传递 bool (true)、map 和 list 如下。

地图

variable "versioning" {
  type = list
  default = {
    generation = true,
    metageneration = true
  }
}

列表

variable "versioning" {
  type = list
  default = [
    "generation",
    "metageneration"
  ]
  description = "Enable versioning on Bucket"
}

我在阅读this GCP Doc后尝试了这个


错误 错误我得到它如下。

Error: Unsupported argument

  on ../modules/storage/main.tf line 6, in resource "google_storage_bucket" "cloud_storage":
   6:     versioning = "${var.versioning}"

An argument named "versioning" is not expected here. Did you mean to define a
block of type "versioning"?

如果我不使用版本控制参数,该模块可以正常工作。但是,我想创建一个可以配置版本的模块。

如果我走错了方向,请告诉我。

任何帮助将不胜感激。

【问题讨论】:

  • metageneration 来自哪里?您应该有一个 versioning = { "enabled" = true } 块,仅此而已。
  • 我在阅读this 并猜测了版本控制的价值。感谢您的帮助。它适用于版本控制块 { enabled = true}。
  • 使用 Terraform 文档来确定您应该使用哪些参数,而不是使用底层 API 文档。
  • 我明白了。非常感谢。

标签: terraform terraform-provider-gcp


【解决方案1】:

错误消息表明 versioning 参数是一个块(不是地图),因此包含 '=' 会混淆 Terraform。

用途:

resource "google_storage_bucket" "foo" {
    ...
    versioning {
      enabled = true
    }
}

不是

resource "google_storage_bucket" "foo" {
    ...
    versioning = {
      enabled = true
    }
}

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2021-02-21
    • 2019-12-03
    相关资源
    最近更新 更多