Tutorial: Importieren von SQL-BACPAC-Dateien mit ARM-Vorlagen
Erfahren Sie, wie Sie die Azure SQL-Datenbank-Erweiterung verwenden, um eine BACPAC-Datei mit Azure Resource Manager-Vorlagen (ARM-Vorlagen) zu importieren. Bereitstellungsartefakte sind sämtliche Dateien, die zusätzlich zu Hauptvorlagendateien für eine Bereitstellung benötigt werden. Die BACPAC-Datei ist ein Artefakt.
In diesem Tutorial erstellen Sie eine Vorlage zum Bereitstellen eines logischen SQL-Servers und einer einzelnen Datenbank, und Sie importieren eine BACPAC-Datei. Informationen zum Bereitstellen von Azure-VM-Erweiterungen unter Verwendung von ARM-Vorlagen finden Sie unter Tutorial: Bereitstellen von VM-Erweiterungen mit ARM-Vorlagen.
Dieses Tutorial enthält die folgenden Aufgaben:
- Vorbereiten einer BACPAC-Datei
- Öffnen einer Schnellstartvorlage
- Bearbeiten der Vorlage
- Stellen Sie die Vorlage bereit.
- Überprüfen der Bereitstellung
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Voraussetzungen
Damit Sie die Anweisungen in diesem Artikel ausführen können, benötigen Sie Folgendes:
Visual Studio Code mit der Erweiterung „Azure Resource Manager-Tools“. Weitere Informationen finden Sie unter Schnellstart: Erstellen von ARM-Vorlagen mit Visual Studio Code.
Verwenden Sie aus Sicherheitsgründen ein generiertes Kennwort für das Serveradministratorkonto. Sie können die Azure Cloud Shell verwenden, um den folgenden Befehl in PowerShell oder Bash auszuführen:
openssl rand -base64 32
Um mehr zu erfahren, führen Sie
man openssl rand
aus, um die Handbuchseite zu öffnen.Azure Key Vault dient zum Schützen von kryptografischen Schlüsseln und anderen Geheimnissen. Weitere Informationen finden Sie im Tutorial: Integrieren von Azure Key Vault in Ihre Bereitstellung einer ARM-Vorlage. Wir empfehlen Ihnen auch, Ihr Kennwort alle drei Monate zu aktualisieren.
Vorbereiten einer BACPAC-Datei
Auf GitHub ist eine BACPAC-Datei verfügbar. Informationen zum Erstellen einer eigenen Datei finden Sie unter Exportieren einer Datenbank aus Azure SQL-Datenbank in eine BACPAC-Datei. Wenn Sie die Datei an Ihrem eigenen Standort veröffentlichen möchten, müssen Sie die Vorlage später in diesem Tutorial aktualisieren.
Die BACPAC-Datei muss in einem Azure Storage-Konto gespeichert werden, damit sie mithilfe einer ARM-Vorlage importiert werden kann. Das folgende PowerShell-Skript bereitet die BACPAC-Datei mit den folgenden Schritten vor:
- Herunterladen der BACPAC-Datei
- Erstellen eines Azure-Speicherkontos.
- Erstellen eines Speicherkonto-Blobcontainers
- Hochladen der BACPAC-Datei in den Container
- Zeigt den Speicherkontoschlüssel, die Blob-URL, den Ressourcengruppennamen und den Speicherort an.
Wählen Sie Ausprobieren aus, um Cloud Shell zu öffnen. Kopieren Sie dann das folgende PowerShell-Skript, und fügen Sie es im Shellfenster ein.
$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 ..."
Speichern Sie den Speicherkontoschlüssel, die BACPAC-Datei-URL, den Projektnamen und den Speicherort. Sie verwenden diese Werte, wenn Sie die Vorlage später in diesem Tutorial bereitstellen.
Öffnen einer Schnellstartvorlage
Die in diesem Tutorial verwendete Vorlage befindet sich auf GitHub.
Wählen Sie in Visual Studio Code Datei>Datei öffnen aus.
Fügen Sie in Dateiname die folgende URL ein:
https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
Wählen Sie Öffnen aus, um die Datei zu öffnen.
In der Vorlage sind zwei Ressourcen definiert:
Microsoft.Sql/servers
. Informationen finden Sie in der Vorlagenreferenz.Microsoft.SQL.servers/databases
. Informationen finden Sie in der Vorlagenreferenz.Bevor Sie die Vorlage anpassen, sollten Sie sich zunächst grundlegend damit vertraut machen.
Wählen Sie Datei>Speichern unter aus, um eine Kopie der Datei als azuredeploy.json auf dem lokalen Computer zu speichern.
Bearbeiten der Vorlage
Fügen Sie am Ende des Abschnitts
parameters
zwei Parameter hinzu, um den Speicherkontoschlüssel und die BACPAC-URL festzulegen."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." } }
Fügen Sie nach der schließenden geschweiften Klammer (
}
) deradminPassword
-Eigenschaft ein Komma hinzu. Drücken Sie zum Formatieren der JSON-Datei in Visual Studio Code UMSCHALT+ALT+F.Fügen Sie der Vorlage zwei Ressourcen hinzu.
Damit die SQL-Datenbank-Erweiterung BACPAC-Dateien importieren kann, müssen Sie Datenverkehr von Azure-Diensten zulassen. Wenn der SQL-Server bereitgestellt wird, aktiviert die Firewallregel die Einstellung Anderen Azure-Diensten und -Ressourcen den Zugriff auf diesen Server gestatten.
Fügen Sie unter der Serverdefinition die folgende Firewallregel hinzu:
"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" } } ]
Das folgende Beispiel zeigt die aktualisierte Vorlage:
Fügen Sie der Datenbankdefinition mithilfe des folgenden JSON-Codes eine SQL-Datenbank-Erweiterungsressource hinzu:
"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" } } ]
Das folgende Beispiel zeigt die aktualisierte Vorlage:
Informationen zur Ressourcendefinition finden Sie in der Referenz zur SQL-Datenbank-Erweiterung der API-Version. Im Anschluss sind einige zentrale Elemente aufgeführt:
-
dependsOn
Die Erweiterungsressource muss nach der Erstellung der Datenbank erstellt werden. -
storageKeyType
Geben Sie die Art des zu verwendenden Speicherschlüssels an. Der Wert kann entwederStorageAccessKey
oderSharedAccessKey
sein. Verwenden Sie in diesem TutorialStorageAccessKey
. -
storageKey
Geben Sie den Schlüssel für das Speicherkonto an, in dem die BACPAC-Datei gespeichert ist. Bei Verwendung des SpeicherschlüsseltypsSharedAccessKey
muss ein Fragezeichen (?) vorangestellt werden. -
storageUri
Geben Sie die URL der in einem Speicherkonto gespeicherten BACPAC-Datei an. -
administratorLogin
: Der Kontoname des SQL-Administrators. -
administratorLoginPassword
: Das Kennwort des SQL-Administrators. Informationen zur Verwendung eines generierten Kennworts finden Sie unter Voraussetzungen.
-
Das folgende Beispiel zeigt die vollständige Vorlage:
{
"$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"
}
}
]
}
]
}
Bereitstellen der Vorlage
Verwenden Sie den Projektnamen und den Speicherort, die beim Vorbereiten der BACPAC-Datei verwendet wurden. Damit werden alle Ressourcen in derselben Ressourcengruppe gespeichert, was beim Löschen von Ressourcen hilfreich ist.
Melden Sie sich bei Cloud Shell an.
Wählen Sie oben links PowerShell aus.
Wählen Sie Dateien hochladen/herunterladen aus, und laden Sie die Datei azuredeploy.json hoch.
Um die Vorlage bereitzustellen, kopieren Sie das folgende Skript, und fügen Sie es im Shellfenster ein.
$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 ..."
Überprüfen der Bereitstellung
Wenn Sie über Ihren Clientcomputer auf den Server zugreifen möchten, müssen Sie eine weitere Firewallregel hinzufügen. Die IP-Adresse Ihres Clients und die IP-Adresse, die zum Herstellen der Verbindung mit dem Server verwendet wird, können aufgrund der Netzwerkadressenübersetzung (Network Address Translation, NAT) unterschiedlich sein. Weitere Informationen finden Sie unter IP-Firewallregeln für Azure SQL-Datenbank und Azure SQL Data Warehouse.
Wenn Sie sich beispielsweise beim Abfrage-Editor anmelden, wird eine Meldung angezeigt, dass die IP-Adresse nicht zulässig ist. Die Adresse unterscheidet sich aufgrund der NAT von der IP-Adresse Ihres Clients. Wählen Sie den Link der Nachricht aus, um eine Firewallregel für die IP-Adresse hinzuzufügen. Wenn Sie fertig sind, können Sie die IP-Adresse aus den Einstellungen für Firewalls und virtuelle Netzwerke des Servers löschen.
Wählen Sie im Azure-Portal die Datenbank aus der Ressourcengruppe aus. Wählen Sie Abfrage-Editor (Vorschau) aus, und geben Sie die Administratoranmeldeinformationen ein. Wie Sie sehen, wurden zwei Tabellen in die Datenbank importiert.
Bereinigen von Ressourcen
Wenn die von Ihnen bereitgestellten Azure-Ressourcen nicht mehr benötigt werden, löschen Sie die Ressourcengruppe. Die Ressourcengruppe, das Speicherkonto, der SQL-Server und die SQL-Datenbanken werden gelöscht.
- Geben Sie im Azure-Portal im Suchfeld Ressourcengruppen ein.
- Geben Sie den Namen der Ressourcengruppe in das Feld Nach Name filtern ein.
- Klicken Sie auf den Namen der Ressourcengruppe.
- Wählen Sie die Option Ressourcengruppe löschen.
- Um den Löschvorgang zu bestätigen, geben Sie den Namen der Ressourcengruppe ein, und wählen Sie Löschen aus.
Nächste Schritte
In diesem Tutorial haben Sie einen Server und eine Datenbank bereitgestellt und eine BACPAC-Datei importiert. Informationen zur Behandlung von Problemen bei der Bereitstellung von Vorlagen finden Sie unter: