Dela via


Självstudie: Importera SQL BACPAC-filer med ARM-mallar

Lär dig hur du använder Azure SQL Database-tillägg för att importera en BACPAC-fil med Azure Resource Manager-mallar (ARM-mallar). Distributionsartefakter är alla filer, förutom huvudmallfilerna, som behövs för att slutföra en distribution. BACPAC-filen är en artefakt.

I den här självstudien skapar du en mall för att distribuera en logisk SQL-server och en enskild databas och importera en BACPAC-fil. Information om hur du distribuerar tillägg för virtuella Azure-datorer med arm-mallar finns i Självstudie: Distribuera tillägg för virtuella datorer med ARM-mallar.

Den här självstudien omfattar följande uppgifter:

  • Förbereda en BACPAC-fil.
  • Öppna en snabbstartsmall.
  • Redigera mallen.
  • Distribuera mallen.
  • Verifiera distributionen.

Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

Förutsättningar

För att kunna följa stegen i den här artikeln behöver du:

  • Visual Studio Code med verktygstillägget för Resource Manager. Se Snabbstart: Skapa ARM-mallar med Visual Studio Code.

  • Om du vill öka säkerheten använder du ett genererat lösenord för serveradministratörskontot. Du kan använda Azure Cloud Shell för att köra följande kommando i PowerShell eller Bash:

    openssl rand -base64 32
    

    Om du vill veta mer kör du man openssl rand för att öppna den manuella sidan.

    Azure Key Vault är utformat för att skydda kryptografiska nycklar och andra hemligheter. Mer information finns i Självstudie: Integrera Azure Key Vault i ARM-malldistribution. Vi rekommenderar även att du uppdaterar ditt lösenord var tredje månad.

Förbereda en BACPAC-fil

En BACPAC-fil delas i GitHub. Information om hur du skapar en egen databas finns i Exportera en databas från Azure SQL Database till en BACPAC-fil. Om du väljer att publicera filen till din egen plats måste du uppdatera mallen senare under självstudien.

BACPAC-filen måste lagras i ett Azure Storage-konto innan den kan importeras med en ARM-mall. Följande PowerShell-skript förbereder BACPAC-filen med följande steg:

  • Ladda ned BACPAC-filen.
  • skapa ett Azure Storage-konto
  • Skapa en blobcontainer för lagringskonto.
  • Ladda upp BACPAC-filen till containern.
  • Visa lagringskontonyckeln, blob-URL:en, resursgruppens namn och plats.
  1. Välj Prova för att öppna Cloud Shell. Kopiera och klistra sedan in följande PowerShell-skript i shell-fönstret.

    $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. Spara lagringskontonyckeln, BACPAC-filens URL, projektnamn och plats. Du använder dessa värden när du distribuerar mallen senare i den här självstudien.

Öppna en snabbstartsmall

Mallen som används i den här självstudien lagras i GitHub.

  1. I Visual Studio Code väljer du Öppna fil>.

  2. I Filnamn klistrar du in följande URL:

    https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
    
  3. Välj Öppna för att öppna filen.

    Det finns två resurser som definierats i mallen:

    • Microsoft.Sql/servers. Se mallreferensen.

    • Microsoft.SQL.servers/databases. Se mallreferensen.

      Det är bra om du har grundläggande förståelse av mallen innan du anpassar den.

  4. VäljSpara somför> att spara en kopia av filen på den lokala datorn med namnet azuredeploy.json.

Redigera mallen

  1. Lägg till två parametrar i slutet av parameters avsnittet för att ange lagringskontonyckeln och BACPAC-URL:en.

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

    Lägg till ett kommatecken efter egenskapens adminPassword avslutande klammerparentes (}). Om du vill formatera JSON-filen från Visual Studio Code väljer du Skift+Alt+F.

  2. Lägg till två resurser i mallen.

    • Om du vill tillåta att SQL Database-tillägget importerar BACPAC-filer måste du tillåta trafik från Azure-tjänster. När SQL-servern distribueras aktiverar brandväggsregeln inställningen tillåt att Azure-tjänster och resurser får åtkomst till den här servern.

      Lägg till följande brandväggsregel under serverdefinitionen:

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

      I följande exempel visas den uppdaterade mallen:

      Skärmbild av mallen med brandväggsdefinition.

    • Lägg till en resurs för SQL Database-tillägget till databasdefinitionen med följande 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"
          }
        }
      ]
      

      I följande exempel visas den uppdaterade mallen:

      Skärmbild av mallen med SQL Database-tillägget.

      Information om resursdefinitionen finns i API-versionens SQL Database tilläggsreferens. Här följer några viktiga element:

      • dependsOn: Tilläggsresursen måste skapas när databasen har skapats.
      • storageKeyType: Ange vilken typ av lagringsnyckel som ska användas. Värdet kan vara antingen StorageAccessKey eller SharedAccessKey. Använd StorageAccessKey i den här självstudien.
      • storageKey: Ange nyckeln för lagringskontot där BACPAC-filen lagras. Om lagringsnyckeltypen är SharedAccessKeymåste den föregås av ett "?".
      • storageUri: Ange URL:en för BACPAC-filen som lagras i ett lagringskonto.
      • administratorLogin: SQL-administratörens kontonamn.
      • administratorLoginPassword: SQL-administratörens lösenord. Information om hur du använder ett genererat lösenord finns i Krav.

I följande exempel visas den färdiga mallen:

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

Distribuera mallen

Använd projektnamnet och platsen som användes när du förberedde BACPAC-filen. Då placeras alla resurser i samma resursgrupp, vilket är användbart när du tar bort resurser.

  1. Logga in på Cloud Shell.

  2. Välj PowerShell i det övre vänstra hörnet.

    Skärmbild av Azure Cloud Shell i PowerShell med alternativet att ladda upp en fil.

  3. Välj Ladda upp/ladda ned filer och ladda upp filen azuredeploy.json .

  4. Om du vill distribuera mallen kopierar du och klistrar in följande skript i gränssnittsfönstret.

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

Verifiera distributionen

Om du vill komma åt servern från klientdatorn måste du lägga till en brandväggsregel. Klientens IP-adress och DEN IP-adress som används för att ansluta till servern kan vara annorlunda på grund av NAT (Network Address Translation). Mer information finns i Skapa och hantera IP-brandväggsregler.

När du till exempel loggar in på Frågeredigeraren visas ett meddelande om att IP-adressen inte är tillåten. Adressen skiljer sig från klientens IP-adress på grund av NAT. Välj meddelandets länk för att lägga till en brandväggsregel för IP-adressen. När du är klar kan du ta bort IP-adressen från serverns brandväggar och inställningar för virtuella nätverk .

I Azure Portal väljer du databasen i resursgruppen. Välj Frågeredigeraren (förhandsversion) och ange administratörsautentiseringsuppgifterna. Du ser att två tabeller har importerats till databasen.

Skärmbild av frågeredigeraren (förhandsversion) i Azure Portal.

Rensa resurser

När de Azure-resurser som du har distribuerat inte längre behövs tar du bort resursgruppen. Resursgruppen, lagringskontot, SQL-servern och SQL-databaserna tas bort.

  1. I Azure Portal anger du Resursgrupper i sökrutan.
  2. I fältet Filtrera efter namn anger du resursgruppens namn.
  3. Välj resursgruppens namn.
  4. Välj Ta bort resursgrupp.
  5. Bekräfta borttagningen genom att ange resursgruppens namn och sedan välja Ta bort.

Nästa steg

I den här självstudien distribuerade du en server och en databas och importerade en BACPAC-fil. Information om hur du felsöker malldistribution finns i: