Snippets/AzureResources/azuredeploy.json

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "keyVaultName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "keyVaultSku": {
      "type": "string",
      "defaultValue": "standard",
      "allowedValues": [
        "standard",
        "premium"
      ]
    },
    "appInsightsName": {
      "type": "string"
    },
    "appInsightsLocation": {
      "type": "string",
      "defaultValue": "australiaeast"
    },
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "storageAccountSku": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "functionAppName": {
      "type": "string"
    },
    "webAppName": {
      "type": "string"
    },
    "webAppSkuCode": {
      "type": "string"
    }
  },
  "variables": {
    "appInsightsInstrumentationKeySecretName": "ApplicationInsights--InstrumentationKey",
    "storageAccountConnectionStringSecretName": "[concat(parameters('storageAccountName'), '-connectionstring')]",
    "functionAppManagedIdentityName": "[concat(parameters('functionAppName'), '-uami')]",
    "functionAppAppServicePlanName": "[concat(parameters('functionAppName'), '-asp')]",
    "webAppManagedIdentityName": "[concat(parameters('webAppName'), '-uami')]",
    "webAppAppServicePlanName": "[concat(parameters('webAppName'), '-asp')]"
  },
  "resources": [
    {
      "apiVersion": "2018-02-14",
      "type": "Microsoft.KeyVault/vaults",
      "name": "[parameters('keyVaultName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "enabledForDeployment": false,
        "enabledForTemplateDeployment": true,
        "enabledForDiskEncryption": false,
        "accessPolicies": [],
        "tenantId": "[subscription().tenantId]",
        "sku": {
          "name": "[parameters('keyVaultSku')]",
          "family": "A"
        },
        "networkAcls": {}
      },
      "tags": {},
      "dependsOn": []
    },
    {
      "apiVersion": "2015-05-01",
      "type": "Microsoft.Insights/components",
      "name": "[parameters('appInsightsName')]",
      "location": "[parameters('appInsightsLocation')]",
      "kind": "web",
      "properties": {
        "Application_Type": "web",
        "Flow_Type": "Redfield",
        "Request_Source": "IbizaAIExtension"
      }
    },
    {
      "apiVersion": "2018-02-14",
      "type": "Microsoft.KeyVault/vaults/secrets",
      "name": "[concat(parameters('keyVaultName'), '/' , variables('appInsightsInstrumentationKeySecretName'))]",
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]",
        "[resourceId('Microsoft.Insights/components', parameters('appInsightsName'))]"
      ],
      "properties": {
        "value": "[reference(resourceId('Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01').InstrumentationKey]"
      }
    },
    {
      "apiVersion": "2019-06-01",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[parameters('storageAccountName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "accessTier": "Hot",
        "supportsHttpsTrafficOnly": true
      },
      "dependsOn": [],
      "sku": {
        "name": "[parameters('storageAccountSku')]"
      },
      "kind": "StorageV2",
      "tags": {}
    },
    {
      "apiVersion": "2018-02-14",
      "type": "Microsoft.KeyVault/vaults/secrets",
      "name": "[concat(parameters('keyVaultName'), '/' , variables('storageAccountConnectionStringSecretName'))]",
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
      ],
      "properties": {
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
      }
    },
    {
      "apiVersion": "2018-11-30",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
      "name": "[variables('functionAppManagedIdentityName')]",
      "location": "[resourceGroup().location]",
      "properties": {}
    },
    {
      "apiVersion": "2018-11-30",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
      "name": "[variables('webAppManagedIdentityName')]",
      "location": "[resourceGroup().location]",
      "properties": {}
    },
    {
      "apiVersion": "2018-02-14",
      "type": "Microsoft.KeyVault/vaults/accessPolicies",
      "name": "[concat(parameters('keyVaultName'), '/add')]",
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('functionAppManagedIdentityName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('webAppManagedIdentityName'))]"
      ],
      "properties": {
        "accessPolicies": [
          {
            "tenantId": "[subscription().tenantId]",
            "objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('functionAppManagedIdentityName')), '2018-11-30').principalId]",
            "permissions": {
              "secrets": [
                "get",
                "list"
              ]
            }
          },
          {
            "tenantId": "[subscription().tenantId]",
            "objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('webAppManagedIdentityName')), '2018-11-30').principalId]",
            "permissions": {
              "secrets": [
                "get",
                "list"
              ]
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2018-11-01",
      "name": "[variables('functionAppAppServicePlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[resourceGroup().location]",
      "kind": "",
      "tags": {},
      "dependsOn": [],
      "properties": {
        "name": "[variables('functionAppAppServicePlanName')]"
      },
      "sku": {
        "Tier": "Dynamic",
        "Name": "Y1"
      }
    },
    {
      "apiVersion": "2018-11-01",
      "type": "Microsoft.Web/sites",
      "name": "[parameters('functionAppName')]",
      "kind": "functionapp",
      "location": "[resourceGroup().location]",
      "tags": {},
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
        "[resourceId('Microsoft.Web/serverfarms', variables('functionAppAppServicePlanName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('functionAppManagedIdentityName'))]"
      ],
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('functionAppManagedIdentityName'))]": {}
        }
      },
      "properties": {
        "name": "[parameters('functionAppName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('functionAppAppServicePlanName'))]",
        "clientAffinityEnabled": true,
        "httpsOnly": true,
        "siteConfig": {
          "minTlsVersion": "1.2",
          "ftpsState": "Disabled",
          "appSettings": [
            {
              "name": "FUNCTIONS_EXTENSION_VERSION",
              "value": "~1"
            },
            {
              "name": "FUNCTIONS_WORKER_RUNTIME",
              "value": "dotnet"
            },
            {
              "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
              "value": "[reference(resourceId('Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01').InstrumentationKey]"
            },
            {
              "name": "AzureWebJobsStorage",
              "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
            },
            {
              "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
              "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
            },
            {
              "name": "WEBSITE_CONTENTSHARE",
              "value": "[concat(toLower(parameters('functionAppName')), 'b91e')]"
            }
          ]
        }
      }
    },
    {
      "apiVersion": "2018-11-01",
      "name": "[variables('webAppAppServicePlanName')]",
      "type": "Microsoft.Web/serverfarms",
      "location": "[resourceGroup().location]",
      "kind": "",
      "tags": {},
      "dependsOn": [],
      "properties": {
        "name": "[variables('webAppAppServicePlanName')]"
      },
      "sku": {
        "Name": "[parameters('webAppSkuCode')]"
      }
    },
    {
      "apiVersion": "2018-11-01",
      "type": "Microsoft.Web/sites",
      "name": "[parameters('webAppName')]",
      "location": "[resourceGroup().location]",
      "tags": {},
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('webAppAppServicePlanName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('webAppManagedIdentityName'))]"
      ],
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('webAppManagedIdentityName'))]": {}
        }
      },
      "properties": {
        "name": "[parameters('webAppName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('webAppAppServicePlanName'))]",
        "clientAffinityEnabled": true,
        "httpsOnly": true,
        "siteConfig": {
          "alwaysOn": true,
          "minTlsVersion": "1.2",
          "ftpsState": "Disabled",
          "appSettings": [
            {
              "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
              "value": "[reference(resourceId('Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01').InstrumentationKey]"
            },
            {
              "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
              "value": "[reference(resourceId('Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01').ConnectionString]"
            },
            {
              "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
              "value": "~2"
            },
            {
              "name": "XDT_MicrosoftApplicationInsights_Mode",
              "value": "default"
            },
            {
              "name": "DiagnosticServices_EXTENSION_VERSION",
              "value": "disabled"
            },
            {
              "name": "APPINSIGHTS_PROFILERFEATURE_VERSION",
              "value": "disabled"
            },
            {
              "name": "APPINSIGHTS_SNAPSHOTFEATURE_VERSION",
              "value": "disabled"
            },
            {
              "name": "InstrumentationEngine_EXTENSION_VERSION",
              "value": "disabled"
            },
            {
              "name": "SnapshotDebugger_EXTENSION_VERSION",
              "value": "disabled"
            },
            {
              "name": "XDT_MicrosoftApplicationInsights_BaseExtensions",
              "value": "disabled"
            },
            {
              "name": "ANCM_ADDITIONAL_ERROR_PAGE_LINK",
              "value": "[concat('https://', parameters('webAppName'), '.scm.azurewebsites.net/detectors')]"
            }
          ],
          "metadata": [
            {
              "name": "CURRENT_STACK",
              "value": "dotnetcore"
            }
          ]
        }
      }
    }
  ],
  "outputs": {}
}