具有 for_each 条件的模块组合

Module composition with for_each conditional

在我的根模块上,我声明了两个模块(paired_regions_network 和 paired_regions_app),它们都迭代了一组区域。

module "paired_regions_network" {
  source                  = "./modules/network"
  application_hostname    = ["${module.paired_regions_app.website_hostname}"]  // THIS IS BREAKING THE CODE
  ...
  for_each = (var.environment == "TEST" || var.environment == "PROD") ? var.paired_regions : { region1 = var.paired_regions.region1 }
}

module "paired_regions_app" {
  source                  = "./modules/multi-region"
  ...
  for_each = (var.environment == "TEST" || var.environment == "PROD") ? var.paired_regions : { region1 = var.paired_regions.region1 }
}

output "network_outputs" {
  value = module.paired_regions_network
}

output "app_outputs" {
  value = module.paired_regions_app
}

迭代区域声明如下:

variable "paired_regions" {
  description = "The paired regions"
  default = { 
    region1 = { 
      ...
    },
    region2 = { 
      ...
    }
  }
}

我想从 paired_regions_network 模块访问来自 paired_regions_app 模块的输出,即 website_hostname 值,我想将其分配给 application_hostname参数,paired_regions_network模块,如上所示。

output "website_hostname" {
  value       = azurerm_app_service.was_app.default_site_hostname
  description = "The hostname of the website"
}

如何更改下面的行,以便我能够访问其他模块输出的网站主机名?

  application_hostname    = ["${module.paired_regions_app.website_hostname}"]

使用上面的代码,我得到了这个错误:

│ Error: Unsupported attribute
│
│   on main.tf line 24, in module "paired_regions_network":
│   24:   application_hostname    = ["${module.paired_regions_app.website_hostname}"]
│     ├────────────────
│     │ module.paired_regions_app is object with 2 attributes
│
│ This object does not have an attribute named "website_hostname".

由于您在 paired_regions_app 中使用 for_each,因此您必须按键访问其输出。

application_hostname    = [module.paired_regions_app[each.key].website_hostname]