Öğretici: ARM şablonlarıyla SQL BACPAC dosyalarını içeri aktarma

Azure Resource Manager şablonlarıyla (ARM şablonları) bir BACPAC dosyasını içeri aktarmak için Azure SQL Veritabanı uzantılarını kullanmayı öğrenin. Dağıtım yapıtları, ana şablon dosyalarına ek olarak bir dağıtımı tamamlamak için gereken tüm dosyalardır. BACPAC dosyası bir yapıttır.

Bu öğreticide, bir mantıksal SQL sunucusu ve tek bir veritabanı dağıtmak ve BACPAC dosyasını içeri aktarmak için bir şablon oluşturacaksınız. ARM şablonlarını kullanarak Azure sanal makine uzantılarını dağıtma hakkında bilgi için bkz . Öğretici: ARM şablonlarıyla sanal makine uzantılarını dağıtma.

Bu öğretici aşağıdaki görevleri kapsar:

  • Bir BACPAC dosyası hazırlayın.
  • Hızlı başlangıç şablonu açın.
  • Şablonu düzenleyin.
  • Şablonu dağıtma.
  • Dağıtımı doğrulayın.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Bu makaleyi tamamlamak için gerekenler:

BACPAC dosyası hazırlama

GitHub'da bir BACPAC dosyası paylaşılır. Kendi veritabanınızı oluşturmak için bkz. veritabanını Azure SQL Veritabanından BACPAC dosyasına dışarı aktarma. Dosyayı kendi belirleyeceğiniz bir konumda yayımlarsanız öğreticinin ilerleyen bölümlerinde şemayı güncelleştirmeniz gerekir.

BACPAC dosyasının ARM şablonuyla içeri aktarılabilmesi için önce bir Azure Depolama hesabında depolanması gerekir. Aşağıdaki PowerShell betiği, BACPAC dosyasını şu adımlarla hazırlar:

  • BACPAC dosyasını indirin.
  • Bir Azure Depolama hesabı oluşturun.
  • Depolama hesabı blob kapsayıcısı oluşturun.
  • BACPAC dosyasını kapsayıcıya yükleyin.
  • Depolama hesabı anahtarını, blob URL'sini, kaynak grubu adını ve konumu görüntüleyin.
  1. Cloud Shell açmak için Deneyin'i seçin. Ardından aşağıdaki PowerShell betiğini kopyalayıp kabuk penceresine yapıştırın.

    $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. Depolama hesabı anahtarını, BACPAC dosya URL'sini, proje adını ve konumu kaydedin. Bu öğreticinin ilerleyen bölümlerinde şablonu dağıtırken bu değerleri kullanacaksınız.

Hızlı başlangıç şablonunu açma

Bu öğreticide kullanılan şablon GitHub'da depolanır.

  1. Visual Studio Code Dosya>Aç'ı seçin.

  2. Dosya adı’na şu URL’yi yapıştırın:

    https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorial-sql-extension/azuredeploy.json
    
  3. Dosyayı açmak için ’ı seçin.

    Şablonda tanımlanan iki kaynak vardır:

    • Microsoft.Sql/servers. Bkz. şablon başvurusu.

    • Microsoft.SQL.servers/databases. Bkz. şablon başvurusu.

      Şablonu özelleştirmeden önce temel bilgilere ulaşmak yararlı olacaktır.

  4. Dosyanın bir kopyasını yerel bilgisayarınıza azuredeploy.json adıyla kaydetmek için Dosya>Farklı Kaydet'i seçin.

