如何使用Azure ARM模板将现有虚拟网络添加到Azure SQL数据库?

时间:2018-03-20 13:22:18

标签: azure azure-sql-database arm-template vnet

目前,我正致力于使用Azure ARM模板将Azure SQL数据库部署到现有的虚拟网络中。

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')]"
    }
  }
}

在此之前我将 Microsoft.Sql / servers / virtualNetworkRules 部分添加到 azuredeploy.json 文件之前,我可以将新的SQL数据库创建为azure。 / p>

    {
      "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'))]"
      ]
    }

但是当我在此时将 Microsoft.Sql / servers / virtualNetworkRules 部分添加到 azuredeploy.json 文件中时,我无法在现有虚拟网络中创建数据库它也没有给出任何回应。

有人可以告诉我在上面的 azuredeploy.json 文件中我在哪里犯了错误吗?

1 个答案:

答案 0 :(得分:3)

最后,我通过用以下代码行替换 Microsoft.Sql / servers / virtualNetworkRules 代码的这一部分解决了上述问题:

 {
      "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'))]"           
      ]
    }