Penyebaran templat ARM operasi bagaimana-jika

Sebelum menyebarkan templat Azure Resource Manager (templat ARM), Anda dapat mempratinjau perubahan yang akan terjadi. Azure Resource Manager menyediakan operasi bagaimana-jika sehingga Anda melihat bagaimana sumber daya akan berubah jika Anda menyebarkan templat. Operasi bagaimana-jika tidak membuat perubahan apa pun pada sumber daya yang ada. Sebaliknya, operasi ini memprediksi perubahan jika templat yang ditentukan diseabrkan.

Anda dapat menggunakan operasi bagaimana-jika dengan operasi Azure PowerShell, Azure CLI, atau REST API. Bagaimana-jika didukung untuk grup sumber daya, langganan, grup manajemen, dan penyebaran tingkat penyewa.

Sumber daya pelatihan

Untuk mempelajari selengkapnya tentang bagaimana-jika, dan untuk panduan langsung, lihat Pratinjau perubahan penyebaran Azure menggunakan bagaimana-jika.

Memerlukan izin

Untuk menyebarkan file Bicep atau templat ARM, Anda memerlukan akses tulis pada sumber daya yang disebar dan akses ke semua operasi di jenis sumber daya Microsoft.Resources/deployments. Misalnya, untuk menyebarkan mesin virtual, Anda memerlukan izin akses Microsoft.Compute/virtualMachines/write dan Microsoft.Resources/deployments/*. Operasi bagaimana-jika memiliki persyaratan izin yang sama.

Untuk daftar peran dan izin, lihat Peran bawaan Azure.

Batas bagaimana-jika

Bagaimana-jika memperluas templat berlapis hingga batas ini tercapai:

  • 500 templat berlapis.
  • 800 grup sumber daya dalam penyebaran lintas grup sumber daya.
  • 5 menit yang diambil untuk memperluas templat berlapis.

Ketika salah satu batas tercapai, jenis perubahan sumber daya yang tersisa diatur ke Abaikan.

Install Azure PowerShell Module

Untuk menggunakan bagaimana-jika di PowerShell, Anda harus memiliki versi 4.2 atau yang lebih baru dari modul Az.

Untuk memasang modul, gunakan:

Install-Module -Name Az -Force

Untuk informasi selengkapnya tentang memasang modul, lihat Memasang Azure PowerShell.

Memasang Azure CLI

Untuk menggunakan bagaimana-jika di Azure CLI, Anda harus memiliki Azure CLI 2.14.0 atau yang lebih baru. Jika diperlukan, Pasang versi terbaru Azure CLI.

Melihat Hasil

Saat Anda menggunakan bagaimana-jika di PowerShell atau Azure CLI, output menyertakan hasil berkode warna yang membantu Anda melihat berbagai jenis perubahan.

Cuplikan layar operasi bagaimana-jika penyebaran templat Resource Manager dengan payload sumber daya penuh dan jenis perubahan.

Output teksnya adalah:

Resource and property changes are indicated with these symbols:
  - Delete
  + Create
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
    - tags.Owner: "Team A"
    ~ properties.addressSpace.addressPrefixes: [
      - 0: "10.0.0.0/16"
      + 0: "10.0.0.0/15"
      ]
    ~ properties.subnets: [
      - 0:

          name:                     "subnet001"
          properties.addressPrefix: "10.0.0.0/24"

      ]

Resource changes: 1 to modify.

Catatan

Operasi bagaimana-jika tidak bisa mengatasi fungsi referensi. Setiap kali Anda mengatur properti ke ekspresi templat yang menyertakan fungsi referensi, bagaimana-jika melaporkan properti akan berubah. Perilaku ini terjadi karena bagaimana-jika membandingkan nilai terbaru dari sebuah properti (seperti true atau false untuk nilai boolean) dengan templat ekspresi yang tidak terselesaikan. Jelasnya, nilai-nilai ini tidak akan cocok. Saat Anda menyebarkan templat, properti hanya akan berubah saat ekspresi templat menetapkan nilai yang berbeda.

Perintah bagaimana-jika

Azure PowerShell

Untuk mempratinjau perubahan sebelum menyebarkan templat, gunakan New-AzResourceGroupDeployment atau New-AzSubscriptionDeployment. Tambahkan parameter pengalihan -Whatif ke perintah penyebaran.

  • New-AzResourceGroupDeployment -Whatif untuk penyebaran grup sumber daya

  • New-AzSubscriptionDeployment -Whatif dan New-AzDeployment -Whatif untuk penyebaran tingkat langganan

Anda dapat menggunakan parameter pengalihan -Confirm untuk mempratinjau perubahan dan diminta untuk melanjutkan penyebaran.

  • New-AzResourceGroupDeployment -Confirm untuk penyebaran grup sumber daya
  • New-AzSubscriptionDeployment -Confirm dan New-AzDeployment -Confirm untuk penyebaran tingkat langganan

Perintah sebelumnya mengembalikan ringkasan teks yang dapat Anda periksa secara manual. Untuk mendapatkan objek yang dapat Anda periksa secara terprogram untuk perubahan, gunakan Get-AzResourceGroupDeploymentWhatIfResult atau Get-AzSubscriptionDeploymentWhatIfResult.

  • $results = Get-AzResourceGroupDeploymentWhatIfResult untuk penyebaran grup sumber daya
  • $results = Get-AzSubscriptionDeploymentWhatIfResult atau $results = Get-AzDeploymentWhatIfResult untuk penyebaran tingkat langganan

Azure CLI

Untuk mempratinjau perubahan sebelum menyebarkan templat, gunakan:

Anda dapat menggunakan pengalihan --confirm-with-what-if (atau bentuk singkatnya -c) mempratinjau perubahan dan diminta untuk melanjutkan penyebaran. Tambahkan pengalihan ini ke:

Misalnya, gunakan az deployment group create --confirm-with-what-if atau -c untuk penyebaran grup sumber daya.

Perintah sebelumnya mengembalikan ringkasan teks yang dapat Anda periksa secara manual. Untuk mendapatkan objek JSON yang dapat Anda periksa perubahan secara terprogram, gunakan tombol --no-pretty-print. Misalnya, gunakan az deployment group what-if --no-pretty-print untuk penyebaran grup sumber daya.

Jika Anda ingin mengembalikan hasil tanpa warna, buka file konfigurasi Azure CLI Anda. Atur no_color ke ya.

REST API Azure

Untuk REST API, gunakan:

Jenis perubahan

Operasi bagaimana-jika mencantumkan tujuh jenis perubahan yang berbeda:

  • Buat: Sumber daya baru-baru ini tidak muncul tapi didefinisikan pada templat. Sumber daya akan dibuat.
  • Hapus: Jenis perubahan ini hanya berlaku saat menggunakan mode lengkap untuk penyebaran. Sumber daya ada, tetapi tidak didefinisikan dalam templat. Dengan mode lengkap, sumber daya akan dihapus. Hanya sumber daya yang mendukung penghapusan mode lengkap yang disertakan dalam jenis perubahan ini.
  • Abaikan: Sumber daya ada, tetapi tidak didefinisikan dalam templat. Sumber daya tidak akan digunakan atau dimodifikasi. Ketika Anda mencapai batas untuk memperluas templat berlapis, Anda akan menemukan jenis perubahan ini. Lihat Batas bagaimana-jika.
  • NoChange: Sumber daya ada, tetapi tidak didefinisikan dalam templat. Sumber daya akan disebarkan ulang, tetapi properti sumber daya tidak akan berubah. Jenis perubahan ini dikembalikan ketika ResultFormat diatur ke FullResourcePayloads, yang merupakan nilai default.
  • NoEffect: Properti hanya siap dan akan diabaikan oleh layanan. Misalnya, sku.tier properti selalu diatur untuk dicocokkan sku.nameMicrosoft.ServiceBus di namespace layanan.
  • Modifikasi: Sumber daya ada dan didefinisikan dalam templat. Sumber daya akan disebarkan ulang dan properti sumber daya akan berubah. Jenis perubahan ini dikembalikan ketika ResultFormat diatur ke FullResourcePayloads, yang merupakan nilai default.
  • Sebarkan: Sumber daya ada, dan didefinisikan dalam templat. Sumber daya akan disebarkan ulang. Properti sumber daya mungkin berubah mungkin juga tidak berubah. Operasi mengembalikan jenis perubahan ini ketika tidak memiliki cukup informasi untuk menentukan apakah ada properti yang akan berubah. Anda hanya melihat kondisi ini saat ResultFormat diatur ke ResourceIdOnly.

Format Hasil

Anda mengontrol tingkat detail yang dikembalikan tentang perubahan yang diprediksi. Anda memiliki dua opsi:

  • FullResourcePayloads - mengembalikan daftar sumber daya yang akan berubah dan detail tentang properti yang akan berubah
  • ResourceIdOnly - mengembalikan daftar sumber daya yang akan berubah

Nilai defaultnya adalah FullResourcePayloads.

Untuk perintah penyebaran PowerShell, gunakan parameter -WhatIfResultFormat. Dalam perintah objek terprogram, gunakan parameter ResultFormat.

Untuk Azure CLI, gunakan parameter --result-format.

Hasil berikut menunjukkan dua format output yang berbeda:

  • Payload sumber daya penuh

    Resource and property changes are indicated with these symbols:
      - Delete
      + Create
      ~ Modify
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/./resourceGroups/ExampleGroup
    
      ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
        - tags.Owner: "Team A"
        ~ properties.addressSpace.addressPrefixes: [
          - 0: "10.0.0.0/16"
          + 0: "10.0.0.0/15"
          ]
        ~ properties.subnets: [
          - 0:
            name:                     "subnet001"
            properties.addressPrefix: "10.0.0.0/24"
    
          ]
    
    Resource changes: 1 to modify.
    
  • ID sumber daya saja

    Resource and property changes are indicated with this symbol:
      ! Deploy
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/./resourceGroups/ExampleGroup
    
      ! Microsoft.Network/virtualNetworks/vnet-001
    
    Resource changes: 1 to deploy.
    

Menjalankan operasi bagaimana-jika

Menyiapkan lingkungan

Untuk melihat cara bagaimana-jika bekerja, mari kita jalankan beberapa pengujian. Pertama, sebarkan templat yang membuat jaringan virtual. Anda akan menggunakan jaringan virtual ini untuk menguji bagaimana perubahan dilaporkan oleh bagaimana-jika.

New-AzResourceGroup `
  -Name ExampleGroup `
  -Location centralus
New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"

Menguji modifikasi

Setelah penyebaran selesai, Anda siap untuk menguji operasi bagaimana-jika. Kali ini Anda menggunakan templat yang mengubah jaringan virtual. Tidak ada tag asli, subnet telah dihapus, dan prefiks alamat telah berubah.

New-AzResourceGroupDeployment `
  -Whatif `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

Output bagaimana-jika tampak mirip dengan:

Cuplikan layar Resource Manager output operasi bagaimana-jika penyebaran templat memperlihatkan perubahan.

Output teksnya adalah:

Resource and property changes are indicated with these symbols:
  - Delete
  + Create
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
    - tags.Owner: "Team A"
    ~ properties.addressSpace.addressPrefixes: [
      - 0: "10.0.0.0/16"
      + 0: "10.0.0.0/15"
      ]
    ~ properties.subnets: [
      - 0:

        name:                     "subnet001"
        properties.addressPrefix: "10.0.0.0/24"

      ]

Resource changes: 1 to modify.

Pemberitahuan di bagian atas output yang didefinisikan oleh warna menunjukkan jenis perubahan.

Bagian bawah output menunjukkan Pemilik tag telah dihapus. Prefiks alamat berubah dari 10.0.0.0/16 menjadi 10.0.0.0/15. Subnet bernama subnet001 telah dihapus. Ingat perubahan ini tidak disebarkan. Anda melihat pratinjau perubahan yang akan terjadi jika Anda menggunakan templat.

Beberapa properti yang tercantum sebagai dihapus tidak akan benar-benar berubah. Properti dapat dilaporkan sebagai dihapus secara tidak benar saat tidak ada dalam templat, tetapi secara otomatis diatur selama penyebaran sebagai nilai default. Hasil ini dianggap "tidak penting" dalam respons bagaimana-jika. Sumber daya terakhir yang disebarkan akan memiliki nilai yang ditetapkan untuk properti. Ketika operasi bagaimana-jika matang, properti ini akan disaring dari hasil.

Mengevaluasi hasil bagaimana-jika secara terprogram

Sekarang, mari kita evaluasi secara terprogram hasil bagaimana-jika dengan mengatur perintah ke variabel.

$results = Get-AzResourceGroupDeploymentWhatIfResult `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

Anda dapat melihat ringkasan setiap perubahan.

foreach ($change in $results.Changes)
{
  $change.Delta
}

Mengonfirmasi penghapusan

Operasi bagaimana-jika mendukung penggunaan mode penyebaran. Saat diatur ke mode selesai, sumber daya yang tidak ada dalam templat akan dihapus. Contoh berikut menyebarkan templat yang tidak memiliki sumber daya yang ditentukan dalam mode lengkap.

Untuk mempratinjau perubahan sebelum menyebarkan templat, gunakan parameter konfirmasi pengalihan dengan perintah penyebaran. Jika perubahan sesuai harapan Anda, tanggapi bahwa Anda ingin penyebaran selesai.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Mode Complete `
  -Confirm `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"

Karena tidak ada sumber daya yang didefinisikan dalam templat dan mode penyebaran diatur ke selesai, jaringan virtual akan dihapus.

Cuplikan layar penyebaran templat Resource Manager output operasi bagaimana-jika dalam mode penyebaran selesai.

Output teksnya adalah:

Resource and property changes are indicated with this symbol:
  - Delete

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  - Microsoft.Network/virtualNetworks/vnet-001

      id:
"/subscriptions/./resourceGroups/ExampleGroup/providers/Microsoft.Network/virtualNet
works/vnet-001"
      location:        "centralus"
      name:            "vnet-001"
      tags.CostCenter: "12345"
      tags.Owner:      "Team A"
      type:            "Microsoft.Network/virtualNetworks"

Resource changes: 1 to delete.

Are you sure you want to execute the deployment?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Anda melihat perubahan yang diharapkan dan dapat mengonfirmasi bahwa Anda ingin penyebaran berjalan.

SDK

Anda dapat menggunakan operasi bagaimana-jika melalui Azure SDKs.

Langkah berikutnya