Зацикливайтесь на картах и присваивайте значение локальной терраформе

#amazon-web-services #amazon-s3 #terraform #terraform-provider-aws

Вопрос:

Я пытаюсь передать значения s3 name и create_user в локальный блок в main.tf так что оба они имеют значение в списке, а затем я передаю list_of_bucket в локальном блоке в модуле s3 для создания сегментов и зацикливания user_to_create в модуле s3_user для создания пользователя, если логическое значение равно true. Все эти значения передаются в переменную.tf, а затем к main.tf

dev.tfvars

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

variable.tf

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

 

main.tf

 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]
}
 

Комментарии:

1. Пожалуйста, не задавайте повторяющихся вопросов. Там уже опубликован ответ. Если это не сработает, пожалуйста, прокомментируйте это и объясните, что не так, чтобы отвечающий мог потенциально внести в него изменения.

Ответ №1:

Просто пролистайте свою 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]
}