2

Currently I am working on to deploy the Azure SQL Database into exisiting virtual network using Azure ARM templates.

azuredeploy.json

    {
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "sqlServerName": {
      "type": "string",
      "metadata": {
        "description": "The SQL Servername."
      }
    },
    "databaseName": {
      "type": "string",
      "metadata": {
        "description": "The SQL Database."
      }
    },
    "collation": {
      "type": "string",
      "metadata": {
        "description": "The Collation of SQL Database and SQL Server."
      }
    },
    "edition": {
      "type": "string",
      "metadata": {
        "description": "The edition of SQL Database."
      }
    },
    "maxSizeBytes": {
      "type": "string",
      "metadata": {
        "description": "The maxsize of SQL Database."
      }
    },
    "sqlAdministratorLogin": {
      "type": "string",
      "metadata": {
        "description": "The administrator username of the SQL Server."
      }
    },
    "sqlAdministratorLoginPassword": {
      "type": "securestring",
      "metadata": {
        "description": "The administrator password of the SQL Server."
      }
    },
    "transparentDataEncryption": {
      "type": "string",
      "allowedValues": [
        "Enabled",
        "Disabled"
      ],
      "defaultValue": "Enabled",
      "metadata": {
        "description": "Enable or disable Transparent Data Encryption (TDE) for the database."
      }
    },
    "zoneRedundant": {
      "type": "bool",
      "defaultValue": false
    },
    "startIpAddress": {
      "type": "string",
      "metadata": {
        "description": "The start IpAddress"
      }
    },
    "endIpAddress": {
      "type": "string",
      "metadata": {
        "description": "The end IpAddress."
      }
    },
    "sampleName": {
      "type": "string",
      "metadata": {
        "description": "The sampleName."
      }
    },
    "existingVnetName": {
      "type": "string",
      "metadata": {
        "description": "The name of the existing virtual netwok."
      }
    },
    "vnetRuleName": {
      "type": "string",
      "metadata": {
        "description": "The name of the virtual netwrok rule."
      }
    },
    "existingVirtualNetworkResourceGroup": {
      "type": "string",
      "metadata": {
        "description": "The name of the exisitng VNET resource group."
      }
    },
    "subscriptionID": {
      "type": "string",
      "metadata": {
        "description": "The ID of the exisitng azure subscription."
      }
    }
  },
  "variables": {
    "sqlServerName": "[parameters('sqlServerName')]",
    "databaseName": "[parameters('databaseName')]",
    "databaseEdition": "[parameters('edition')]",
    "databaseCollation": "[parameters('collation')]",
    "databaseServiceObjectiveName": "Basic",
    "vnetID": "[concat('/subscriptions/', parameters('subscriptionID'), '/resourceGroups/',parameters('existingVirtualNetworkResourceGroup'),'/','Microsoft.Network/virtualNetworks', parameters('existingVnetName'))]",
    //"vnetID": "[resourceId(parameters('resourceGroupName'), 'Microsoft.Network/virtualNetworks', parameters('existingVnetName'))]"
  },
  "resources": [
    {
      "name": "[variables('sqlServerName')]",
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2014-04-01-preview",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "SqlServer"
      },
      "properties": {
        "administratorLogin": "[parameters('sqlAdministratorLogin')]",
        "administratorLoginPassword": "[parameters('sqlAdministratorLoginPassword')]",
        "version": "12.0"
      },
      "resources": [
        {
          "name": "[variables('databaseName')]",
          "type": "databases",
          "apiVersion": "2015-01-01",
          "location": "[resourceGroup().location]",
          "tags": {
            "displayName": "Database"
          },
          "properties": {
            "edition": "[variables('databaseEdition')]",
            "collation": "[variables('databaseCollation')]",
            "requestedServiceObjectiveName": "[variables('databaseServiceObjectiveName')]",
            "maxSizeBytes": "[parameters('maxSizeBytes')]",
            "sampleName": "[parameters('sampleName')]",
            "zoneRedundant": "[parameters('zoneRedundant')]"
          },
          "dependsOn": [
            "[variables('sqlServerName')]"
          ],
          "resources": [
            {
              "comments": "Transparent Data Encryption",
              "name": "current",
              "type": "transparentDataEncryption",
              "apiVersion": "2014-04-01-preview",
              "properties": {
                "status": "[parameters('transparentDataEncryption')]"
              },
              "dependsOn": [
                "[variables('databaseName')]"
              ]
            }
          ]
        },
        {
          "name": "AllowAllMicrosoftAzureIps",
          "type": "firewallrules",
          "apiVersion": "2014-04-01",
          "location": "[resourceGroup().location]",
          "properties": {
            "startIpAddress": "[parameters('startIpAddress')]",
            "endIpAddress": "[parameters('endIpAddress')]"
          },
          "dependsOn": [
            "[variables('sqlServerName')]"
          ]
        },
        {
          "comments": "Adding existing VNET to the SQL Server",
          "type": "Microsoft.Sql/servers/virtualNetworkRules",
          "name": "[concat(parameters('sqlServerName'), '/', parameters('vnetRuleName'))]",
          "apiVersion": "2015-05-01-preview",
          "scale": null,
          "properties": {
            "virtualNetworkSubnetId": "[variables('vnetID')]"
          },
          "dependsOn": [
            "[resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))]"
          ]
        }
      ]
    }
  ],
  "outputs": {
    "sqlServerFqdn": {
      "type": "string",
      "value": "[reference(concat('Microsoft.Sql/servers/', variables('sqlServerName'))).fullyQualifiedDomainName]"
    },
    "databaseName": {
      "type": "string",
      "value": "[variables('databaseName')]"
    }
  }
}

Before I added this Microsoft.Sql/servers/virtualNetworkRules section into azuredeploy.json file at that time I am able to create the new SQL database into azure.

    {
      "comments": "Adding existing VNET to the SQL Server",
      "type": "Microsoft.Sql/servers/virtualNetworkRules",
      "name": "[concat(parameters('sqlServerName'), '/', parameters('vnetRuleName'))]",
      "apiVersion": "2015-05-01-preview",
      "scale": null,
      "properties": {
        "virtualNetworkSubnetId": "[variables('vnetID')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))]"
      ]
    }

But whenever I added this Microsoft.Sql/servers/virtualNetworkRules section into azuredeploy.json file at that time I am not able to create database into existing virtual network and also it doesn’t give any response.

Can anyone please tell me where I did the mistake in the above azuredeploy.json file?

1 Answer 1

4

Finally I resolved the above issue by replacing this section of code with Microsoft.Sql/servers/virtualNetworkRules the below lines of code:

 {
      "comments": "Adding existing VNET to the SQL Server",
      "type": "Microsoft.Sql/servers/virtualNetworkRules",
      "name": "[concat(parameters('sqlServerName'), '/', parameters('vnetRuleName'))]",
      "apiVersion": "2015-05-01-preview",
      "scale": null,
      "properties": {
        "virtualNetworkSubnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('existingVnetName'), parameters('subnets_default_name'))]",
        "ignoreMissingVnetServiceEndpoint": "[parameters('ignoreMissingVnetServiceEndpoint')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))]"           
      ]
    }
Sign up to request clarification or add additional context in comments.

1 Comment

Also if you are in different resource group or subscription do not forget to include the path: learn.microsoft.com/en-us/azure/azure-resource-manager/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.