如何在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 } } }
代码解释
entity_type属性:lookup(var.rule_map, each.key, {})会获取当前规则的自定义配置,若规则不在rule_map中则返回空对象- 访问
.entity_type时,无自定义配置会返回null,Terraform会自动忽略这个可选属性,不会报错
动态块
field_mapping:for_each判断当前规则是否有field_mappings配置,若无则传入空列表,动态块不会生成- 若有配置,则遍历数组逐个生成
field_mapping块,填充对应的字段值
内容的提问来源于stack exchange,提问作者Michał Dziepak
相关产品推荐
相关产品推荐

