You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform模块内传递for_each创建的App Insights ID至诊断设置

同一模块内为App Insights配置诊断设置的正确姿势

完全不需要用Terraform output——output的作用是把模块内部的资源属性暴露给模块外部用,同一模块里直接引用已创建资源的属性就够了。

具体实现代码

假设你已经用for_each创建了一批App Insights实例:

resource "azurerm_application_insights" "app_insights" {
  for_each             = var.app_insights_instances # 这个变量是你定义的,存着所有要创建的实例配置
  name                 = each.value.name
  location             = each.value.location
  resource_group_name  = each.value.resource_group_name
  application_type     = each.value.application_type
}

给每个实例加诊断设置时,只要把诊断设置的for_each和上面的App Insights资源绑定,直接通过each.value.id拿到对应实例的ID:

resource "azurerm_monitor_diagnostic_setting" "app_insights_diag" {
  for_each               = azurerm_application_insights.app_insights
  name                   = "${each.key}-diag-setting"
  target_resource_id     = each.value.id # 直接引用同一模块内App Insights的ID,一步到位
  log_analytics_workspace_id = var.log_analytics_workspace_id # 替换成你的日志工作区ID变量

  # 下面是示例日志和指标配置,按需调整
  log {
    category = "AppAvailabilityResults"
    enabled  = true

    retention_policy {
      enabled = false
    }
  }

  metric {
    category = "AllMetrics"
    enabled  = true

    retention_policy {
      enabled = false
    }
  }
}

关键注意点

  • 用for_each = azurerm_application_insights.app_insights可以让诊断设置和App Insights实例一一对应,不会出现漏配或错配的情况。
  • 如果你的var.app_insights_instances是列表类型,记得先转成映射(比如用toset()或者for表达式生成唯一键的map),因为for_each要求遍历的集合是键唯一的映射或集合。

内容的提问来源于stack exchange,提问作者uniholos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:59:56