【问题标题】:Is there a way to refer to nested variable in Terraform script?有没有办法在 Terraform 脚本中引用嵌套变量?
【发布时间】:2022-01-26 13:20:18
【问题描述】:

我有一个 terraform 脚本,它试图引用同一资源中的属性。我需要将“azurerm_container_group.aci_caddy.fqdn”传递给容器组内的容器实例。

resource "azurerm_container_group" "aci_caddy" {
  resource_group_name = "aci_caddy"
  location            = local.location
  name                = "aci_caddy"
  os_type             = "Linux"
  dns_name_label      = "aci-caddykang"

  container {
    name   = "app"
    image  = "apptest:latest"
    cpu    = "0.5"
    memory = "0.5"
    
    environment_variables = {
      SITE_ADDRESS = "${azurerm_container_group.aci_caddy.fqdn}"
    }

  }
}

但是,我收到了错误消息。

│ Error: Self-referential block
│ 
│   on aci-caddy-main.tf line 29, in resource "azurerm_container_group" "aci_caddy":
│   29:       SITE_ADDRESS = "${azurerm_container_group.aci_caddy.fqdn}"
│ 
│ Configuration for azurerm_container_group.aci_caddy may not refer to itself.

有没有办法实现它?谢谢。

【问题讨论】:

    标签: terraform azure-rm


    【解决方案1】:

    您应该能够使用您的 dns_name_label 导出 SITE_ADDRESS。因此,不要硬编码 dns_name_label。您可以在 Terraform 中创建变量

    variable "dns_label" {
    type = string
    }
    

    然后在你的容器组资源中引用这个变量。

    resource "azurerm_container_group" "aci_caddy" {
      resource_group_name = "aci_caddy"
      location            = local.location
      name                = "aci_caddy"
      os_type             = "Linux"
      dns_name_label      = var.dns_label
    
      container {
        name   = "app"
        image  = "apptest:latest"
        cpu    = "0.5"
        memory = "0.5"
        
        environment_variables = {
          SITE_ADDRESS = "${var.dns_label}-westus.azurecontainer.io"
        }
    
      }
    }
    

    如果您想进一步改进这一点,您可以弄清楚如何从 azurerm 提供程序数据源获取区域/位置。我没有接触过 azure provider,所以无法快速找到它。但我知道 FQDN 是使用您的 dns_name_label 和 .azurecontainer.io 派生的。

    【讨论】:

    • 真是个坑!我们不能直接引用 FQDN。按照您的想法,使用 dns_label 、 region/location 和“azurecontainer.io”,我们可以生成 FQDN url。区域/位置可以由数据资源检索。唯一的事情是我们必须对字符串“azurecontainer.io”进行硬编码。
    • 如果你最终使用了我的建议,你能把答案标记为有用吗?
    【解决方案2】:

    您不能在其内部引用资源:azurerm_container_group.aci_caddy.fqdn,因为它尚未创建。您必须为您的 SITE_ADDRESS 创建新变量或本地值。

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 2017-10-10
      • 2021-08-08
      • 2020-04-23
      • 2021-09-29
      • 2021-12-07
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多