Tutorial: Importar arquivos BACPAC do SQL com modelos do ARM
Saiba como usar extensões do Banco de Dados SQL do Azure para importar um arquivo BACPAC com modelos do ARM (modelos do Azure Resource Manager). Artefatos de implantação são quaisquer arquivos, além dos arquivos de modelo principais, necessários para concluir uma implantação. O arquivo BACPAC é um artefato.
Neste tutorial, você criará um modelo para implantar um servidor SQL lógico e um banco de dados individual e importar um arquivo BACPAC. Para obter informações sobre como implantar extensões de máquina virtual do Azure usando modelos do ARM, confira o Tutorial: Implantar extensões de máquina virtual com modelos do ARM.
Este tutorial cobre as seguintes tarefas:
- Preparar um arquivo BACPAC.
- Abrir um modelo de início rápido.
- Editar o modelo.
- Implante o modelo.
- Verifique a implantação.
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Para concluir este artigo, você precisa do seguinte:
Visual Studio Code com a extensão Ferramentas do Resource Manager. Confira Início Rápido: Criar modelos do ARM com o Visual Studio Code.
Para aumentar a segurança, use uma senha gerada para a conta de administrador do servidor. Você pode usar Azure Cloud Shell para executar o seguinte comando no PowerShell ou Bash:
openssl rand -base64 32
Para saber mais, execute
man openssl rand
para abrir a página manual.O Azure Key Vault é projetado para proteger chaves de criptografia e outros segredos. Para saber mais, confira Tutorial: Integrar o Azure Key Vault na implantação de modelo do ARM. Também recomendamos que você atualize sua senha a cada três meses.
Preparar um arquivo BACPAC
Um arquivo BACPAC é compartilhado no GitHub. Para criar seus próprio arquivo, confira Exportar um banco de dados do Banco de Dados SQL do Azure para um arquivo BACPAC. Se você optar por publicar o arquivo em seu próprio local, deverá atualizar o modelo posteriormente no tutorial.
O arquivo BACPAC deve ser armazenado em uma conta de Armazenamento do Microsoft Azure antes que possa ser importado com um modelo do ARM. O script do PowerShell a seguir prepara o arquivo BACPAC com estas etapas:
- Baixe o arquivo BACPAC.
- Criar uma conta do Armazenamento do Azure.
- Crie um contêiner de blobs da conta de armazenamento.
- Carregue o arquivo BACPAC para o contêiner.
- Exiba a chave da conta de armazenamento, a URL do blob, o nome do grupo de recursos e o local.
Selecione Experimentar para abrir o Cloud Shell. Em seguida, copie e cole o seguinte script do PowerShell na janela de shell.
$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 ..."
Salve a chave da conta de armazenamento, a URL do arquivo BACPAC, o nome do projeto e localização. Você usará esses valores ao implantar o modelo posteriormente neste tutorial.
Abrir um modelo de início rápido
O modelo usado neste tutorial é armazenado no GitHub.
No Visual Studio Code, escolha Arquivo>Abrir Arquivo.
Em Nome do arquivo, cole a seguinte URL:
https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
Escolha Abrir para abrir o arquivo.
Há dois recursos definidos no modelo:
Microsoft.Sql/servers
. Consulte a referência de modelo.Microsoft.SQL.servers/databases
. Consulte a referência de modelo.É útil ter algumas noções básicas do modelo antes de personalizá-lo.
Selecione Arquivo>Salvar como para salvar uma cópia do arquivo no computador local com o nome azuredeploy.json.
Editar o modelo
Adicione dois parâmetros ao final da seção
parameters
para definir a chave da conta de armazenamento e a URL do 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." } }
Adicione uma vírgula após a chave de fechamento
adminPassword
da propriedade (}
). Para formatar o arquivo JSON do Visual Studio Code, selecione Shift+Alt+F.Adicione dois recursos ao modelo.
Para permitir que a extensão do Banco de Dados SQL importe arquivos BACPAC, você deverá permitir tráfego dos serviços do Azure. Quando o servidor de SQL é implantado, a regra de firewall ativa a configuração parapermitir que os serviços e recursos do Azure acessem este servidor.
Adicione a seguinte regra de firewall à definição de servidor:
"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" } } ]
O seguinte exemplo mostra o modelo atualizado:
Adicione um recurso de extensão do Banco de Dados SQL à definição de banco de dados com o seguinte 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" } } ]
O seguinte exemplo mostra o modelo atualizado:
Para entender a definição de recurso, confira a referência de extensão de Banco de Dados SQL da versão da API. Abaixo estão alguns elementos importantes:
-
dependsOn
: o recurso de extensão precisa ser criado depois da criação do banco de dados. -
storageKeyType
: Especifique o tipo da chave de armazenamento a ser usada. O valor pode serStorageAccessKey
ouSharedAccessKey
. UseStorageAccessKey
neste tutorial. -
storageKey
: Especifique a chave para a conta de armazenamento em que o arquivo BACPAC está armazenado. Se o tipo de chave de armazenamento forSharedAccessKey
, ela deverá ser precedida por um "?". -
storageUri
: Especifique a URL do arquivo BACPAC armazenado em uma conta de armazenamento. -
administratorLogin
: o nome da conta do administrador do SQL. -
administratorLoginPassword
: A senha do administrador SQL. Para usar uma senha gerada, consulte Pré-requisitos.
-
O exemplo a seguir mostra o modelo concluído:
{
"$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"
}
}
]
}
]
}
Implantar o modelo
Use o nome do projeto e o local que foram usados quando você preparou o arquivo BACPAC. Isso coloca todos os recursos no mesmo grupo de recursos, o que é útil quando você exclui recursos.
Entrar no Cloud Shell.
Selecione PowerShell no canto superior esquerdo.
Selecione Upload arquivos/Download arquivos e carregue o arquivo azuredeploy. json.
Para implantar o modelo, copie e cole o seguinte script na janela de shell.
$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 ..."
Verificar a implantação
Para acessar o servidor no computador cliente, você precisará adicionar uma regra de firewall. O endereço IP do cliente e o endereço IP que é usado para se conectar ao servidor podem ser diferentes devido à NAT (conversão de endereços de rede). Para obter mais informações, confira Criar e gerenciar regras de firewall de IP.
Por exemplo, quando você entra no Editor de consultas, uma mensagem é exibida informando que o endereço IP não é permitido. O endereço é diferente do endereço IP do seu cliente devido ao NAT. Selecione o link da mensagem para adicionar uma regra de firewall para o endereço IP. Quando tiver terminado, você poderá excluir o endereço IP das configurações firewalls e redes virtuais do servidor.
No portal do Azure, no grupo de recursos, selecione o banco de dados. Selecione Editor de consultas (versão prévia) e insira as credenciais de administrador. Você verá que duas tabelas foram importadas para o banco de dados.
Limpar os recursos
Quando os recursos do Azure implantados não forem mais necessários, exclua o grupo de recursos. O grupo de recursos, a conta de armazenamento, o servidor de SQL e os bancos de dados SQL são excluídos.
- Na portal do Azure, insira Grupos de recursos na caixa de pesquisa.
- No campo Filtrar por nome, insira o nome do grupo de recursos.
- Selecione o nome do grupo de recursos.
- Selecione Excluir grupo de recursos.
- Para confirmar a exclusão, insira o nome do grupo recursos e selecione Excluir.
Próximas etapas
Neste tutorial, você implantou um servidor e um banco de dados e importou um arquivo BACPAC. Para saber como solucionar problemas de implantação de modelo, confira: