Tutorial: Importar ficheiros BACPAC do SQL com modelos do ARM
Saiba como utilizar SQL do Azure extensões da Base de Dados para importar um ficheiro BACPAC com modelos de Resource Manager do Azure (modelos arm). Os artefactos de implementação são quaisquer ficheiros, além dos ficheiros de modelo principal, que são necessários para concluir uma implementação. O ficheiro BACPAC é um artefacto.
Neste tutorial, vai criar um modelo para implementar um SQL Server lógico e uma base de dados individual e importar um ficheiro BACPAC. Para obter informações sobre como implementar extensões de máquinas virtuais do Azure com modelos do ARM, veja Tutorial: Implementar extensões de máquina virtual com modelos do ARM.
Este tutorial abrange as seguintes tarefas:
- Preparar um ficheiro BACPAC.
- Abra um modelo de início rápido.
- Edite o modelo.
- Implemente o modelo.
- Verifique a implementação.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Para concluir este artigo, precisa de:
Visual Studio Code com a extensão Ferramentas do Resource Manager. Veja Início Rápido: Criar modelos do ARM com o Visual Studio Code.
Para aumentar a segurança, utilize uma palavra-passe gerada para a conta de administrador do servidor. Pode utilizar o 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 foi criado para salvaguardar chaves criptográficos e outros segredos. Para obter mais informações, veja Tutorial: Integrar o Azure Key Vault na implementação de modelos do ARM. Também recomendamos que atualize a palavra-passe a cada três meses.
Preparar um ficheiro BACPAC
Um ficheiro BACPAC é partilhado no GitHub. Para criar a sua própria, veja Exportar uma base de dados de SQL do Azure Base de Dados para um ficheiro BACPAC. Se optar por publicar o ficheiro na sua própria localização, tem de atualizar o modelo mais tarde no tutorial.
O ficheiro BACPAC tem de ser armazenado numa conta de Armazenamento do Azure antes de poder ser importado com um modelo do ARM. O seguinte script do PowerShell prepara o ficheiro BACPAC com estes passos:
- Transfira o ficheiro BACPAC.
- Criar uma conta de Armazenamento do Azure.
- Crie um contentor de blobs de conta de armazenamento.
- Carregue o ficheiro BACPAC para o contentor.
- Apresentar a chave da conta de armazenamento, o URL do blob, o nome do grupo de recursos e a localização.
Selecione Experimentar para abrir Cloud Shell. Em seguida, copie e cole o seguinte script do PowerShell na janela da 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 ..."
Guarde a chave da conta de armazenamento, o URL do ficheiro BACPAC, o nome do projeto e a localização. Irá utilizar esses valores quando implementar o modelo mais adiante neste tutorial.
Abrir um modelo de início rápido
O modelo utilizado neste tutorial é armazenado no GitHub.
No Visual Studio Code, selecione Ficheiro>Aberto Ficheiro.
em Nome de ficheiro, cole o seguinte URL:
https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
Selecione Abrir para abrir o ficheiro.
Existem dois recursos definidos no modelo:
Microsoft.Sql/servers
. Veja a referência de modelo.Microsoft.SQL.servers/databases
. Veja a referência de modelo.É útil obter alguma compreensão básica do modelo antes de o personalizar.
Selecione Guardar Ficheiro>Como para guardar uma cópia do ficheiro no seu computador local com o nome azuredeploy.json.
Editar o modelo
Adicione dois parâmetros no final da
parameters
secção para definir a chave da conta de armazenamento e o 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." } }
Adicione uma vírgula após a
adminPassword
chaveta de fecho da propriedade (}
). Para formatar o ficheiro JSON a partir do Visual Studio Code, selecione Shift+Alt+F.Adicione dois recursos ao modelo.
Para permitir que a extensão Base de Dados SQL importe ficheiros BACPAC, tem de permitir o tráfego dos serviços do Azure. Quando o SQL Server é implementado, a regra de firewall ativa a definição para Permitir que os serviços e recursos do Azure acedam a este servidor.
Adicione a seguinte regra de firewall na definição do 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 exemplo seguinte mostra o modelo atualizado:
Adicione um recurso de extensão de Base de Dados SQL à definição de base 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 exemplo seguinte mostra o modelo atualizado:
Para compreender a definição do recurso, veja a referência da extensão Base de Dados SQL da versão da API. Seguem alguns elementos importantes:
-
dependsOn
: o recurso de extensão tem de ser criado após a criação da base de dados. -
storageKeyType
: especifique o tipo de chave de armazenamento a utilizar. O valor pode serStorageAccessKey
ouSharedAccessKey
. UtilizeStorageAccessKey
neste tutorial. -
storageKey
: especifique a chave para a conta de armazenamento onde o ficheiro BACPAC está armazenado. Se o tipo de chave de armazenamento forSharedAccessKey
, tem de ser precedido com um "?". -
storageUri
: especifique o URL do ficheiro BACPAC armazenado numa conta de armazenamento. -
administratorLogin
: o nome da conta do administrador do SQL. -
administratorLoginPassword
: a palavra-passe do administrador do SQL. Para utilizar uma palavra-passe gerada, veja Pré-requisitos.
-
O exemplo seguinte 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"
}
}
]
}
]
}
Implementar o modelo
Utilize o nome e a localização do projeto que foram utilizados quando preparou o ficheiro BACPAC. Isto coloca todos os recursos no mesmo grupo de recursos, o que é útil quando elimina recursos.
Inicie sessão no Cloud Shell.
Selecione PowerShell no canto superior esquerdo.
Selecione Carregar/Transferir ficheiros e carregue o ficheiro azuredeploy.json .
Para implementar o modelo, copie e cole o seguinte script na janela da 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 implementação
Para aceder ao servidor a partir do computador cliente, tem de adicionar uma regra de firewall. O endereço IP do cliente e o endereço IP utilizado para ligar ao servidor podem ser diferentes devido à tradução de endereços de rede (NAT). Para obter mais informações, veja Criar e gerir regras de firewall de IP.
Por exemplo, quando inicia sessão no Editor de consultas , é apresentada uma mensagem a indicar que o endereço IP não é permitido. O endereço é diferente do endereço IP do cliente por causa do NAT. Selecione a ligação da mensagem para adicionar uma regra de firewall para o endereço IP. Quando terminar, pode eliminar o endereço IP das definições firewalls e redes virtuais do servidor.
No portal do Azure, no grupo de recursos, selecione a base de dados. Selecione Editor de consultas (pré-visualização) e introduza as credenciais de administrador. Verá que duas tabelas foram importadas para a base de dados.
Limpar os recursos
Quando os recursos do Azure que implementou já não forem necessários, elimine o grupo de recursos. O grupo de recursos, a conta de armazenamento, o SQL Server e as bases de dados SQL são eliminados.
- Na portal do Azure, introduza Grupos de recursos na caixa de pesquisa.
- No campo Filtrar por nome , introduza o nome do grupo de recursos.
- Selecione o nome do grupo de recursos.
- Selecione Eliminar grupo de recursos.
- Para confirmar a eliminação, introduza o nome do grupo de recursos e, em seguida, selecione Eliminar.
Passos seguintes
Neste tutorial, implementou um servidor e uma base de dados e importou um ficheiro BACPAC. Para saber como resolver problemas de implementação de modelos, consulte: