Esercitazione: Importare file BACPAC SQL con i modelli di Azure Resource Manager
Informazioni su come usare estensioni per il database SQL di Azure per importare file BACPAC con modelli di Azure Resource Manager (modelli di ARM). Gli artefatti della distribuzione sono tutti i file, oltre ai file modello principali, necessari per completare una distribuzione. Il file BACPAC è uno di questi elementi.
In questa esercitazione verrà creato un modello per distribuire un server SQL logico e un database singolo e importare un file BACPAC. Per informazioni su come distribuire le estensioni macchina virtuale di Azure tramite modelli di Azure Resource Manager, vedere Esercitazione: Distribuire estensioni di macchina virtuale con i modelli di Azure Resource Manager.
Questa esercitazione illustra le attività seguenti:
- Preparare un file BACPAC.
- Aprire un modello di avvio rapido.
- Modificare il modello.
- Distribuire il modello.
- Verificare la distribuzione.
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Prerequisiti
Per completare l'esercitazione di questo articolo, sono necessari gli elementi seguenti:
Visual Studio Code con l'estensione Strumenti di Resource Manager. Vedere Avvio rapido: Creare modelli di ARM con Visual Studio Code.
Per una maggiore sicurezza, usare una password generata per l'account amministratore del server. È possibile usare Azure Cloud Shell per eseguire il comando seguente in PowerShell o Bash:
openssl rand -base64 32
Per altre informazioni, eseguire
man openssl rand
per aprire la pagina manuale.Azure Key Vault è progettato per proteggere chiavi crittografiche e altri segreti. Per altre informazioni, vedere Esercitazione: Integrare Azure Key Vault nella distribuzione di modelli di Azure Resource Manager. È consigliabile anche aggiornare la password ogni tre mesi.
Preparare un file BACPAC
Un file BACPAC viene condiviso in GitHub. Per creare un file BACPAC, vedere Esportare un database dal database SQL di Azure in un file BACPAC. Se si sceglie di pubblicare il file in una posizione personalizzata, è necessario aggiornare il modello più avanti in questa esercitazione.
Il file BACPAC deve essere archiviato in un account di archiviazione di Azure prima di poterlo importare con un modello di Resource Manager. Lo script di PowerShell seguente prepara il file BACPAC con questi passaggi:
- Scaricare il file BACPAC.
- Creare un account di archiviazione di Azure.
- Creare un contenitore BLOB nell'account di archiviazione.
- Caricare il file BACPAC nel contenitore.
- Visualizzare la chiave dell'account di archiviazione, l'URL BLOB, il nome del gruppo di risorse e la posizione.
Selezionare Prova per aprire Cloud Shell. Copiare e incollare quindi lo script di PowerShell seguente nella finestra della 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 ..."
Salvare la chiave dell'account di archiviazione, l'URL del file BACPAC, il nome del progetto e il percorso. Questi valori verranno usati quando si distribuisce il modello più avanti in questa esercitazione.
Aprire un modello di avvio rapido
Il modello usato in questa esercitazione è archiviato in GitHub.
In Visual Studio Code selezionare File>Apri file.
In Nome file incollare l'URL seguente:
https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
Selezionare Apri per aprire il file.
Nel modello sono definite due risorse:
Microsoft.Sql/servers
. Vedere le informazioni di riferimento sul modello.Microsoft.SQL.servers/databases
. Vedere le informazioni di riferimento sul modello.Prima di personalizzare il modello è utile acquisirne una conoscenza di base.
Selezionare File>Salva con nome per salvare una copia del file con il nome azuredeploy.json nel computer locale.
Modificare il modello
Aggiungere due parametri alla fine della
parameters
sezione per impostare la chiave dell'account di archiviazione e l'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." } }
Aggiungere una virgola dopo la parentesi graffa di chiusura (
}
) della proprietàadminPassword
. Per formattare il file JSON da Visual Studio Code, selezionare MAIUSC+ALT+F.Aggiungere due risorse al modello.
Per consentire all'estensione database SQL di importare file BACPAC, è necessario consentire il traffico dai servizi di Azure. Quando il server SQL viene distribuito, la regola del firewall attiva l'impostazione Consenti a servizi e risorse di Azure di accedere a questo server.
Aggiungere la regola del firewall seguente nella definizione del server:
"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" } } ]
L'esempio seguente mostra il modello aggiornato:
Aggiungere una risorsa estensione di database SQL alla definizione del database con il codice JSON seguente:
"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" } } ]
L'esempio seguente mostra il modello aggiornato:
Per comprendere la definizione della risorsa, vedere le informazioni di riferimento sull'estensione database SQL della versione dell'API. Di seguito sono illustrati alcuni elementi importanti.
-
dependsOn
: la risorsa di estensione deve essere creata dopo che è stato creato il database. -
storageKeyType
: specificare il tipo di chiave di archiviazione da usare. Il valore può essereStorageAccessKey
oSharedAccessKey
. In questa esercitazione usareStorageAccessKey
. -
storageKey
: specificare la chiave dell'account di archiviazione in cui è archiviato il file BACPAC. Se il tipo di chiave di archiviazione èSharedAccessKey
, deve essere preceduta da "?". -
storageUri
: specificare l'URL del file BACPAC archiviato in un account di archiviazione. -
administratorLogin
: nome dell'account dell'amministratore SQL. -
administratorLoginPassword
: password dell'amministratore SQL. Per usare una password generata, vedere Prerequisiti.
-
L'esempio seguente mostra il modello completato:
{
"$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"
}
}
]
}
]
}
Distribuire il modello
Usare il nome e il percorso del progetto usati durante la preparazione del file BACPAC. In questo modo tutte le risorse vengono inserite nello stesso gruppo di risorse, utile quando si eliminano le risorse.
Accedere a Cloud Shell.
Selezionare PowerShell nell'angolo superiore sinistro.
Selezionare Carica/Scarica file e caricare il file azuredeploy.json .
Per distribuire il modello, copiare e incollare lo script seguente nella finestra della 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 ..."
Verificare la distribuzione
Per accedere al server dal computer client, è necessario aggiungere una regola del firewall. L'indirizzo IP del client e l'indirizzo IP usati per connettersi al server potrebbero essere diversi a causa di NAT (Network Address Translation). Per altre informazioni, vedere Creare e gestire le regole del firewall IP.
Ad esempio, quando si accede all'editor di query viene visualizzato un messaggio che indica che l'indirizzo IP non è consentito. L'indirizzo è diverso dall'indirizzo IP del client a causa di NAT. Selezionare il collegamento del messaggio per aggiungere una regola del firewall per l'indirizzo IP. Al termine, è possibile eliminare l'indirizzo IP dalle impostazioni firewall e reti virtuali del server.
Nel portale di Azure selezionare il database dal gruppo di risorse. Selezionare Editor di query (anteprima) e immettere le credenziali di amministratore. Verranno visualizzate due tabelle importate nel database.
Pulire le risorse
Quando le risorse di Azure distribuite non sono più necessarie, eliminare il gruppo di risorse. Il gruppo di risorse, l'account di archiviazione, sql server e i database SQL vengono eliminati.
- Nella portale di Azure immettere Gruppi di risorse nella casella di ricerca.
- Nel campo Filtra per nome immettere il nome del gruppo di risorse.
- Selezionare il nome del gruppo di risorse.
- Selezionare Elimina gruppo di risorse.
- Per confermare l'eliminazione, immettere il nome del gruppo di risorse e selezionare Elimina.
Passaggi successivi
In questa esercitazione sono stati distribuiti un server e un database ed è stato importato un file BACPAC. Per informazioni su come risolvere i problemi di distribuzione del modello, vedere: