首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用terraform创建google存储桶,并为指定的存储桶设置生命周期规则

使用terraform创建google存储桶,并为指定的存储桶设置生命周期规则
EN

Stack Overflow用户
提问于 2022-04-22 09:30:44
回答 1查看 1.1K关注 0票数 0

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

variable.tf

代码语言:javascript
复制
variable "buckets" {
  description = "List of buckets"
  type        = list(string)
  default     = []
}

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

bucket.tf

代码语言:javascript
复制
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
      }
    }
  }
}

以上代码不能正常工作!我们的想法是定义这样的变量:

代码语言:javascript
复制
  buckets = [
    "bucket-mhmd-test1",
    "bucket-mhmd-test2",
    "bucket-mhmd-test3"
  ]
  bucket_deletion_rules = [
    {
    "bucket-mhmd-test1" = 50
    "bucket-mhmd-test2" = 10
    }
  ]

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

EN

回答 1

Stack Overflow用户

发布于 2022-11-29 13:40:55

动态块只能生成属于正在配置的资源类型、数据源、提供程序或提供程序的参数。不可能生成元参数块(如生命周期块和提供程序块),因为Terraform必须在计算表达式之前处理这些块。

这是来自文档的,也许可以解释为什么它不能正常工作。要动态地设置gcp生命周期策略,可以使用一个模块(例如,)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71966493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档