首页 > 解决方案 > 循环地图并将值分配给本地 - Terraform

问题描述

我正在尝试将值 s3 名称和 create_user 传递到 main.tf 中的本地块中,以便它们都具有列表中的值,然后我在模块 s3 的本地块中传递 list_of_bucket 以创建存储桶并在模块中循环 user_to_create s3_user 如果布尔值设置为 true,则创建用户。所有这些值都传递给 variable.tf,然后传递给 main.tf

开发者.tfvars

wea-nonprod = {
     
    services = {
     
      s3 = [
        sthree = {
          create_user = true,
        }
        sfour = {
          create_user = true,
        }
        sfive = {
          create_user = true,
        }
      ]
  }
}

变量.tf

variable "s3_buckets" {
  type = list(map)
}

主文件

locals { 
  users_to_create = ""
  list_of_buckets = ""
}

module "s3" {
  source = "../../s3"
  name = join("-", [var.name_prefix, "s3"])    
  tags = merge(var.tags, {Name = join("-", [var.name_prefix, "s3"])})
  buckets = list_of_buckets
  sse_algorithm = "AES256"
  access_log_bucket_name = var.access_log_bucket_name
}

module "s3_user" {
  for_each = local.users_to_create 
  source = "./service-s3-bucket-user"
  name = join("-", [var.name_prefix, each.key])
  tags = var.tags
  bucket_arn = module.s3.bucket_arns[each.key]
  depends_on = [module.s3]
}

标签: amazon-web-servicesamazon-s3terraformterraform-provider-aws

解决方案


只需遍历您的wea-nonprod地图:

locals { 
  users_to_create = [ for name in var.wea-nonprod.services.s3 if name.create_user == true ]
  list_of_buckets = [ for bucket in var.wea-nonprod.services.s3 ]
}

并对模块块进行了一些更改:


module "s3" {
  source                 = "../../s3"
  name                   = "${var.name_prefix}-s3"
  tags                   = merge(var.tags, { Name = "${var.name_prefix}-s3" })
  buckets                = local.list_of_buckets
  sse_algorithm          = "AES256"
  access_log_bucket_name = var.access_log_bucket_name
}

module "s3_user" {
  count      = length(local.users_to_create)
  source     = "./service-s3-bucket-user"
  name       = "${var.name_prefix}${local.users_to_create[count.index]}"
  tags       = var.tags
  bucket_arn = module.s3.bucket_arns[local.users_to_create[count.index]]
  depends_on = [module.s3]
}

推荐阅读