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


Руководство по Импорт BACPAC-файлов SQL с помощью шаблонов ARM

Узнайте, как использовать расширение Базы данных SQL Azure для импорта BACPAC-файла с помощью шаблонов Azure Resource Manager (шаблонов ARM). Артефакты развертывания — это любые файлы, которые помимо файлов основного шаблона необходимы для выполнения развертывания. BACPAC-файл является артефактом.

В этом учебнике вы создадите шаблон для развертывания логического сервера SQL Server, отдельной базы данных и импорта BACPAC-файла. См. сведения о развертывании расширений виртуальной машины Azure с помощью шаблонов ARM в руководстве по развертыванию расширений виртуальной машины с помощью шаблонов ARM.

В рамках этого руководства рассматриваются следующие задачи:

  • подготовка BACPAC-файла;
  • открытие шаблона быстрого запуска;
  • изменение шаблона;
  • Разверните шаблон.
  • проверка развертывания.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Предварительные требования

Для работы с этой статьей необходимо иметь следующее.

Подготовка BACPAC-файла

BACPAC-файл доступен на сайте GitHub. См. сведения о создании собственного файла в статье Экспорт в BACPAC-файл — База данных SQL Azure и Управляемый экземпляр SQL Azure. Если вы решили опубликовать файл в своем расположении, необходимо обновить шаблон позже в этом руководстве.

BACPAC-файл нужно сохранить в учетной записи службы хранилища Azure, прежде чем его можно будет импортировать с помощью шаблона ARM. Следующий скрипт PowerShell подготавливает BACPAC-файл:

  • Скачивание BACPAC-файла.
  • Создание учетной записи хранения Azure.
  • Создание контейнера больших двоичных объектов в учетной записи хранения.
  • Передача BACPAC-файла в этот контейнер.
  • Отображение ключа учетной записи хранения, URL-адреса большого двоичного объекта, имени группы ресурсов и расположения.
  1. Выберите Попробовать, чтобы открыть Cloud Shell. Затем скопируйте приведенный ниже скрипт PowerShell и вставьте его в окно оболочки.

    $projectName = Read-Host -Prompt "Enter a project name that is used to generate Azure resource names"
    $location = Read-Host -Prompt "Enter the location (i.e. centralus)"
    
    $resourceGroupName = "${projectName}rg"
    $storageAccountName = "${projectName}store"
    $containerName = "bacpacfiles"
    $bacpacFileName = "SQLDatabaseExtension.bacpac"
    $bacpacUrl = "https://github.com/Azure/azure-docs-json-samples/raw/master/tutorial-sql-extension/SQLDatabaseExtension.bacpac"
    
    # Download the bacpac file
    Invoke-WebRequest -Uri $bacpacUrl -OutFile "$HOME/$bacpacFileName"
    
    # Create a resource group
    New-AzResourceGroup -Name $resourceGroupName -Location $location
    
    # Create a storage account
    $storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroupName `
                                           -Name $storageAccountName `
                                           -SkuName Standard_LRS `
                                           -Location $location
    $storageAccountKey = (Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName `
                                                  -Name $storageAccountName).Value[0]
    
    # Create a container
    New-AzStorageContainer -Name $containerName -Context $storageAccount.Context
    
    # Upload the BACPAC file to the container
    Set-AzStorageBlobContent -File $HOME/$bacpacFileName `
                             -Container $containerName `
                             -Blob $bacpacFileName `
                             -Context $storageAccount.Context
    
    Write-Host "The project name:        $projectName `
      The location:            $location `
      The storage account key: $storageAccountKey `
      The BACPAC file URL:     https://$storageAccountName.blob.core.windows.net/$containerName/$bacpacFileName `
      "
    
    Write-Host "Press [ENTER] to continue ..."
    
  2. Сохраните ключ учетной записи хранения, URL-адрес файла BACPAC, имя проекта и расположение. Эти значения будут использоваться при развертывании шаблона далее в этом руководстве.

Открытие шаблона быстрого запуска

Используемый в этом учебнике шаблон доступен на сайте GitHub.

  1. В Visual Studio Code выберите Файл>Открыть файл.

  2. Скопируйте приведенный ниже URL-адрес и вставьте его в поле Имя файла.

    https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
    
  3. Чтобы открыть файл, выберите Открыть.

    В шаблоне определено два ресурса:

  4. Выберите Файл>Сохранить как, чтобы сохранить файл на локальный компьютер с именем azuredeploy.json.

Изменение шаблона

  1. Добавьте два параметра в конец раздела parameters, чтобы задать ключ учетной записи хранения и URL-адрес BACPAC-файла.

        "storageAccountKey": {
          "type":"string",
          "metadata":{
            "description": "Specifies the key of the storage account where the BACPAC file is stored."
          }
        },
        "bacpacUrl": {
          "type":"string",
          "metadata":{
            "description": "Specifies the URL of the BACPAC file."
          }
        }
    

    Добавьте запятую после закрывающей фигурной скобки (}) свойства adminPassword. Чтобы отформатировать JSON-файл из Visual Studio Code, нажмите сочетание клавиш SHIFT+ALT+F.

  2. Добавьте в шаблон два ресурса.

    • Чтобы разрешить расширению Базы данных SQL импортировать BACPAC-файлы, необходимо разрешить трафик из служб Azure. При развертывании сервера SQL правило брандмауэра включает параметр Разрешить службам и ресурсам Azure доступ к этому серверу.

      Добавьте следующее правило брандмауэра в определение сервера:

      "resources": [
        {
          "type": "firewallrules",
          "apiVersion": "2021-02-01-preview",
          "name": "AllowAllAzureIps",
          "location": "[parameters('location')]",
          "dependsOn": [
            "[parameters('databaseServerName')]"
          ],
          "properties": {
            "startIpAddress": "0.0.0.0",
            "endIpAddress": "0.0.0.0"
          }
        }
      ]
      

      В следующем примере показан обновленный шаблон:

      Снимок экрана: шаблон с определением брандмауэра.

    • Добавьте ресурс расширения Базы данных SQL в определение базы данных с помощью следующего кода JSON:

      "resources": [
        {
          "type": "extensions",
          "apiVersion": "2014-04-01",
          "name": "Import",
          "dependsOn": [
            "[resourceId('Microsoft.Sql/servers/databases', parameters('databaseServerName'), parameters('databaseName'))]"
          ],
          "properties": {
            "storageKeyType": "StorageAccessKey",
            "storageKey": "[parameters('storageAccountKey')]",
            "storageUri": "[parameters('bacpacUrl')]",
            "administratorLogin": "[parameters('adminUser')]",
            "administratorLoginPassword": "[parameters('adminPassword')]",
            "operationMode": "Import"
          }
        }
      ]
      

      В следующем примере показан обновленный шаблон:

      Снимок экрана: шаблон с расширением База данных SQL.

      Сведения об определении ресурса см. в справочнике о расширении Базы данных SQL для версии API. Ниже приведены некоторые важные элементы.

      • dependsOn. Ресурс расширения должен быть создан после создания базы данных.
      • storageKeyType. Укажите тип ключа к хранилищу данных, который необходимо использовать. Возможные значения: StorageAccessKey и SharedAccessKey. Используйте StorageAccessKey в рамках изучения этого учебника.
      • storageKey. Укажите ключ для учетной записи хранения, в которой хранится BACPAC-файл. Если тип ключа к хранилищу данных — SharedAccessKey, он должен начинаться с "?".
      • storageUri. Укажите URL-адрес BACPAC-файла из учетной записи хранения.
      • administratorLogin: имя учетной записи администратора SQL.
      • administratorLoginPasswordпароль администратора SQL. Сведения об использовании созданного пароля см. в разделе Предварительные требования.

