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

如何在Terraform中为特定Sentinel告警规则添加自定义属性

Terraform批量创建Azure Sentinel定时告警规则并添加自定义属性

需求说明

现有Terraform代码通过告警规则模板批量创建Azure Sentinel定时告警规则,所有属性均取自模板。现在需要为rule_map变量中指定的规则(如rule_1、rule_2)添加模板中没有的自定义属性:entity_type和field_mappings,实现类似“如果规则名称在rule_map中,就应用对应的自定义配置”的逻辑。

实现方案

利用Terraform的lookup函数读取自定义配置(不存在时返回默认值),结合**动态块(dynamic block)**条件渲染嵌套的field_mapping属性,既不会给无自定义配置的规则添加多余属性,也能正确应用指定规则的自定义设置。

修改后的完整代码

resource "azurerm_sentinel_alert_rule_scheduled" "alert_rule_scheduled_templated" {
  depends_on                 = [time_sleep.sleep_60_sec]
  for_each                   = toset(var.templated_alert_rule_templates)
  log_analytics_workspace_id = data.azurerm_log_analytics_workspace.log_analytics.id
  name                       = each.key
  display_name               = each.key
  severity                   = data.azurerm_sentinel_alert_rule_template.alert_rule_templates[each.key].scheduled_template.0.severity
  query                      = data.azurerm_sentinel_alert_rule_template.alert_rule_templates[each.key].scheduled_template.0.query
  query_frequency            = data.azurerm_sentinel_alert_rule_template.alert_rule_templates[each.key].scheduled_template.0.query_frequency
  query_period               = data.azurerm_sentinel_alert_rule_template.alert_rule_templates[each.key].scheduled_template.0.query_period
  tactics                    = data.azurerm_sentinel_alert_rule_template.alert_rule_templates[each.key].scheduled_template.0.tactics
  trigger_operator           = data.azurerm_sentinel_alert_rule_template.alert_rule_templates[each.key].scheduled_template.0.trigger_operator
  trigger_threshold          = data.azurerm_sentinel_alert_rule_template.alert_rule_templates[each.key].scheduled_template.0.trigger_threshold

  # 条件设置entity_type:当前规则在rule_map中则取对应值,否则忽略该属性
  entity_type = lookup(var.rule_map, each.key, {}).entity_type

  # 动态渲染field_mappings:仅当当前规则有对应配置时生成块
  dynamic "field_mapping" {
    for_each = lookup(var.rule_map, each.key, {}).field_mappings != null ? lookup(var.rule_map, each.key, {}).field_mappings : []
    content {
      identifier  = field_mapping.value.identifier
      column_name = field_mapping.value.column_name
    }
  }
}

代码解释

  1. entity_type属性:

    • lookup(var.rule_map, each.key, {})会获取当前规则的自定义配置,若规则不在rule_map中则返回空对象
    • 访问.entity_type时,无自定义配置会返回null,Terraform会自动忽略这个可选属性,不会报错
  2. 动态块field_mapping:

    • for_each判断当前规则是否有field_mappings配置,若无则传入空列表,动态块不会生成
    • 若有配置,则遍历数组逐个生成field_mapping块,填充对应的字段值

内容的提问来源于stack exchange,提问作者Michał Dziepak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:46