【问题标题】:Create google storage bucket using terraform and set life cycle rule for the specified buckets使用 terraform 创建 google 存储桶并为指定的桶设置生命周期规则
【发布时间】:2022-11-29 22:01:16
【问题描述】:

我有一个 terraform 模块来为用户创建一些具有指定权限的存储桶,现在我需要为一些桶指定一些生命周期规则,我需要在两个变量之间进行映射,如下所示:

变量.tf

variable "buckets" {
  description = "List of buckets"
  type        = list(string)
  default     = []
}

variable "bucket_deletion_rules" {
  description = "Ad-hoc Bucket deletion rules"
  type        = set(object({}))
  default     = [{}]
}

桶.tf

resource "google_storage_bucket" "data_bucket" {
  for_each                    = toset(var.buckets)
  name                        = each.key
  project                     = var.project
  location                    = var.region
  uniform_bucket_level_access = true
  versioning {
    enabled = false
  }

  dynamic "lifecycle_rule" {
    for_each = var.bucket_deletion_rules
    content {
      action {
        type = "Delete"
      }
      condition {
        age  = lifecycle_rule.value
      }
    }
  }
}

上面的代码不能正常工作!这个想法是像这样定义变量:

  buckets = [
    "bucket-mhmd-test1",
    "bucket-mhmd-test2",
    "bucket-mhmd-test3"
  ]
  bucket_deletion_rules = [
    {
    "bucket-mhmd-test1" = 50
    "bucket-mhmd-test2" = 10
    }
  ]

我试图在动态中放置一个嵌套的 for_each,但我无法将存储桶名称与存储桶删除规则进行比较。那么现在我如何定义变量并在这两个变量之间进行均衡以将规则应用于所需的桶?

【问题讨论】:

  • 错误是什么?
  • @MarkoE 没有错误,terraform 不关心生命周期并创建存储桶。

标签: google-cloud-platform terraform google-cloud-storage terraform-provider-gcp gcs


【解决方案1】:

动态块只能生成属于 正在配置的资源类型、数据源、提供者或供应者。 无法生成生命周期等元参数块 和配置块,因为 Terraform 必须在它之前处理这些 可以安全地评估表达式。

这是来自 docs 并且可以解释为什么它不能正常工作。要动态设置 gcp 生命周期策略,您可以使用模块(例如 this

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2019-11-01
    • 2016-06-23
    • 2021-04-18
    相关资源
    最近更新 更多