Ниже приведен пример завершенного шаблона.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "databaseServerName": {
      "type": "string",
      "defaultValue": "[concat('server-', uniqueString(resourceGroup().id, deployment().name))]",
      "metadata": {
        "description": "Specifies the name for the SQL server"
      }
    },
    "databaseName": {
      "type": "string",
      "defaultValue": "[concat('db-', uniqueString(resourceGroup().id, deployment().name), '-1')]",
      "metadata": {
        "description": "Specifies the name for the SQL database under the SQL server"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the location for server and database"
      }
    },
    "adminUser": {
      "type": "string",
      "metadata": {
        "description": "Specifies the username for admin"
      }
    },
    "adminPassword": {
      "type": "securestring",
      "metadata": {
        "description": "Specifies the password for admin"
      }
    },
    "storageAccountKey": {
      "type": "string",
      "metadata": {
        "description": "Specifies the key of the storage account where the BACPAC file is stored."
      }
    },
    "bacpacUrl": {
      "type": "string",
      "metadata": {
        "description": "Specifies the URL of the BACPAC file."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2021-02-01-preview",
      "name": "[parameters('databaseServerName')]",
      "location": "[parameters('location')]",
      "properties": {
        "administratorLogin": "[parameters('adminUser')]",
        "administratorLoginPassword": "[parameters('adminPassword')]",
        "version": "12.0"
      },
      "resources": [
        {
          "type": "firewallrules",
          "apiVersion": "2021-02-01-preview",
          "name": "AllowAllAzureIps",
          "location": "[parameters('location')]",
          "dependsOn": [
            "[parameters('databaseServerName')]"
          ],
          "properties": {
            "startIpAddress": "0.0.0.0",
            "endIpAddress": "0.0.0.0"
          }
        }
      ]
    },
    {
      "type": "Microsoft.Sql/servers/databases",
      "apiVersion": "2021-02-01-preview",
      "name": "[concat(string(parameters('databaseServerName')), '/', string(parameters('databaseName')))]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Sql/servers/', parameters('databaseServerName'))]"
      ],
      "resources": [
        {
          "type": "extensions",
          "apiVersion": "2014-04-01",
          "name": "Import",
          "dependsOn": [
            "[resourceId('Microsoft.Sql/servers/databases', parameters('databaseServerName'), parameters('databaseName'))]"
          ],
          "properties": {
            "storageKeyType": "StorageAccessKey",
            "storageKey": "[parameters('storageAccountKey')]",
            "storageUri": "[parameters('bacpacUrl')]",
            "administratorLogin": "[parameters('adminUser')]",
            "administratorLoginPassword": "[parameters('adminPassword')]",
            "operationMode": "Import"
          }
        }
      ]
    }
  ]
}

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

Используйте имя и расположение проекта, которые использовались при подготовке BACPAC-файла. Это помещает все ресурсы в одну группу ресурсов, что полезно при удалении ресурсов.

  1. Войдите в Cloud Shell.

  2. Выберите PowerShell в верхнем левом углу.

    Снимок экрана: azure Cloud Shell в PowerShell с возможностью отправки файла.

  3. Выберите Отправить или скачать файлы и добавьте файл azuredeploy.json.

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

    $projectName = Read-Host -Prompt "Enter the same project name that is used earlier"
    $adminUsername = Read-Host -Prompt "Enter the SQL admin username"
    $adminPassword = Read-Host -Prompt "Enter the admin password" -AsSecureString
    $storageAccountKey = Read-Host -Prompt "Enter the storage account key"
    $bacpacUrl = Read-Host -Prompt "Enter the URL of the BACPAC file"
    $resourceGroupName = "${projectName}rg"
    
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -adminUser $adminUsername `
        -adminPassword $adminPassword `
        -TemplateFile "$HOME/azuredeploy.json" `
        -storageAccountKey $storageAccountKey `
        -bacpacUrl $bacpacUrl
    
    Write-Host "Press [ENTER] to continue ..."
    

Проверка развертывания

Чтобы получить доступ к серверу с клиентского компьютера, добавьте правило брандмауэра. IP-адрес вашего клиента и IP-адрес, используемый для подключения к серверу, могут отличаться из-за преобразования сетевых адресов (NAT). Дополнительные сведения см. в разделе о создании правил брандмауэра для IP-адресов и управление ими.

Например, при входе в Редактор запросов отображается сообщение о том, что IP-адрес не разрешен. Адрес отличается от IP-адреса клиента из-за NAT. Щелкните ссылку на сообщение, чтобы добавить правило брандмауэра для IP-адреса. По завершении можно удалить IP-адрес из параметров брандмауэров и виртуальной сети сервера.

На портале Azure выберите базу данных в только что развернутой группе ресурсов. Выберите Редактор запросов (предварительная версия) и введите учетные данные администратора. Должны отобразиться две таблицы, импортированные в базу данных.

Снимок экрана: редактор запросов (предварительная версия) в портал Azure.

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

Если развернутые ресурсы Azure больше не нужны, удалите группу ресурсов. Удаляются группы ресурсов, учетная запись хранения, сервер и база данных SQL.

  1. В портал Azure введите группы ресурсов в поле поиска.
  2. В поле Фильтровать по имени введите имя группы ресурсов.
  3. Выберите имя группы ресурсов.
  4. Выберите команду Удалить группу ресурсов.
  5. Чтобы подтвердить удаление, введите имя ресурса и выберите Удалить.

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

В этом учебнике вы развернули сервер, базу данных и импортированный BACPAC-файл. Инструкции по устранению неполадок при развертывании шаблонов см. в руководстве по