Руководство по Импорт BACPAC-файлов SQL с помощью шаблонов ARM
Узнайте, как использовать расширение Базы данных SQL Azure для импорта BACPAC-файла с помощью шаблонов Azure Resource Manager (шаблонов ARM). Артефакты развертывания — это любые файлы, которые помимо файлов основного шаблона необходимы для выполнения развертывания. BACPAC-файл является артефактом.
В этом учебнике вы создадите шаблон для развертывания логического сервера SQL Server, отдельной базы данных и импорта BACPAC-файла. См. сведения о развертывании расширений виртуальной машины Azure с помощью шаблонов ARM в руководстве по развертыванию расширений виртуальной машины с помощью шаблонов ARM.
В рамках этого руководства рассматриваются следующие задачи:
- подготовка BACPAC-файла;
- открытие шаблона быстрого запуска;
- изменение шаблона;
- Разверните шаблон.
- проверка развертывания.
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Предварительные требования
Для работы с этой статьей необходимо иметь следующее.
Visual Studio Code с расширением средств Resource Manager. См. Краткое руководство. Создание шаблонов ARM с помощью Visual Studio Code.
Для повышения уровня безопасности используйте пароль, созданный для учетной записи администратора сервера. Azure Cloud Shell можно использовать для выполнения следующей команды в PowerShell или Bash:
openssl rand -base64 32
Чтобы узнать больше, выполните команду
man openssl rand
и откройте страницу вручную.Для защиты криптографических ключей и других секретов используйте Azure Key Vault. Дополнительные сведения см. в статье Учебник. Интеграция с Azure Key Vault при развертывании шаблона ARM. Мы также рекомендуем обновлять пароль каждые три месяца.
Подготовка BACPAC-файла
BACPAC-файл доступен на сайте GitHub. См. сведения о создании собственного файла в статье Экспорт в BACPAC-файл — База данных SQL Azure и Управляемый экземпляр SQL Azure. Если вы решили опубликовать файл в своем расположении, необходимо обновить шаблон позже в этом руководстве.
BACPAC-файл нужно сохранить в учетной записи службы хранилища Azure, прежде чем его можно будет импортировать с помощью шаблона ARM. Следующий скрипт PowerShell подготавливает BACPAC-файл:
- Скачивание BACPAC-файла.
- Создание учетной записи хранения Azure.
- Создание контейнера больших двоичных объектов в учетной записи хранения.
- Передача BACPAC-файла в этот контейнер.
- Отображение ключа учетной записи хранения, URL-адреса большого двоичного объекта, имени группы ресурсов и расположения.
Выберите Попробовать, чтобы открыть 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 ..."
Сохраните ключ учетной записи хранения, URL-адрес файла BACPAC, имя проекта и расположение. Эти значения будут использоваться при развертывании шаблона далее в этом руководстве.
Открытие шаблона быстрого запуска
Используемый в этом учебнике шаблон доступен на сайте GitHub.
В Visual Studio Code выберите Файл>Открыть файл.
Скопируйте приведенный ниже URL-адрес и вставьте его в поле Имя файла.
https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
Чтобы открыть файл, выберите Открыть.
В шаблоне определено два ресурса:
Microsoft.Sql/servers
. Ознакомьтесь со статьей о справочнике по шаблонам.Microsoft.SQL.servers/databases
. Ознакомьтесь со статьей о справочнике по шаблонам.Прежде чем настраивать шаблон, рекомендуется получить основные сведения о нем.
Выберите Файл>Сохранить как, чтобы сохранить файл на локальный компьютер с именем azuredeploy.json.
Изменение шаблона
Добавьте два параметра в конец раздела
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.Добавьте в шаблон два ресурса.
Чтобы разрешить расширению Базы данных 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 для версии 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-файла. Это помещает все ресурсы в одну группу ресурсов, что полезно при удалении ресурсов.
Войдите в Cloud Shell.
Выберите PowerShell в верхнем левом углу.
Выберите Отправить или скачать файлы и добавьте файл azuredeploy.json.
Чтобы развернуть шаблон, скопируйте приведенный ниже скрипт и вставьте его в окно оболочки.
$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 больше не нужны, удалите группу ресурсов. Удаляются группы ресурсов, учетная запись хранения, сервер и база данных SQL.
- В портал Azure введите группы ресурсов в поле поиска.
- В поле Фильтровать по имени введите имя группы ресурсов.
- Выберите имя группы ресурсов.
- Выберите команду Удалить группу ресурсов.
- Чтобы подтвердить удаление, введите имя ресурса и выберите Удалить.
Дальнейшие действия
В этом учебнике вы развернули сервер, базу данных и импортированный BACPAC-файл. Инструкции по устранению неполадок при развертывании шаблонов см. в руководстве по