Поделиться через


Краткое руководство: Создание управляемого экземпляра Azure SQL с использованием шаблона ARM

В этом кратком руководстве рассматривается процесс развертывания шаблона Azure Resource Manager (шаблона ARM) для создания управляемого экземпляра SQL Azure и виртуальной сети. Azure SQL Managed Instance — это интеллектуальная, полностью управляемая, масштабируемая облачная база данных с почти 100% совместимостью по функциям с ядром базы данных SQL Server.

Шаблон ARM является файлом нотации объектов JavaScript (JSON), определяющими инфраструктуру и конфигурацию вашего проекта. В шаблоне используется декларативный синтаксис. В декларативном синтаксисе вы можете описать предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.

Если среда соответствует предварительным требованиям и вы знакомы с использованием шаблонов ARM, нажмите кнопку Развертывание в Azure. Шаблон откроется на портале Azure.

Развернуть в Azure

Предпосылки

  • Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись.
  • В общем случае пользователю должна быть назначена роль Участник управляемого экземпляра SQL на уровне подписки.
  • Если в подсети, уже делегированной управляемому экземпляру Azure SQL, выполняется настройка, пользователю требуется только разрешение Microsoft.Sql/managedInstances/write, которое назначается на уровне подписки.

Просмотрите шаблон

Шаблон, используемый в этом кратком руководстве, взят из шаблонов быстрого запуска Azure.

Параметры шаблона ключа

Имя параметра По умолчанию / Пример Допустимые значения и ограничения Description
managedInstanceName sqlmi 1–63 символов Имя управляемого экземпляра SQL
location resourceGroup().location Регионы Azure, поддерживающие управляемый экземпляр SQL Регион для всех ресурсов
администраторВход sqladmin Запрещено использовать зарезервированные слова Вход администратора SQL
administratorLoginPassword Минимальная длина и сложность контролируются Пароль администратора SQL
vCores 8 Допустимые значения vCore в зависимости от SKU Размер вычислительных ресурсов экземпляра
storageSizeInGB 256 Минимальное/максимальное значение для уровня обслуживания Хранилище, выделенное экземпляру
префикс адреса подсети 10.0.0.0/24 Требуется выделенная, делегированная подсеть Подсеть для управляемого инстанса
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.17.1.54307",
      "templateHash": "2861010078937229146"
    }
  },
  "parameters": {
    "managedInstanceName": {
      "type": "string",
      "metadata": {
        "description": "Enter managed instance name."
      }
    },
    "administratorLogin": {
      "type": "string",
      "metadata": {
        "description": "Enter user name."
      }
    },
    "administratorLoginPassword": {
      "type": "securestring",
      "metadata": {
        "description": "Enter password."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Enter location. If you leave this field blank resource group location would be used."
      }
    },
    "virtualNetworkName": {
      "type": "string",
      "defaultValue": "SQLMI-VNET",
      "metadata": {
        "description": "Enter virtual network name. If you leave this field blank name will be created by the template."
      }
    },
    "addressPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/16",
      "metadata": {
        "description": "Enter virtual network address prefix."
      }
    },
    "subnetName": {
      "type": "string",
      "defaultValue": "ManagedInstance",
      "metadata": {
        "description": "Enter subnet name."
      }
    },
    "subnetPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/24",
      "metadata": {
        "description": "Enter subnet address prefix."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "GP_Gen5",
      "allowedValues": [
        "GP_Gen5",
        "BC_Gen5"
      ],
      "metadata": {
        "description": "Enter sku name."
      }
    },
    "vCores": {
      "type": "int",
      "defaultValue": 16,
      "allowedValues": [
        4,
        8,
        16,
        24,
        32,
        40,
        64,
        80
      ],
      "metadata": {
        "description": "Enter number of vCores."
      }
    },
    "storageSizeInGB": {
      "type": "int",
      "defaultValue": 256,
      "maxValue": 8192,
      "minValue": 32,
      "metadata": {
        "description": "Enter storage size."
      }
    },
    "licenseType": {
      "type": "string",
      "defaultValue": "LicenseIncluded",
      "allowedValues": [
        "BasePrice",
        "LicenseIncluded"
      ],
      "metadata": {
        "description": "Enter license type."
      }
    }
  },
  "variables": {
    "networkSecurityGroupName": "[format('SQLMI-{0}-NSG', parameters('managedInstanceName'))]",
    "routeTableName": "[format('SQLMI-{0}-Route-Table', parameters('managedInstanceName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Network/networkSecurityGroups",
      "apiVersion": "2021-08-01",
      "name": "[variables('networkSecurityGroupName')]",
      "location": "[parameters('location')]",
      "properties": {
        "securityRules": [
          {
            "name": "allow_tds_inbound",
            "properties": {
              "description": "Allow access to data",
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "destinationPortRange": "1433",
              "sourceAddressPrefix": "VirtualNetwork",
              "destinationAddressPrefix": "*",
              "access": "Allow",
              "priority": 1000,
              "direction": "Inbound"
            }
          },
          {
            "name": "allow_redirect_inbound",
            "properties": {
              "description": "Allow inbound redirect traffic to Managed Instance inside the virtual network",
              "protocol": "Tcp",
              "sourcePortRange": "*",
              "destinationPortRange": "11000-11999",
              "sourceAddressPrefix": "VirtualNetwork",
              "destinationAddressPrefix": "*",
              "access": "Allow",
              "priority": 1100,
              "direction": "Inbound"
            }
          },
          {
            "name": "deny_all_inbound",
            "properties": {
              "description": "Deny all other inbound traffic",
              "protocol": "*",
              "sourcePortRange": "*",
              "destinationPortRange": "*",
              "sourceAddressPrefix": "*",
              "destinationAddressPrefix": "*",
              "access": "Deny",
              "priority": 4096,
              "direction": "Inbound"
            }
          },
          {
            "name": "deny_all_outbound",
            "properties": {
              "description": "Deny all other outbound traffic",
              "protocol": "*",
              "sourcePortRange": "*",
              "destinationPortRange": "*",
              "sourceAddressPrefix": "*",
              "destinationAddressPrefix": "*",
              "access": "Deny",
              "priority": 4096,
              "direction": "Outbound"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/routeTables",
      "apiVersion": "2021-08-01",
      "name": "[variables('routeTableName')]",
      "location": "[parameters('location')]",
      "properties": {
        "disableBgpRoutePropagation": false
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-08-01",
      "name": "[parameters('virtualNetworkName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('addressPrefix')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnetName')]",
            "properties": {
              "addressPrefix": "[parameters('subnetPrefix')]",
              "routeTable": {
                "id": "[resourceId('Microsoft.Network/routeTables', variables('routeTableName'))]"
              },
              "networkSecurityGroup": {
                "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
              },
              "delegations": [
                {
                  "name": "managedInstanceDelegation",
                  "properties": {
                    "serviceName": "Microsoft.Sql/managedInstances"
                  }
                }
              ]
            }
          }
        ]
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]",
        "[resourceId('Microsoft.Network/routeTables', variables('routeTableName'))]"
      ]
    },
    {
      "type": "Microsoft.Sql/managedInstances",
      "apiVersion": "2021-11-01-preview",
      "name": "[parameters('managedInstanceName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]"
      },
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "administratorLogin": "[parameters('administratorLogin')]",
        "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
        "subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnetName'))]",
        "storageSizeInGB": "[parameters('storageSizeInGB')]",
        "vCores": "[parameters('vCores')]",
        "licenseType": "[parameters('licenseType')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]"
      ]
    }
  ]
}

В шаблоне определены следующие ресурсы:

Дополнительные примеры шаблонов можно найти в шаблонах быстрого запуска Azure.

Развертывание шаблона

Выберите Попробовать из следующего блока кода PowerShell, чтобы открыть Azure Cloud Shell.

Контрольный список развертывания

  1. Проверьте предварительные требования:
    • Активная подписка Azure
    • Необходимые разрешения (участник управляемого экземпляра SQL или Microsoft.Sql/managedInstances/write)
  2. Выполните команду развертывания (PowerShell или Azure CLI), используя приведенные ниже фрагменты кода.
  3. Проверьте успешность:
    • На портале Azure развертывание отображается успешно
    • Управляемый экземпляр SQL отображается в целевой группе ресурсов с состоянием "Создание " или "Готово"

Это важно

Развертывание управляемого экземпляра SQL — это длительная операция. Развертывание первого экземпляра в подсети обычно занимает гораздо больше времени, чем развертывание в подсети с существующими управляемыми экземплярами. Для просмотра средних времен подготовки см. раздел операции управления экземпляром SQL.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.sql/sqlmi-new-vnet/azuredeploy.json"

$resourceGroupName = "${projectName}rg"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri

Read-Host -Prompt "Press [ENTER] to continue ..."

Проверка развернутых ресурсов

Посетите портал Azure и убедитесь, что управляемый экземпляр находится в вашей выбранной группе ресурсов. Так как создание управляемого экземпляра может занять некоторое время, может потребоваться проверить ссылку развертывания на странице обзора группы ресурсов.

Очистка ресурсов

Сохраните управляемый экземпляр, если вы хотите перейти к дальнейшим шагам, но удалите управляемый экземпляр и связанные ресурсы после выполнения дополнительных руководств. После удаления управляемого экземпляра см. удалить подсеть после удаления управляемого экземпляра.

Чтобы удалить группу ресурсов, выполните указанные ниже действия.

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
Remove-AzResourceGroup -Name $resourceGroupName

Дальнейшие действия