{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "metadata": { "_generator": { "name": "bicep", "version": "0.35.1.17967", "templateHash": "15677141178783498104" } }, "parameters": { "randomSeed": { "type": "string", "metadata": { "description": "Random number to be used in the name of the resources for uniqueness." } }, "userObjectId": { "type": "securestring", "metadata": { "description": "The user object id for the cluster admin." } } }, "variables": { "documentDBAccountContributorRole": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5bd9cd88-fe45-4216-938b-f97437e15450')]", "keyVaultAdministratorRole": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '00482a5a-887f-4fb3-b363-3b7fe8e74483')]", "appConfigStoreDataOwnerRole": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5ae67dd6-50cb-40e7-96ff-dc2bfa4b606b')]" }, "resources": [ { "type": "Microsoft.OperationalInsights/workspaces", "apiVersion": "2025-02-01", "name": "[format('mylogs{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]", "identity": { "type": "SystemAssigned" }, "properties": { "sku": { "name": "PerGB2018" } } }, { "type": "Microsoft.Monitor/accounts", "apiVersion": "2023-04-03", "name": "[format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]" }, { "type": "Microsoft.Dashboard/grafana", "apiVersion": "2024-10-01", "name": "[format('mygrafana{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]", "sku": { "name": "Standard" }, "identity": { "type": "SystemAssigned" }, "properties": { "grafanaIntegrations": { "azureMonitorWorkspaceIntegrations": [ { "azureMonitorWorkspaceResourceId": "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" } ] } }, "dependsOn": [ "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2022-04-01", "scope": "[format('Microsoft.Dashboard/grafana/{0}', format('mygrafana{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[guid(subscription().id, resourceGroup().id, parameters('userObjectId'), 'Grafana Admin')]", "properties": { "principalId": "[parameters('userObjectId')]", "principalType": "User", "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', '22926164-76b3-42b3-bc55-97df8dab3e41')]" }, "dependsOn": [ "[resourceId('Microsoft.Dashboard/grafana', format('mygrafana{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2022-04-01", "scope": "[format('Microsoft.Monitor/accounts/{0}', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[guid(subscription().id, resourceGroup().id, resourceId('Microsoft.Dashboard/grafana', format('mygrafana{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), 'Monitoring Data Reader')]", "properties": { "principalId": "[reference(resourceId('Microsoft.Dashboard/grafana', format('mygrafana{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2024-10-01', 'full').identity.principalId]", "principalType": "ServicePrincipal", "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'b0d8363b-8ddd-447d-831f-62ca05bff136')]" }, "dependsOn": [ "[resourceId('Microsoft.Dashboard/grafana', format('mygrafana{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.ContainerService/managedClusters", "apiVersion": "2024-10-01", "name": "[format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]", "sku": { "name": "Base", "tier": "Standard" }, "identity": { "type": "SystemAssigned" }, "properties": { "dnsPrefix": "myakscluster", "agentPoolProfiles": [ { "name": "systempool", "count": 2, "osType": "Linux", "mode": "System" } ], "networkProfile": { "networkPluginMode": "overlay", "networkPlugin": "azure", "networkDataplane": "cilium", "networkPolicy": "cilium" }, "oidcIssuerProfile": { "enabled": true }, "securityProfile": { "workloadIdentity": { "enabled": true } }, "addonProfiles": { "omsagent": { "enabled": true, "config": { "logAnalyticsWorkspaceResourceID": "[resourceId('Microsoft.OperationalInsights/workspaces', format('mylogs{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "useAADAuth": "true" } }, "azureKeyvaultSecretsProvider": { "enabled": true } }, "azureMonitorProfile": { "metrics": { "enabled": true, "kubeStateMetrics": { "metricLabelsAllowlist": "*", "metricAnnotationsAllowList": "*" } } }, "workloadAutoScalerProfile": { "keda": { "enabled": true }, "verticalPodAutoscaler": { "enabled": true } }, "ingressProfile": { "webAppRouting": { "enabled": true } } }, "dependsOn": [ "[resourceId('Microsoft.OperationalInsights/workspaces', format('mylogs{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.DocumentDB/databaseAccounts", "apiVersion": "2022-08-15", "name": "[format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "kind": "MongoDB", "location": "[resourceGroup().location]", "properties": { "consistencyPolicy": { "defaultConsistencyLevel": "Session" }, "locations": [ { "locationName": "[resourceGroup().location]", "failoverPriority": 0, "isZoneRedundant": false } ], "databaseAccountOfferType": "Standard", "enableAutomaticFailover": false, "enableMultipleWriteLocations": false, "apiProperties": { "serverVersion": "7.0" }, "capabilities": [ { "name": "EnableServerless" } ] } }, { "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases", "apiVersion": "2024-12-01-preview", "name": "[format('{0}/{1}', format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)), 'test')]", "properties": { "resource": { "id": "test" } }, "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts', format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2023-07-31-preview", "name": "[format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]" }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials", "apiVersion": "2024-11-30", "name": "[format('{0}/{1}', format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)), format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "properties": { "audiences": [ "api://AzureADTokenExchange" ], "issuer": "[reference(resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2024-10-01').oidcIssuerProfile.issuerURL]", "subject": "system:serviceaccount:default:contoso-air" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2022-04-01", "scope": "[format('Microsoft.DocumentDB/databaseAccounts/{0}', format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[guid(resourceId('Microsoft.DocumentDB/databaseAccounts', format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]", "properties": { "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2023-07-31-preview').principalId]", "principalType": "ServicePrincipal", "roleDefinitionId": "[variables('documentDBAccountContributorRole')]" }, "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts', format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.KeyVault/vaults", "apiVersion": "2024-12-01-preview", "name": "[format('mykeyvault{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]", "properties": { "enableRbacAuthorization": true, "enableSoftDelete": false, "sku": { "family": "A", "name": "standard" }, "tenantId": "[subscription().tenantId]" } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2023-07-31-preview", "name": "[format('mykeyvault{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]" }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials", "apiVersion": "2024-11-30", "name": "[format('{0}/{1}', format('mykeyvault{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)), format('mykeyvault{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "properties": { "audiences": [ "api://AzureADTokenExchange" ], "issuer": "[reference(resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2024-10-01').oidcIssuerProfile.issuerURL]", "subject": "system:serviceaccount:default:contoso-air" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mykeyvault{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2022-04-01", "scope": "[format('Microsoft.KeyVault/vaults/{0}', format('mykeyvault{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[guid(resourceId('Microsoft.KeyVault/vaults', format('mykeyvault{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mykeyvault{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]", "properties": { "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mykeyvault{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2023-07-31-preview').principalId]", "principalType": "ServicePrincipal", "roleDefinitionId": "[variables('keyVaultAdministratorRole')]" }, "dependsOn": [ "[resourceId('Microsoft.KeyVault/vaults', format('mykeyvault{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mykeyvault{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.AppConfiguration/configurationStores", "apiVersion": "2024-05-01", "name": "[format('myappconfig{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]", "identity": { "type": "SystemAssigned" }, "properties": { "enablePurgeProtection": false }, "sku": { "name": "standard" } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2023-07-31-preview", "name": "[format('myappconfig{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]" }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials", "apiVersion": "2024-11-30", "name": "[format('{0}/{1}', format('myappconfig{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)), format('myappconfig{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "properties": { "audiences": [ "api://AzureADTokenExchange" ], "issuer": "[reference(resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2024-10-01').oidcIssuerProfile.issuerURL]", "subject": "system:serviceaccount:default:contoso-air" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('myappconfig{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2022-04-01", "scope": "[format('Microsoft.AppConfiguration/configurationStores/{0}', format('myappconfig{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[guid(resourceId('Microsoft.AppConfiguration/configurationStores', format('myappconfig{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('myappconfig{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]", "properties": { "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('myappconfig{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2023-07-31-preview').principalId]", "principalType": "ServicePrincipal", "roleDefinitionId": "[variables('appConfigStoreDataOwnerRole')]" }, "dependsOn": [ "[resourceId('Microsoft.AppConfiguration/configurationStores', format('myappconfig{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('myappconfig{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.KubernetesConfiguration/extensions", "apiVersion": "2022-11-01", "scope": "[format('Microsoft.ContainerService/managedClusters/{0}', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "appconfigurationkubernetesprovider", "properties": { "autoUpgradeMinorVersion": true, "configurationSettings": { "global.clusterType": "managedclusters" }, "extensionType": "microsoft.appconfiguration" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.ContainerRegistry/registries", "apiVersion": "2025-04-01", "name": "[format('mycontainerregistry{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "location": "[resourceGroup().location]", "sku": { "name": "Standard" }, "identity": { "type": "SystemAssigned" } }, { "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2022-04-01", "scope": "[format('Microsoft.ContainerRegistry/registries/{0}', format('mycontainerregistry{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[guid(subscription().id, resourceGroup().id, format('mycontainerregistry{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)), 'AcrPullRole')]", "properties": { "principalId": "[reference(resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2024-10-01').identityProfile.kubeletIdentity.objectId]", "principalType": "ServicePrincipal", "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d')]" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ContainerRegistry/registries', format('mycontainerregistry{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Insights/dataCollectionEndpoints", "apiVersion": "2023-03-11", "name": "[format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "location": "[resourceGroup().location]", "kind": "Linux", "properties": { "description": "Data Collection Endpoint for Prometheus" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Insights/dataCollectionRuleAssociations", "apiVersion": "2023-03-11", "scope": "[format('Microsoft.ContainerService/managedClusters/{0}', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "configurationAccessEndpoint", "properties": { "dataCollectionEndpointId": "[resourceId('Microsoft.Insights/dataCollectionEndpoints', format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Insights/dataCollectionEndpoints', format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]" ] }, { "type": "Microsoft.Insights/dataCollectionRules", "apiVersion": "2023-03-11", "name": "[format('MSCI-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "location": "[resourceGroup().location]", "kind": "Linux", "properties": { "dataSources": { "syslog": [], "extensions": [ { "streams": [ "Microsoft-ContainerInsights-Group-Default" ], "extensionName": "ContainerInsights", "extensionSettings": { "dataCollectionSettings": { "interval": "1m", "namespaceFilteringMode": "Off", "enableContainerLogV2": true } }, "name": "ContainerInsightsExtension" } ] }, "destinations": { "logAnalytics": [ { "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', format('mylogs{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "ciworkspace" } ] }, "dataFlows": [ { "streams": [ "Microsoft-ContainerInsights-Group-Default" ], "destinations": [ "ciworkspace" ] } ] }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.OperationalInsights/workspaces', format('mylogs{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Insights/dataCollectionRuleAssociations", "apiVersion": "2023-03-11", "scope": "[format('Microsoft.ContainerService/managedClusters/{0}', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[format('MSCI-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "properties": { "dataCollectionRuleId": "[resourceId('Microsoft.Insights/dataCollectionRules', format('MSCI-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Insights/dataCollectionRules', format('MSCI-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]" ] }, { "type": "Microsoft.Insights/dataCollectionRules", "apiVersion": "2023-03-11", "name": "[format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "location": "[resourceGroup().location]", "kind": "Linux", "properties": { "dataCollectionEndpointId": "[resourceId('Microsoft.Insights/dataCollectionEndpoints', format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]", "dataSources": { "prometheusForwarder": [ { "streams": [ "Microsoft-PrometheusMetrics" ], "name": "PrometheusDataSource" } ] }, "destinations": { "monitoringAccounts": [ { "accountResourceId": "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "MonitoringAccount1" } ] }, "dataFlows": [ { "streams": [ "Microsoft-PrometheusMetrics" ], "destinations": [ "MonitoringAccount1" ] } ] }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Insights/dataCollectionEndpoints', format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]", "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.Insights/dataCollectionRuleAssociations", "apiVersion": "2023-03-11", "scope": "[format('Microsoft.ContainerService/managedClusters/{0}', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "name": "[format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "properties": { "dataCollectionRuleId": "[resourceId('Microsoft.Insights/dataCollectionRules', format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]" }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Insights/dataCollectionRules', format('MSProm-{0}-{1}', resourceGroup().location, format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]" ] }, { "type": "Microsoft.AlertsManagement/prometheusRuleGroups", "apiVersion": "2023-03-01", "name": "[format('KubernetesRecordingRulesRuleGroup - {0}', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "location": "[resourceGroup().location]", "properties": { "enabled": true, "description": "Kubernetes Recording Rules RuleGroup", "clusterName": "[format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "scopes": [ "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ], "interval": "PT1M", "rules": [ { "record": "node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate", "expression": "sum by (cluster, namespace, pod, container) (irate(container_cpu_usage_seconds_total{job=\"cadvisor\", image!=\"\"}[5m])) * on (cluster, namespace, pod) group_left(node) topk by (cluster, namespace, pod) (1, max by(cluster, namespace, pod, node) (kube_pod_info{node!=\"\"}))" }, { "record": "node_namespace_pod_container:container_memory_working_set_bytes", "expression": "container_memory_working_set_bytes{job=\"cadvisor\", image!=\"\"}* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, max by(namespace, pod, node) (kube_pod_info{node!=\"\"}))" }, { "record": "node_namespace_pod_container:container_memory_rss", "expression": "container_memory_rss{job=\"cadvisor\", image!=\"\"}* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, max by(namespace, pod, node) (kube_pod_info{node!=\"\"}))" }, { "record": "node_namespace_pod_container:container_memory_cache", "expression": "container_memory_cache{job=\"cadvisor\", image!=\"\"}* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, max by(namespace, pod, node) (kube_pod_info{node!=\"\"}))" }, { "record": "node_namespace_pod_container:container_memory_swap", "expression": "container_memory_swap{job=\"cadvisor\", image!=\"\"}* on (namespace, pod) group_left(node) topk by(namespace, pod) (1, max by(namespace, pod, node) (kube_pod_info{node!=\"\"}))" }, { "record": "cluster:namespace:pod_memory:active:kube_pod_container_resource_requests", "expression": "kube_pod_container_resource_requests{resource=\"memory\",job=\"kube-state-metrics\"} * on (namespace, pod, cluster)group_left() max by (namespace, pod, cluster) ((kube_pod_status_phase{phase=~\"Pending|Running\"} == 1))" }, { "record": "namespace_memory:kube_pod_container_resource_requests:sum", "expression": "sum by (namespace, cluster) (sum by (namespace, pod, cluster) (max by (namespace, pod, container, cluster) (kube_pod_container_resource_requests{resource=\"memory\",job=\"kube-state-metrics\"}) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (kube_pod_status_phase{phase=~\"Pending|Running\"} == 1)))" }, { "record": "cluster:namespace:pod_cpu:active:kube_pod_container_resource_requests", "expression": "kube_pod_container_resource_requests{resource=\"cpu\",job=\"kube-state-metrics\"} * on (namespace, pod, cluster)group_left() max by (namespace, pod, cluster) ((kube_pod_status_phase{phase=~\"Pending|Running\"} == 1))" }, { "record": "namespace_cpu:kube_pod_container_resource_requests:sum", "expression": "sum by (namespace, cluster) (sum by (namespace, pod, cluster) (max by (namespace, pod, container, cluster) (kube_pod_container_resource_requests{resource=\"cpu\",job=\"kube-state-metrics\"}) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (kube_pod_status_phase{phase=~\"Pending|Running\"} == 1)))" }, { "record": "cluster:namespace:pod_memory:active:kube_pod_container_resource_limits", "expression": "kube_pod_container_resource_limits{resource=\"memory\",job=\"kube-state-metrics\"} * on (namespace, pod, cluster)group_left() max by (namespace, pod, cluster) ((kube_pod_status_phase{phase=~\"Pending|Running\"} == 1))" }, { "record": "namespace_memory:kube_pod_container_resource_limits:sum", "expression": "sum by (namespace, cluster) (sum by (namespace, pod, cluster) (max by (namespace, pod, container, cluster) (kube_pod_container_resource_limits{resource=\"memory\",job=\"kube-state-metrics\"}) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (kube_pod_status_phase{phase=~\"Pending|Running\"} == 1)))" }, { "record": "cluster:namespace:pod_cpu:active:kube_pod_container_resource_limits", "expression": "kube_pod_container_resource_limits{resource=\"cpu\",job=\"kube-state-metrics\"} * on (namespace, pod, cluster)group_left() max by (namespace, pod, cluster) ( (kube_pod_status_phase{phase=~\"Pending|Running\"} == 1) )" }, { "record": "namespace_cpu:kube_pod_container_resource_limits:sum", "expression": "sum by (namespace, cluster) (sum by (namespace, pod, cluster) (max by (namespace, pod, container, cluster) (kube_pod_container_resource_limits{resource=\"cpu\",job=\"kube-state-metrics\"}) * on(namespace, pod, cluster) group_left() max by (namespace, pod, cluster) (kube_pod_status_phase{phase=~\"Pending|Running\"} == 1)))" }, { "record": "namespace_workload_pod:kube_pod_owner:relabel", "expression": "max by (cluster, namespace, workload, pod) ((label_replace(label_replace(kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"ReplicaSet\"}, \"replicaset\", \"$1\", \"owner_name\", \"(.*)\") * on(replicaset, namespace) group_left(owner_name) topk by(replicaset, namespace) (1, max by (replicaset, namespace, owner_name) (kube_replicaset_owner{job=\"kube-state-metrics\"})), \"workload\", \"$1\", \"owner_name\", \"(.*)\" )))", "labels": { "workload_type": "deployment" } }, { "record": "namespace_workload_pod:kube_pod_owner:relabel", "expression": "max by (cluster, namespace, workload, pod) ((label_replace(kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"DaemonSet\"}, \"workload\", \"$1\", \"owner_name\", \"(.*)\")))", "labels": { "workload_type": "daemonset" } }, { "record": "namespace_workload_pod:kube_pod_owner:relabel", "expression": "max by (cluster, namespace, workload, pod) ((label_replace(kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"StatefulSet\"}, \"workload\", \"$1\", \"owner_name\", \"(.*)\")))", "labels": { "workload_type": "statefulset" } }, { "record": "namespace_workload_pod:kube_pod_owner:relabel", "expression": "max by (cluster, namespace, workload, pod) ((label_replace(kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"Job\"}, \"workload\", \"$1\", \"owner_name\", \"(.*)\")))", "labels": { "workload_type": "job" } }, { "record": ":node_memory_MemAvailable_bytes:sum", "expression": "sum(node_memory_MemAvailable_bytes{job=\"node\"} or (node_memory_Buffers_bytes{job=\"node\"} + node_memory_Cached_bytes{job=\"node\"} + node_memory_MemFree_bytes{job=\"node\"} + node_memory_Slab_bytes{job=\"node\"})) by (cluster)" }, { "record": "cluster:node_cpu:ratio_rate5m", "expression": "sum(rate(node_cpu_seconds_total{job=\"node\",mode!=\"idle\",mode!=\"iowait\",mode!=\"steal\"}[5m])) by (cluster) /count(sum(node_cpu_seconds_total{job=\"node\"}) by (cluster, instance, cpu)) by (cluster)" } ] }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.AlertsManagement/prometheusRuleGroups", "apiVersion": "2023-03-01", "name": "[format('NodeRecordingRulesRuleGroup - {0}', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "location": "[resourceGroup().location]", "properties": { "enabled": true, "description": "Node Recording Rules RuleGroup", "clusterName": "[format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "scopes": [ "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ], "interval": "PT1M", "rules": [ { "record": "instance:node_num_cpu:sum", "expression": "count without (cpu, mode) (node_cpu_seconds_total{job=\"node\",mode=\"idle\"})" }, { "record": "instance:node_cpu_utilisation:rate5m", "expression": "1 - avg without (cpu) (sum without (mode) (rate(node_cpu_seconds_total{job=\"node\", mode=~\"idle|iowait|steal\"}[5m])))" }, { "record": "instance:node_load1_per_cpu:ratio", "expression": "(node_load1{job=\"node\"}/ instance:node_num_cpu:sum{job=\"node\"})" }, { "record": "instance:node_memory_utilisation:ratio", "expression": "1 - ((node_memory_MemAvailable_bytes{job=\"node\"} or (node_memory_Buffers_bytes{job=\"node\"} + node_memory_Cached_bytes{job=\"node\"} + node_memory_MemFree_bytes{job=\"node\"} + node_memory_Slab_bytes{job=\"node\"})) / node_memory_MemTotal_bytes{job=\"node\"})" }, { "record": "instance:node_vmstat_pgmajfault:rate5m", "expression": "rate(node_vmstat_pgmajfault{job=\"node\"}[5m])" }, { "record": "instance_device:node_disk_io_time_seconds:rate5m", "expression": "rate(node_disk_io_time_seconds_total{job=\"node\", device!=\"\"}[5m])" }, { "record": "instance_device:node_disk_io_time_weighted_seconds:rate5m", "expression": "rate(node_disk_io_time_weighted_seconds_total{job=\"node\", device!=\"\"}[5m])" }, { "record": "instance:node_network_receive_bytes_excluding_lo:rate5m", "expression": "sum without (device) (rate(node_network_receive_bytes_total{job=\"node\", device!=\"lo\"}[5m]))" }, { "record": "instance:node_network_transmit_bytes_excluding_lo:rate5m", "expression": "sum without (device) (rate(node_network_transmit_bytes_total{job=\"node\", device!=\"lo\"}[5m]))" }, { "record": "instance:node_network_receive_drop_excluding_lo:rate5m", "expression": "sum without (device) (rate(node_network_receive_drop_total{job=\"node\", device!=\"lo\"}[5m]))" }, { "record": "instance:node_network_transmit_drop_excluding_lo:rate5m", "expression": "sum without (device) (rate(node_network_transmit_drop_total{job=\"node\", device!=\"lo\"}[5m]))" } ] }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] }, { "type": "Microsoft.AlertsManagement/prometheusRuleGroups", "apiVersion": "2023-03-01", "name": "[format('UXRecordingRulesRuleGroup - {0}', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "location": "[resourceGroup().location]", "properties": { "enabled": true, "description": "UX Recording Rules for Linux", "clusterName": "[format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]", "scopes": [ "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ], "interval": "PT1M", "rules": [ { "record": "ux:pod_cpu_usage:sum_irate", "expression": "(sum by (namespace, pod, cluster, microsoft_resourceid) (irate(container_cpu_usage_seconds_total{container != \"\", pod != \"\", job = \"cadvisor\"}[5m]))) * on (pod, namespace, cluster, microsoft_resourceid) group_left (node, created_by_name, created_by_kind) (max by (node, created_by_name, created_by_kind, pod, namespace, cluster, microsoft_resourceid) (kube_pod_info{pod != \"\", job = \"kube-state-metrics\"}))" }, { "record": "ux:controller_cpu_usage:sum_irate", "expression": "sum by (namespace, node, cluster, created_by_name, created_by_kind, microsoft_resourceid) (ux:pod_cpu_usage:sum_irate)" }, { "record": "ux:pod_workingset_memory:sum", "expression": "(sum by (namespace, pod, cluster, microsoft_resourceid) (container_memory_working_set_bytes{container != \"\", pod != \"\", job = \"cadvisor\"})) * on (pod, namespace, cluster, microsoft_resourceid) group_left (node, created_by_name, created_by_kind)(max by (node, created_by_name, created_by_kind, pod, namespace, cluster, microsoft_resourceid) (kube_pod_info{pod != \"\", job = \"kube-state-metrics\"}))" }, { "record": "ux:controller_workingset_memory:sum", "expression": "sum by (namespace, node, cluster, created_by_name, created_by_kind, microsoft_resourceid) (ux:pod_workingset_memory:sum)" }, { "record": "ux:pod_rss_memory:sum", "expression": "(sum by (namespace, pod, cluster, microsoft_resourceid) (container_memory_rss{container != \"\", pod != \"\", job = \"cadvisor\"})) * on (pod, namespace, cluster, microsoft_resourceid) group_left (node, created_by_name, created_by_kind)(max by (node, created_by_name, created_by_kind, pod, namespace, cluster, microsoft_resourceid) (kube_pod_info{pod != \"\", job = \"kube-state-metrics\"}))" }, { "record": "ux:controller_rss_memory:sum", "expression": "sum by (namespace, node, cluster, created_by_name, created_by_kind, microsoft_resourceid) (ux:pod_rss_memory:sum)" }, { "record": "ux:pod_container_count:sum", "expression": "sum by (node, created_by_name, created_by_kind, namespace, cluster, pod, microsoft_resourceid) (((sum by (container, pod, namespace, cluster, microsoft_resourceid) (kube_pod_container_info{container != \"\", pod != \"\", container_id != \"\", job = \"kube-state-metrics\"}) or sum by (container, pod, namespace, cluster, microsoft_resourceid) (kube_pod_init_container_info{container != \"\", pod != \"\", container_id != \"\", job = \"kube-state-metrics\"}))* on (pod, namespace, cluster, microsoft_resourceid) group_left (node, created_by_name, created_by_kind)(max by (node, created_by_name, created_by_kind, pod, namespace, cluster, microsoft_resourceid) (kube_pod_info{pod != \"\", job = \"kube-state-metrics\"}))))" }, { "record": "ux:controller_container_count:sum", "expression": "sum by (node, created_by_name, created_by_kind, namespace, cluster, microsoft_resourceid) (ux:pod_container_count:sum)" }, { "record": "ux:pod_container_restarts:max", "expression": "max by (node, created_by_name, created_by_kind, namespace, cluster, pod, microsoft_resourceid) (((max by (container, pod, namespace, cluster, microsoft_resourceid) (kube_pod_container_status_restarts_total{container != \"\", pod != \"\", job = \"kube-state-metrics\"}) or sum by (container, pod, namespace, cluster, microsoft_resourceid) (kube_pod_init_status_restarts_total{container != \"\", pod != \"\", job = \"kube-state-metrics\"}))* on (pod, namespace, cluster, microsoft_resourceid) group_left (node, created_by_name, created_by_kind)(max by (node, created_by_name, created_by_kind, pod, namespace, cluster, microsoft_resourceid) (kube_pod_info{pod != \"\", job = \"kube-state-metrics\"}))))" }, { "record": "ux:controller_container_restarts:max", "expression": "max by (node, created_by_name, created_by_kind, namespace, cluster, microsoft_resourceid) (ux:pod_container_restarts:max)" }, { "record": "ux:pod_resource_limit:sum", "expression": "(sum by (cluster, pod, namespace, resource, microsoft_resourceid) ((max by (cluster, microsoft_resourceid, pod, container, namespace, resource) (kube_pod_container_resource_limits{container != \"\", pod != \"\", job = \"kube-state-metrics\"})))unless (count by (pod, namespace, cluster, resource, microsoft_resourceid)(kube_pod_container_resource_limits{container != \"\", pod != \"\", job = \"kube-state-metrics\"})!= on (pod, namespace, cluster, microsoft_resourceid) group_left() sum by (pod, namespace, cluster, microsoft_resourceid) (kube_pod_container_info{container != \"\", pod != \"\", job = \"kube-state-metrics\"}) ))* on (namespace, pod, cluster, microsoft_resourceid) group_left (node, created_by_kind, created_by_name)(kube_pod_info{pod != \"\", job = \"kube-state-metrics\"})" }, { "record": "ux:controller_resource_limit:sum", "expression": "sum by (cluster, namespace, created_by_name, created_by_kind, node, resource, microsoft_resourceid) (ux:pod_resource_limit:sum)" }, { "record": "ux:controller_pod_phase_count:sum", "expression": "sum by (cluster, phase, node, created_by_kind, created_by_name, namespace, microsoft_resourceid) ( ((kube_pod_status_phase{job=\"kube-state-metrics\",pod!=\"\"}) or (label_replace((count(kube_pod_deletion_timestamp{job=\"kube-state-metrics\",pod!=\"\"}) by (namespace, pod, cluster, microsoft_resourceid) * count(kube_pod_status_reason{reason=\"NodeLost\", job=\"kube-state-metrics\"} == 0) by (namespace, pod, cluster, microsoft_resourceid)), \"phase\", \"terminating\", \"\", \"\"))) * on (pod, namespace, cluster, microsoft_resourceid) group_left (node, created_by_name, created_by_kind)(max by (node, created_by_name, created_by_kind, pod, namespace, cluster, microsoft_resourceid) (kube_pod_info{job=\"kube-state-metrics\",pod!=\"\"})))" }, { "record": "ux:cluster_pod_phase_count:sum", "expression": "sum by (cluster, phase, node, namespace, microsoft_resourceid) (ux:controller_pod_phase_count:sum)" }, { "record": "ux:node_cpu_usage:sum_irate", "expression": "sum by (instance, cluster, microsoft_resourceid) ((1 - irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[5m])))" }, { "record": "ux:node_memory_usage:sum", "expression": "sum by (instance, cluster, microsoft_resourceid) ((node_memory_MemTotal_bytes{job = \"node\"}- node_memory_MemFree_bytes{job = \"node\"} - node_memory_cached_bytes{job = \"node\"}- node_memory_buffers_bytes{job = \"node\"}))" }, { "record": "ux:node_network_receive_drop_total:sum_irate", "expression": "sum by (instance, cluster, microsoft_resourceid) (irate(node_network_receive_drop_total{job=\"node\", device!=\"lo\"}[5m]))" }, { "record": "ux:node_network_transmit_drop_total:sum_irate", "expression": "sum by (instance, cluster, microsoft_resourceid) (irate(node_network_transmit_drop_total{job=\"node\", device!=\"lo\"}[5m]))" } ] }, "dependsOn": [ "[resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]", "[resourceId('Microsoft.Monitor/accounts', format('myprometheus{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4)))]" ] } ], "outputs": { "aksName": { "type": "string", "value": "[format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]" }, "aksNodeResourceGroupName": { "type": "string", "value": "[reference(resourceId('Microsoft.ContainerService/managedClusters', format('myakscluster{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2024-10-01').nodeResourceGroup]" }, "acrName": { "type": "string", "value": "[format('mycontainerregistry{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]" }, "akvName": { "type": "string", "value": "[format('mykeyvault{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]" }, "acName": { "type": "string", "value": "[format('myappconfig{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]" }, "mongoName": { "type": "string", "value": "[format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))]" }, "mongoIdentityClientId": { "type": "string", "value": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('mymongo{0}-identity', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))), '2023-07-31-preview').clientId]" }, "mongoListConnectionStringUrl": { "type": "string", "value": "[format('https://management.azure.com{0}/listConnectionStrings?api-version=2021-04-15', resourceId('Microsoft.DocumentDB/databaseAccounts', format('mymongo{0}', take(uniqueString(subscription().id, resourceGroup().id, parameters('randomSeed')), 4))))]" } } }