terraform { required_version = "~> 0.12.21" required_providers { azurerm = "~> 1.44" } } data "azurerm_virtual_machine" "vm" { count = length(var.vms) name = var.vms[count.index].name resource_group_name = var.vms[count.index].resource_group_name } resource "azurerm_monitor_action_group" "azag" { count = length(var.ags) name = var.ags[count.index].name resource_group_name = var.rg_name short_name = var.ags[count.index].short_name email_receiver { name = var.ags[count.index].email_name email_address = var.ags[count.index].email_address } tags = var.tags } locals { alerts = flatten([ for azal in var.als : [ for vm in data.azurerm_virtual_machine.vm : { name = join(" on ", [azal.name,vm.name]) scopes = vm.id description = azal.description frequency = azal.frequency window_size = azal.window_size severity = azal.severity metric_namespace = azal.metric_namespace metric_name = azal.metric_name aggregation = azal.aggregation operator = azal.operator threshold = azal.threshold actiongroup_id = azal.actiongroup_id } ] ]) } resource "azurerm_monitor_metric_alert" "azalert" { for_each = {for alert in local.alerts: alert.name => alert} name = each.key resource_group_name = var.rg_name scopes = [ each.value.scopes ] description = each.value.description frequency = each.value.frequency window_size = each.value.window_size severity = each.value.severity criteria { metric_namespace = each.value.metric_namespace metric_name = each.value.metric_name aggregation = each.value.aggregation operator = each.value.operator threshold = each.value.threshold } action { action_group_id = element(azurerm_monitor_action_group.azag.*.id, each.value.actiongroup_id) } tags = var.tags depends_on = [var.azalert_depends_on] }