1.Virtual.Network/monitor.tf (128 lines of code) (raw):
######################################################################
# Monitor (https://learn.microsoft.com/azure/azure-monitor/overview) #
######################################################################
locals {
monitorNetworks = [
for virtualNetwork in local.virtualNetworks: virtualNetwork if try(virtualNetwork.extendedZone.name, "") == ""
]
}
resource azurerm_private_dns_zone monitor {
name = "privatelink.monitor.azure.com"
resource_group_name = azurerm_resource_group.network.name
}
resource azurerm_private_dns_zone monitor_opinsights_oms {
name = "privatelink.oms.opinsights.azure.com"
resource_group_name = azurerm_resource_group.network.name
}
resource azurerm_private_dns_zone monitor_opinsights_ods {
name = "privatelink.ods.opinsights.azure.com"
resource_group_name = azurerm_resource_group.network.name
}
resource azurerm_private_dns_zone monitor_automation {
name = "privatelink.agentsvc.azure-automation.net"
resource_group_name = azurerm_resource_group.network.name
}
resource azurerm_private_dns_zone_virtual_network_link monitor {
for_each = {
for virtualNetwork in local.monitorNetworks : virtualNetwork.key => virtualNetwork
}
name = "${lower(each.value.key)}-monitor"
resource_group_name = azurerm_private_dns_zone.monitor.resource_group_name
private_dns_zone_name = azurerm_private_dns_zone.monitor.name
virtual_network_id = each.value.id
depends_on = [
azurerm_virtual_network.studio
]
}
resource azurerm_private_dns_zone_virtual_network_link monitor_opinsights_oms {
for_each = {
for virtualNetwork in local.monitorNetworks : virtualNetwork.key => virtualNetwork
}
name = "${lower(each.value.key)}-monitor-opinsights-oms"
resource_group_name = azurerm_private_dns_zone.monitor_opinsights_oms.resource_group_name
private_dns_zone_name = azurerm_private_dns_zone.monitor_opinsights_oms.name
virtual_network_id = each.value.id
depends_on = [
azurerm_virtual_network.studio
]
}
resource azurerm_private_dns_zone_virtual_network_link monitor_opinsights_ods {
for_each = {
for virtualNetwork in local.monitorNetworks : virtualNetwork.key => virtualNetwork
}
name = "${lower(each.value.key)}-monitor-opinsights-ods"
resource_group_name = azurerm_private_dns_zone.monitor_opinsights_ods.resource_group_name
private_dns_zone_name = azurerm_private_dns_zone.monitor_opinsights_ods.name
virtual_network_id = each.value.id
depends_on = [
azurerm_virtual_network.studio
]
}
resource azurerm_private_dns_zone_virtual_network_link monitor_automation {
for_each = {
for virtualNetwork in local.monitorNetworks : virtualNetwork.key => virtualNetwork
}
name = "${lower(each.value.key)}-monitor-automation"
resource_group_name = azurerm_private_dns_zone.monitor_automation.resource_group_name
private_dns_zone_name = azurerm_private_dns_zone.monitor_automation.name
virtual_network_id = each.value.id
depends_on = [
azurerm_virtual_network.studio
]
}
resource azurerm_private_endpoint monitor {
for_each = {
for virtualNetwork in local.monitorNetworks : virtualNetwork.key => virtualNetwork
}
name = "${azurerm_monitor_private_link_scope.monitor.name}-monitor"
resource_group_name = each.value.resourceGroup.name
location = each.value.resourceGroup.location
subnet_id = "${each.value.id}/subnets/Storage"
private_service_connection {
name = azurerm_monitor_private_link_scope.monitor.name
private_connection_resource_id = azurerm_monitor_private_link_scope.monitor.id
is_manual_connection = false
subresource_names = [
"azuremonitor"
]
}
private_dns_zone_group {
name = azurerm_monitor_private_link_scope.monitor.name
private_dns_zone_ids = [
azurerm_private_dns_zone.monitor.id,
azurerm_private_dns_zone.monitor_opinsights_oms.id,
azurerm_private_dns_zone.monitor_opinsights_ods.id,
azurerm_private_dns_zone.monitor_automation.id,
azurerm_private_dns_zone.storage_blob.id
]
}
depends_on = [
azurerm_subnet.studio,
azurerm_private_dns_zone_virtual_network_link.monitor,
azurerm_private_dns_zone_virtual_network_link.monitor_opinsights_oms,
azurerm_private_dns_zone_virtual_network_link.monitor_opinsights_ods,
azurerm_private_dns_zone_virtual_network_link.monitor_automation,
azurerm_private_endpoint.storage_file
]
}
resource azurerm_monitor_private_link_scope monitor {
name = data.terraform_remote_state.core.outputs.monitor.workspace.name
resource_group_name = data.terraform_remote_state.core.outputs.monitor.resourceGroup.name
ingestion_access_mode = "PrivateOnly"
query_access_mode = "PrivateOnly"
}
resource azurerm_monitor_private_link_scoped_service monitor_log_analytics {
name = "${data.terraform_remote_state.core.outputs.monitor.workspace.name}-log-analytics"
resource_group_name = data.terraform_remote_state.core.outputs.monitor.resourceGroup.name
linked_resource_id = data.terraform_remote_state.core.outputs.monitor.logAnalytics.id
scope_name = azurerm_monitor_private_link_scope.monitor.name
}
resource azurerm_monitor_private_link_scoped_service monitor_app_insights {
name = "${data.terraform_remote_state.core.outputs.monitor.workspace.name}-app-insights"
resource_group_name = data.terraform_remote_state.core.outputs.monitor.resourceGroup.name
linked_resource_id = data.terraform_remote_state.core.outputs.monitor.applicationInsights.id
scope_name = azurerm_monitor_private_link_scope.monitor.name
}
resource azurerm_monitor_private_link_scoped_service monitor_workspace_data {
name = "${data.azurerm_monitor_workspace.studio.name}-workspace-data"
resource_group_name = data.azurerm_monitor_workspace.studio.resource_group_name
linked_resource_id = data.azurerm_monitor_workspace.studio.default_data_collection_endpoint_id
scope_name = azurerm_monitor_private_link_scope.monitor.name
}