【问题标题】:Change count to for_each Terraform将计数更改为 for_each Terraform
【发布时间】:2021-03-25 05:51:52
【问题描述】:

如何将这一行改为for_each?我想获取 azurerm_network_connection_monitor 的资源 ID。所有这些资源都通过for_each进行迭代。

azurerm_network_connection_monitor.monitor[element(keys(var.names), count.index)].id

模块

resource "azurerm_network_connection_monitor" "monitor" {
  for_each             = var.names
  name                 = each.value.name
  network_watcher_name = var.network_watcher_name
  resource_group_name  = var.resource_group_name
  location             = var.location

  interval_in_seconds = each.value.interval_in_seconds

  source {
    virtual_machine_id = each.value.virtual_machine_id
    port               = var.source_port
  }

  destination {
    port    = each.value.port
    address = each.value.address
  }

  tags = var.tags
  }
}



resource "azurerm_monitor_metric_alert" "rtt_alert" {
  depends_on = [azurerm_network_connection_monitor.monitor]

  for_each            = var.rtt_criteria
  name                = "HPG-ALRT-${lookup(azurerm_network_connection_monitor.monitor, each.value["name"], null)}-001-${each.value.name}"
  resource_group_name = var.resource_group_name
  scopes              = [azurerm_network_connection_monitor.monitor[element(keys(var.names), count.index)].id]
  enabled             = each.value.enabled
  auto_mitigate       = var.auto_mitigate
  description         = each.value.description
  frequency           = each.value.frequency
  severity            = each.value.severity
  window_size         = each.value.window_size

  dynamic_criteria {
    metric_namespace         = each.value.metric_namespace
    metric_name              = each.value.metric_name
    aggregation              = each.value.aggregation
    operator                 = each.value.operator
    alert_sensitivity        = each.value.alert_sensitivity
    evaluation_total_count   = each.value.evaluation_total_count
    evaluation_failure_count = each.value.evaluation_failure_count
  }

  action {
    action_group_id = var.action_group_id
  }

  tags = var.tags
}

我不知道如何获取 azurerm_network_connection_monitor.monitor 的每个索引的 ID。

【问题讨论】:

    标签: terraform terraform-provider-azure hcl


    【解决方案1】:

    资源azurerm_network_connection_monitor 包含一个for_each 参数,其值为一个映射或一组字符串,Terraform 将为该映射或集合的每个成员创建一个实例。

    您可以使用values 函数获取地图并返回包含该地图中元素值的列表。

    你可以尝试这样设置:

    scopes              = [values(azurerm_network_connection_monitor.monitor)[*].id]
    

    类似的测试结果

    【讨论】:

    • 它可能适用于scopes = [values(azurerm_network_connection_monitor.monitor)[0].id],但我想获取每个警报的每个 ID。
    • 你如何定义var.namesvar.rtt_criteria
    • var.names 和 var.rtt_criteria 是 map(object) 类型。 variable "names" { type = map(object({})) }
    • 对于不同的资源监视器和不同的资源警报有一个单独的for_each。除非您使用本地表达式来构造监视器结果并将其传递到警报循环中,否则不可能在单独的循环中获取每个警报的每个监视器 ID。或者您可以重新生成一个公共变量以在两种资源中使用它。不确定,但我会试一试。
    【解决方案2】:

    我实际上得到了一个错误:

    因为我想在度量警报范围内使用 id

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 2021-01-17
      • 2021-07-09
      • 1970-01-01
      • 2021-10-18
      • 2023-03-15
      • 2021-08-02
      • 2020-12-19
      • 1970-01-01
      相关资源
      最近更新 更多