Tutoriel : Importer des fichiers SQL BACPAC avec des modèles ARM
Article
Découvrez comment utiliser les extensions Azure SQL Database pour importer un fichier BACPAC avec des modèles ARM (Azure Resource Manager). Les artefacts de déploiement correspondent à tous les fichiers, en plus des principaux fichiers modèles requis pour effectuer un déploiement. Le fichier BACPAC est un artefact.
Pour une sécurité optimale, utilisez un mot de passe généré pour le compte administrateur de serveur. Vous pouvez utiliser Azure Cloud Shell pour exécuter la commande suivante dans PowerShell ou Bash :
shell
openssl rand -base64 32
Pour plus d’informations, exécutez man openssl rand pour ouvrir la page manuelle.
Azure Key Vault a été conçu pour protéger les clés et autres secrets de chiffrement. Pour plus d’informations, consultez Didacticiel : Intégrer Azure Key Vault à un déploiement de modèle ARM. Nous vous recommandons également de mettre à jour votre mot de passe tous les trois mois.
Le fichier BACPAC doit être stocké dans un compte de stockage Azure avant de pouvoir être importé avec un modèle ARM. Le script PowerShell suivant prépare le fichier BACPAC en suivant les étapes ci-dessous :
Télécharger le fichier BACPAC.
Création d’un compte Azure Storage.
Créer un conteneur d’objets blob dans un compte de stockage
Télécharger le fichier BACPAC dans le conteneur.
Afficher la clé du compte de stockage, l’URL de l’objet blob, le nom du groupe de ressources et l’emplacement.
Sélectionnez Essayer pour ouvrir Cloud Shell. Ensuite, copiez et collez le script PowerShell suivant dans la fenêtre de l’interpréteur de commandes.
Azure 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 fileInvoke-WebRequest -Uri$bacpacUrl -OutFile"$HOME/$bacpacFileName"# Create a resource groupNew-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 containerNew-AzStorageContainer -Name$containerName -Context$storageAccount.Context
# Upload the BACPAC file to the containerSet-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 ..."
Enregistrez la clé du compte de stockage, l’URL du fichier BACPAC, le nom du projet et l’emplacement. Vous utiliserez ces valeurs quand vous déploierez le modèle plus loin dans ce tutoriel.
Ouvrir un modèle de démarrage rapide
Le modèle utilisé dans ce tutoriel est stocké dans GitHub.
À partir de Visual Studio Code, sélectionnez Fichier>Ouvrir un fichier.
Il est préférable d’avoir des notions de base sur ce modèle avant de le personnaliser.
Sélectionnez Fichier>Enregistrer sous pour enregistrer une copie du fichier sur votre ordinateur local avec le nom azuredeploy.json.
Modifier le modèle
Ajoutez deux paramètres à la fin de la section parameters pour définir la clé du compte de stockage et l’URL BACPAC.
JSON
"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."
}
}
Ajoutez une virgule après l’accolade fermante de la propriété adminPassword (}). Pour mettre en forme le fichier JSON à partir de Visual Studio Code, sélectionnez Maj+Alt+F.
Ajoutez deux ressources au modèle.
Pour permettre à l’extension SQL Database d’importer des fichiers BACPAC, vous devez autoriser le trafic à partir des services Azure. Au déploiement du serveur SQL, la règle de pare-feu active le paramètre Autoriser les services et ressources Azure à accéder à ce serveur.
Ajoutez la règle de pare-feu suivante sous la définition du serveur :
Pour comprendre la définition de ressource, consultez la référence de l’extension SQL Database pour la version de l’API. Voici quelques éléments importants :
dependsOn : la ressource d’extension doit être créée une fois que la base de données a été créée.
storageKeyType : spécifiez le type de la clé de stockage à utiliser. La valeur peut être StorageAccessKey ou SharedAccessKey. Utilisez StorageAccessKey dans ce tutoriel.
storageKey : Spécifiez la clé pour le compte de stockage où est stocké le fichier BACPAC. Si le type de clé de stockage est SharedAccessKey, il doit être précédé de « ? ».
storageUri : spécifiez l’URL du fichier BACPAC stocké dans un compte de stockage.
administratorLogin : nom du compte de l’administrateur SQL.
administratorLoginPassword : mot de passe de l’administrateur SQL. Pour utiliser un mot de passe généré, consultez Prérequis.
L'exemple suivant montre le modèle terminé :
JSON
{
"$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"
}
}
]
}
]
}
Déployer le modèle
Utilisez le nom et l’emplacement du projet qui ont été utilisés lors de la préparation du fichier BACPAC. Cela permet de placer toutes les ressources dans le même groupe de ressources, ce qui est pratique quand vous supprimez des ressources.
Sélectionnez PowerShell dans l’angle supérieur gauche.
Sélectionnez Charger/télécharger des fichiers et chargez votre fichier azuredeploy.json.
Pour déployer le modèle, copiez et collez le script suivant dans la fenêtre de l’interpréteur de commandes.
Azure PowerShell
$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$bacpacUrlWrite-Host"Press [ENTER] to continue ..."
Vérifier le déploiement
Pour accéder au serveur à partir de votre ordinateur client, vous devez ajouter une règle de pare-feu. L’adresse IP de votre client et l’adresse IP utilisée pour la connexion au serveur peuvent être différentes en raison de la traduction d’adresses réseau (NAT). Pour plus d’informations, consultez Créer et gérer des règles de pare-feu IP.
Par exemple, lorsque vous vous connectez à l’Éditeur de requête, un message s’affiche indiquant que l’adresse IP n’est pas autorisée. L’adresse est différente de l’adresse IP de votre client en raison de la traduction d’adresses réseau. Sélectionnez le lien du message afin d’ajouter une règle de pare-feu pour l’adresse IP. Lorsque vous avez terminé, supprimez l’adresse IP des paramètres Pare-feu et réseaux virtuels du serveur.
Dans le portail Azure, dans le groupe de ressources, sélectionnez la base de données. Sélectionnez Éditeur de requêtes (préversion) et entrez les informations d’identification d’administrateur. Vous verrez deux tables importées dans la base de données.
Nettoyer les ressources
Lorsque vous n’avez plus besoin des ressources Azure que vous avez déployées, supprimez le groupe de ressources. Le groupe de ressources, le compte de stockage, le serveur SQL et les bases de données SQL sont supprimés.
Dans le portail Azure, entrez Groupes de ressources dans la zone de recherche.
Dans le champ Filtrer par nom, entrez le nom du groupe de ressources.
Sélectionnez le nom du groupe de ressources.
Sélectionnez Supprimer le groupe de ressources.
Pour confirmer la suppression, entrez le nom du groupe de ressources, puis sélectionnez Supprimer.
Étapes suivantes
Dans ce tutoriel, vous avez déployé un serveur et une base de données, et vous avez importé un fichier BACPAC. Pour savoir comment résoudre les problèmes de déploiement de modèle, consultez :
Administrer une infrastructure de base de données SQL Server pour les bases de données relationnelles cloud, locales et hybrides à l’aide des offres de bases de données relationnelles Microsoft PaaS.