Şablonu düzenleme

  1. Depolama hesabı anahtarını ve BACPAC URL'sini parameters ayarlamak için bölümün sonuna iki parametre ekleyin.

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

    Özelliğin adminPassword kapanış küme ayracı ()} sonrasında virgül ekleyin. JSON dosyasını Visual Studio Code biçimlendirmek için Shift+Alt+F tuşlarına basın.

  2. Şablona iki kaynak ekleyin.

    • SQL Veritabanı uzantısının BACPAC dosyalarını içeri aktarmasına izin vermek için Azure hizmetlerinden gelen trafiğe izin vermelisiniz. SQL server dağıtıldığında, güvenlik duvarı kuralı Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver ayarını açar.

      Sunucu tanımının altına aşağıdaki güvenlik duvarı kuralını ekleyin:

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

      Aşağıdaki örnekte güncelleştirilmiş şablon gösterilmektedir:

      Güvenlik duvarı tanımını içeren şablonun ekran görüntüsü.

    • Aşağıdaki JSON kodunu kullanarak veritabanı tanımına bir SQL Veritabanı uzantısı kaynağı ekleyin:

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

      Aşağıdaki örnekte güncelleştirilmiş şablon gösterilmektedir:

      SQL Veritabanı uzantılı şablonun ekran görüntüsü.

      Kaynak tanımını anlamak için API sürümünün SQL Veritabanı uzantısı başvurusuna bakın. Önemli öğeler şunlardır:

      • dependsOn: Uzantı kaynağı veritabanı oluşturulduktan sonra oluşturulmalıdır.
      • storageKeyType: Kullanılacak depolama anahtarının türünü belirtin. Değer StorageAccessKey veya SharedAccessKey olabilir. Bu öğreticide kullanın StorageAccessKey .
      • storageKey: BACPAC dosyasının depolandığı depolama hesabının anahtarını belirtin. Depolama anahtarı türü ise SharedAccessKey, öncesinde "?" olmalıdır.
      • storageUri: Depolama hesabında depolanan BACPAC dosyasının URL'sini belirtin.
      • administratorLogin: SQL yöneticisinin hesap adı.
      • administratorLoginPassword: SQL yöneticisinin parolası. Oluşturulan parolayı kullanmak için bkz . Önkoşullar.

Aşağıdaki örnekte tamamlanmış şablon gösterilmektedir:

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

Şablonu dağıtma

BACPAC dosyasını hazırlarken kullanılan proje adını ve konumunu kullanın. Bu, tüm kaynakları aynı kaynak grubuna yerleştirir. Bu, kaynakları sildiğinizde yararlı olur.

  1. Cloud Shell oturum açın.

  2. Sol üst köşeden PowerShell'i seçin.

    PowerShell'de bir dosyayı karşıya yükleme seçeneğiyle birlikte Azure Cloud Shell ekran görüntüsü.

  3. Dosyaları karşıya yükle/indir'i seçin ve azuredeploy.json dosyanızı karşıya yükleyin.

  4. Şablonu dağıtmak için aşağıdaki betiği kopyalayıp kabuk penceresine yapıştırın.

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

Dağıtımı doğrulama

İstemci bilgisayarınızdan sunucuya erişmek için bir güvenlik duvarı kuralı eklemeniz gerekir. İstemcinizin IP adresi ve sunucuya bağlanmak için kullanılan IP adresi, ağ adresi çevirisi (NAT) nedeniyle farklı olabilir. Daha fazla bilgi için bkz. IP güvenlik duvarı kurallarını oluşturma ve yönetme.

Örneğin, Sorgu düzenleyicisinde oturum açtığınızda IP adresine izin verilmediğini belirten bir ileti görüntülenir. ADRES, NAT nedeniyle istemcinizin IP adresinden farklıdır. IP adresi için güvenlik duvarı kuralı eklemek üzere iletinin bağlantısını seçin. İşiniz bittiğinde IP adresini sunucunun Güvenlik Duvarları ve sanal ağlar ayarlarından silebilirsiniz.

Azure portal kaynak grubundan veritabanını seçin. Sorgu düzenleyicisi (önizleme) öğesini seçin ve yönetici kimlik bilgilerini girin. İki tablonun veritabanına aktarıldığını göreceksiniz.

Azure portal'daki Sorgu düzenleyicisinin (önizleme) ekran görüntüsü.

Kaynakları temizleme

Dağıttığınız Azure kaynaklarına artık gerek kalmadığında kaynak grubunu silin. Kaynak grubu, depolama hesabı, SQL sunucusu ve SQL veritabanları silinir.

  1. Azure portal arama kutusuna Kaynak grupları yazın.
  2. Ada göre filtrele alanına kaynak grubu adını girin.
  3. Kaynak grubu adını seçin.
  4. Kaynak grubunu sil'i seçin.
  5. Silme işlemini onaylamak için kaynak grubu adını girin ve Sil’i seçin.

Sonraki adımlar

Bu öğreticide, bir sunucu ve veritabanı dağıtıp bir BACPAC dosyasını içeri aktarmıştınız. Şablon dağıtımı sorunlarını gidermeyi öğrenmek için bkz: