Sdílet prostřednictvím


Kurz: Import souborů SQL BACPAC pomocí šablon ARM

Zjistěte, jak pomocí rozšíření Azure SQL Database importovat soubor BACPAC pomocí šablon Azure Resource Manager (šablon ARM). Artefakty nasazení jsou všechny soubory kromě hlavních souborů šablony, které jsou potřeba k dokončení nasazení. Soubor BACPAC je artefakt.

V tomto kurzu vytvoříte šablonu pro nasazení logického SERVERU SQL a izolované databáze a importujete soubor BACPAC. Informace o tom, jak nasadit rozšíření virtuálních počítačů Azure pomocí šablon ARM, najdete v tématu Kurz: Nasazení rozšíření virtuálních počítačů pomocí šablon ARM.

Tento kurz se zabývá následujícími úkony:

  • Připravte soubor BACPAC.
  • Otevřete šablonu pro rychlý start.
  • Upravte šablonu.
  • Nasazení šablony
  • Ověřte nasazení.

Pokud předplatné Azure ještě nemáte, napřed si vytvořte bezplatný účet.

Požadavky

K dokončení tohoto článku potřebujete:

Příprava souboru BACPAC

Soubor BACPAC se sdílí na GitHubu. Pokud chcete vytvořit vlastní databázi, přečtěte si téma Export databáze z Azure SQL Database do souboru BACPAC. Pokud se rozhodnete soubor publikovat do vlastního umístění, v pozdější části kurzu budete muset šablonu aktualizovat.

Před importem pomocí šablony ARM musí být soubor BACPAC uložený v účtu služby Azure Storage. Následující skript PowerShellu připraví soubor BACPAC pomocí těchto kroků:

  • Stáhněte si soubor BACPAC.
  • Vytvořit účet služby Azure Storage
  • Vytvořte kontejner objektů blob účtu úložiště.
  • Nahrajte soubor BACPAC do kontejneru.
  • Zobrazte klíč účtu úložiště, adresu URL objektu blob, název skupiny prostředků a umístění.
  1. Výběrem možnosti Vyzkoušet otevřete Cloud Shell. Pak zkopírujte následující skript PowerShellu a vložte ho do okna prostředí.

    $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 ..."
    
  2. Uložte klíč účtu úložiště, adresu URL souboru BACPAC, název projektu a umístění. Tyto hodnoty použijete při nasazování šablony později v tomto kurzu.

Otevření šablony rychlého startu

Šablona použitá v tomto kurzu je uložená v GitHubu.

  1. V editoru Visual Studio Code vyberte Soubor>Otevřít soubor.

  2. Do pole File name (Název souboru) vložte následující adresu URL:

    https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
    
  3. Výběrem Open (Otevřít) soubor otevřete.

    V šabloně jsou definované dva prostředky:

  4. Vyberte Soubor>Uložit jako a uložte kopii souboru do místního počítače s názvem azuredeploy.json.

Úprava šablony

  1. Na konec oddílu parameters přidejte dva parametry pro nastavení klíče účtu úložiště a adresy URL souboru 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."
          }
        }
    

    Za pravou složenou závorku () vlastnosti přidejte čárkuadminPassword.} Pokud chcete soubor JSON naformátovat z editoru Visual Studio Code, vyberte Shift+Alt+F.

  2. Přidejte do šablony dva prostředky.

    • Pokud chcete rozšíření SQL Database povolit import souborů BACPAC, musíte povolit provoz ze služeb Azure. Po nasazení SQL Serveru pravidlo brány firewall zapne nastavení Povolit službám a prostředkům Azure přístup k tomuto serveru.

      Do definice serveru přidejte následující pravidlo brány firewall:

      "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"
          }
        }
      ]
      

      Následující příklad ukazuje aktualizovanou šablonu:

      Snímek obrazovky šablony s definicí brány firewall

    • Pomocí následujícího kódu JSON přidejte k definici databáze prostředek rozšíření služby SQL Database:

      "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"
          }
        }
      ]
      

      Následující příklad ukazuje aktualizovanou šablonu:

      Snímek obrazovky šablony s rozšířením SQL Database

      Vysvětlení definice prostředku najdete v referenčních informacích k SQL Database rozšíření verze rozhraní API. Tady je několik důležitých elementů:

      • dependsOn: Prostředek rozšíření se musí vytvořit po vytvoření databáze.
      • storageKeyType: Zadejte typ klíče úložiště, který chcete použít. Hodnota může být StorageAccessKey nebo SharedAccessKey. Použijte StorageAccessKey v tomto kurzu.
      • storageKey: Zadejte klíč pro účet úložiště, ve kterém je soubor BACPAC uložený. Pokud je SharedAccessKeytyp klíče úložiště , musí mu předcházet znak "?".
      • storageUri: Zadejte adresu URL souboru BACPAC uloženého v účtu úložiště.
      • administratorLogin: Název účtu správce SQL.
      • administratorLoginPassword: Heslo správce SQL. Pokud chcete použít vygenerované heslo, přečtěte si téma Požadavky.

Následující příklad ukazuje dokončenou šablonu:

{
  "$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"
          }
        }
      ]
    }
  ]
}

Nasazení šablony

Použijte název a umístění projektu, které jste použili při přípravě souboru BACPAC. Tím se všechny prostředky umístí do stejné skupiny prostředků, což je užitečné, když prostředky odstraníte.

  1. Přihlaste se a Cloud Shell.

  2. V levém horním rohu vyberte PowerShell .

    Snímek obrazovky azure Cloud Shell v PowerShellu s možností nahrát soubor

  3. Vyberte Nahrát nebo stáhnout soubory a nahrajte soubor azuredeploy.json .

  4. Pokud chcete šablonu nasadit, zkopírujte následující skript a vložte ho do okna prostředí.

    $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 ..."
    

Ověření nasazení

Pokud chcete získat přístup k serveru z klientského počítače, musíte přidat pravidlo brány firewall. IP adresa vašeho klienta a IP adresa, která se používá pro připojení k serveru, se můžou lišit kvůli překladu adres (NAT). Další informace najdete v části Vytváření a správa pravidel firewallu protokolu IP.

Když se například přihlásíte k Editoru dotazů , zobrazí se zpráva, že IP adresa není povolená. Adresa se liší od IP adresy vašeho klienta kvůli překladu adres (NAT). Vyberte odkaz zprávy a přidejte pravidlo brány firewall pro IP adresu. Po dokončení můžete IP adresu odstranit z nastavení bran firewall a virtuálních sítí serveru.

V Azure Portal vyberte ze skupiny prostředků databázi. Vyberte Editor dotazů (Preview) a zadejte přihlašovací údaje správce. Uvidíte, že se do databáze naimportovaly dvě tabulky.

Snímek obrazovky s editorem dotazů (Preview) v Azure Portal

Vyčištění prostředků

Pokud už nasazené prostředky Azure nepotřebujete, odstraňte skupinu prostředků. Skupina prostředků, účet úložiště, SQL Server a databáze SQL se odstraní.

  1. Do vyhledávacího pole Azure Portal zadejte Skupiny prostředků.
  2. Do pole Filtrovat podle názvu zadejte název skupiny prostředků.
  3. Vyberte název skupiny prostředků.
  4. Vyberte Odstranit skupinu prostředků.
  5. Potvrďte odstranění zadáním názvu skupiny prostředků a vyberte Odstranit.

Další kroky

V tomto kurzu jste nasadili server a databázi a importovali jste soubor BACPAC. Informace o řešení potíží s nasazením šablon najdete tady: