如何将Terraform通过for_each创建的GCP通知通道应用到告警策略
Terraform 引用 GCP 通知通道的实现方法如下:
步骤1:调整告警策略变量结构
首先需要在business_metric_alert_policies变量定义中新增notification_channel_names字段,用于存储每个告警策略需要关联的通知通道的display_name列表,变量结构参考:
variable "business_metric_alert_policies" { type = list(object({ display_name = string condition_display_name = string filter = string duration = string comparison = string threshold_value = number trigger_count = number alignment_period = string per_series_aligner = string cross_series_reducer = string # 新增字段:存储需要关联的通知通道display_name列表 notification_channel_names = list(string) })) description = "业务指标告警策略配置列表" }
赋值变量时,直接填写对应要关联的通知通道名称即可,示例:
business_metric_alert_policies = [ { display_name = "API请求延迟过高告警" condition_display_name = "95分位延迟超过500ms" filter = "metric.type=\"run.googleapis.com/request_latencies\" resource.type=\"cloud_run_revision\"" duration = "60s" comparison = "COMPARISON_GT" threshold_value = 500 trigger_count = 1 alignment_period = "60s" per_series_aligner = "ALIGN_PERCENTILE_95" cross_series_reducer = "REDUCE_PERCENTILE_95" # 关联两个已定义的通知通道 notification_channel_names = ["运维Opsgenie通道", "研发组告警通道"] } ]
步骤2:修改告警策略资源中的notification_channels参数
因为通知通道资源是通过for_each以display_name为key创建的,所以可以通过for表达式遍历每个告警策略绑定的通道名称,直接取出对应通知通道的资源ID即可,修改后的alert_policy.tf对应字段如下:
resource "google_monitoring_alert_policy" "business_metric_alert_policy" { for_each = { for inst in var.business_metric_alert_policies : inst.display_name => inst } display_name = each.value.display_name combiner = "OR" conditions { display_name = each.value.condition_display_name condition_threshold { filter = each.value.filter duration = each.value.duration comparison = each.value.comparison threshold_value = each.value.threshold_value trigger { count = each.value.trigger_count } aggregations { alignment_period = each.value.alignment_period per_series_aligner = each.value.per_series_aligner cross_series_reducer = each.value.cross_series_reducer } } } # 引用通知通道核心配置 notification_channels = [for channel_name in each.value.notification_channel_names : google_monitoring_notification_channel.alert_notification_opsgenie_channel[channel_name].id] }
特殊场景:关联所有已创建的通知通道
如果某个告警策略需要关联所有已创建的通知通道,无需逐个配置名称,可直接替换notification_channels配置为:
notification_channels = values(google_monitoring_notification_channel.alert_notification_opsgenie_channel)[*].id
内容的提问来源于stack exchange,提问作者jyostna lalitha
相关产品推荐
相关产品推荐

