Samouczek: importowanie plików BACPAC SQL przy użyciu szablonów usługi ARM
Dowiedz się, jak używać rozszerzeń usługi Azure SQL Database do importowania pliku BACPAC za pomocą szablonów usługi Azure Resource Manager (szablony usługi ARM). Artefakty wdrażania to wszystkie pliki, oprócz głównych plików szablonów, które są potrzebne do ukończenia wdrożenia. Plik BACPAC jest tu artefaktem.
W tym samouczku utworzysz szablon, aby wdrożyć logiczny serwer SQL i pojedynczą bazę danych oraz zaimportować plik BACPAC. Aby uzyskać informacje o sposobie wdrażania rozszerzeń maszyn wirtualnych platformy Azure przy użyciu szablonów usługi ARM, zobacz Samouczek: wdrażanie rozszerzeń maszyn wirtualnych przy użyciu szablonów usługi ARM.
Ten samouczek obejmuje następujące zadania:
- Przygotuj plik BACPAC.
- Otwórz szablon szybkiego startu.
- Edytuj szablon.
- Wdrażanie szablonu.
- Sprawdź wdrożenie.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wymagania wstępne
Aby ukończyć pracę z tym artykułem, potrzebne są następujące zasoby:
Program Visual Studio Code z rozszerzeniem Resource Manager Tools. Zobacz Szybki start: tworzenie szablonów usługi ARM przy użyciu Visual Studio Code.
Aby zwiększyć bezpieczeństwo, użyj wygenerowanego hasła dla konta administratora serwera. Aby uruchomić następujące polecenie w programie PowerShell lub Bash, możesz użyć usługi Azure Cloud Shell:
openssl rand -base64 32
Aby dowiedzieć się więcej, uruchom polecenie
man openssl rand
, aby otworzyć stronę ręczną.Usługa Azure Key Vault została zaprojektowana w celu ochrony kluczy kryptograficznych i innych wpisów tajnych. Aby uzyskać więcej informacji, zobacz Samouczek: integrowanie usługi Azure Key Vault we wdrożeniu szablonu usługi ARM. Zalecamy również aktualizowanie hasła co trzy miesiące.
Przygotowywanie pliku BACPAC
Plik BACPAC jest udostępniany w usłudze GitHub. Aby utworzyć własną bazę danych, zobacz Eksportowanie bazy danych z usługi Azure SQL Database do pliku BACPAC. W przypadku wybrania publikowania pliku do własnej lokalizacji musisz zaktualizować szablon w dalszej części tego samouczka.
Plik BACPAC musi być przechowywany na koncie usługi Azure Storage, zanim będzie można go zaimportować z szablonem usługi ARM. Poniższy skrypt programu PowerShell przygotowuje plik BACPAC, wykonując następujące kroki:
- Pobieranie pliku BACPAC.
- Tworzenie konta usługi Azure Storage.
- Utwórz kontener obiektów blob konta magazynu.
- Przekazywanie pliku BACPAC do kontenera.
- Wyświetl klucz konta magazynu, adres URL obiektu blob, nazwę grupy zasobów i lokalizację.
Wybierz pozycję Wypróbuj, aby otworzyć Cloud Shell. Następnie skopiuj i wklej następujący skrypt programu PowerShell w oknie powłoki.
$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 ..."
Zapisz klucz konta magazynu, adres URL pliku BACPAC, nazwę projektu i lokalizację. Te wartości będą używane podczas wdrażania szablonu w dalszej części tego samouczka.
Otwieranie szablonu szybkiego startu
Szablon używany w tym samouczku jest przechowywany w usłudze GitHub.
W Visual Studio Code wybierz pozycję Plik>Otwórz plik.
W polu File name (Nazwa pliku) wklej następujący adres URL:
https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
Wybierz pozycję Open (Otwórz), aby otworzyć plik.
W szablonie zdefiniowano dwa zasoby:
Microsoft.Sql/servers
. Zobacz dokumentację szablonu.Microsoft.SQL.servers/databases
. Zobacz dokumentację szablonu.Warto uzyskać podstawową wiedzę na temat szablonu przed rozpoczęciem jego dostosowywania.
Wybierz pozycję Plik>Zapisz jako , aby zapisać kopię pliku na komputerze lokalnym o nazwie azuredeploy.json.
Edytowanie szablonu
Dodaj dwa parametry na końcu
parameters
sekcji, aby ustawić klucz konta magazynu i adres URL PLIKU 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." } }
Dodaj przecinek po zamykającym nawiasie
adminPassword
klamrowym właściwości (}
). Aby sformatować plik JSON z Visual Studio Code, wybierz klawisze Shift+Alt+F.Dodaj dwa zasoby do szablonu.
Aby umożliwić rozszerzenie SQL Database importowanie plików BACPAC, należy zezwolić na ruch z usług platformy Azure. Po wdrożeniu programu SQL Server reguła zapory włącza ustawienie Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera.
Dodaj następującą regułę zapory w definicji serwera:
"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" } } ]
W poniższym przykładzie pokazano zaktualizowany szablon:
Dodaj zasób rozszerzenia usługi SQL Database do definicji bazy danych za pomocą następującego kodu 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" } } ]
W poniższym przykładzie pokazano zaktualizowany szablon:
Aby zrozumieć definicję zasobu, zobacz dokumentację rozszerzenia SQL Database wersji interfejsu API. Poniżej przedstawiono niektóre ważne elementy:
-
dependsOn
: Zasób rozszerzenia należy utworzyć po utworzeniu bazy danych. -
storageKeyType
: określ typ klucza magazynu do użycia. Wartością może byćStorageAccessKey
lubSharedAccessKey
. UżyjStorageAccessKey
w tym samouczku. -
storageKey
: określ klucz dla konta magazynu, w którym jest przechowywany plik BACPAC. Jeśli typ klucza magazynu toSharedAccessKey
, musi być poprzedzony ciągiem "?". -
storageUri
: określ adres URL pliku BACPAC przechowywanego na koncie magazynu. -
administratorLogin
: nazwa konta administratora SQL. -
administratorLoginPassword
: hasło administratora SQL. Aby użyć wygenerowanego hasła, zobacz Wymagania wstępne.
-
W poniższym przykładzie pokazano ukończony szablon:
{
"$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"
}
}
]
}
]
}
Wdrożenie szablonu
Użyj nazwy i lokalizacji projektu, która została użyta podczas przygotowywania pliku BACPAC. Spowoduje to umieścić wszystkie zasoby w tej samej grupie zasobów, co jest przydatne podczas usuwania zasobów.
Zaloguj się do Cloud Shell.
Wybierz pozycję PowerShell w lewym górnym rogu.
Wybierz pozycję Przekaż/Pobierz pliki i przekaż plik azuredeploy.json .
Aby wdrożyć szablon, skopiuj i wklej następujący skrypt w oknie powłoki.
$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 ..."
Weryfikowanie wdrożenia
Aby uzyskać dostęp do serwera z komputera klienckiego, należy dodać regułę zapory. Adres IP klienta i adres IP używany do nawiązywania połączenia z serwerem mogą być inne z powodu translatora adresów sieciowych (NAT). Aby uzyskać więcej informacji, zobacz Tworzenie reguł zapory bazujących na adresach IP i zarządzanie nimi.
Na przykład po zalogowaniu się do edytora zapytań zostanie wyświetlony komunikat informujący o tym, że adres IP jest niedozwolony. Adres różni się od adresu IP klienta z powodu translatora adresów sieciowych. Wybierz link komunikatu, aby dodać regułę zapory dla adresu IP. Po zakończeniu możesz usunąć adres IP z ustawień zapory i sieci wirtualnych serwera.
W Azure Portal w grupie zasobów wybierz bazę danych. Wybierz pozycję Edytor zapytań (wersja zapoznawcza) i wprowadź poświadczenia administratora. Zobaczysz, że dwie tabele zostały zaimportowane do bazy danych.
Czyszczenie zasobów
Gdy wdrożone zasoby platformy Azure nie są już potrzebne, usuń grupę zasobów. Grupa zasobów, konto magazynu, program SQL Server i bazy danych SQL zostaną usunięte.
- W Azure Portal wprowadź ciąg Grupy zasobów w polu wyszukiwania.
- W polu Filtruj według nazwy wprowadź nazwę grupy zasobów.
- Wybierz nazwę grupy zasobów.
- Wybierz pozycję Usuń grupę zasobów.
- Aby potwierdzić usunięcie, wprowadź nazwę grupy zasobów, a następnie wybierz pozycję Usuń.
Następne kroki
W tym samouczku wdrożono serwer i bazę danych oraz zaimportowano plik BACPAC. Aby dowiedzieć się, jak rozwiązywać problemy z wdrażaniem szablonów, zobacz: