Memperkirakan hasil penyebaran dengan simulasi apa-jika
Siapa pun yang menyebarkan atau memodifikasi sumber daya di lingkungan memiliki pertanyaan seperti ini di pikiran mereka:
- Akankah aku merusak sesuatu?
- Apakah saya akan menghapus sesuatu?
- Bagaimana penyebaran ini akan memengaruhi sumber daya yang ada?
- Dapatkah saya memvalidasi bahwa apa yang saya harapkan terjadi sebenarnya adalah apa yang akan terjadi dalam penyebaran, sebelum saya menekan tombol sebarkan?
Menyebarkan dan berharap yang terbaik bukanlah pendekatan yang baik. Pendekatan yang lebih baik adalah menggunakan operasi bagaimana-jika. Operasi ini membantu Anda mengantisipasi konsekuensi dari penyebaran baru, jika Anda mencoba melakukannya.
Azure Resource Manager menyediakan operasi bagaimana-jika untuk menyoroti perubahan saat Anda menyebarkan templat. Operasi bagaimana-jika tidak membuat perubahan apa pun pada sumber daya yang ada. Sebaliknya, ini memprediksi perubahan jika templat yang ditentukan disebarkan di grup sumber daya dan tingkat langganan.
Nota
Operasi skenario terkadang menunjukkan bahwa sumber daya akan berubah padahal sebenarnya tidak ada perubahan yang terjadi. Kami berupaya mengurangi masalah ini, tetapi kami membutuhkan bantuan Anda. Harap laporkan masalah ini.
Menggunakan operasi skenario hipotetis membandingkan model status saat ini dengan model status yang diinginkan. Operasi bagaimana-jika mengonfirmasi apakah perubahan yang dibuat oleh templat Anda sesuai dengan harapan Anda tanpa menerapkan perubahan tersebut ke sumber daya nyata atau ke status sumber daya tersebut.
Mengontrol format hasil skenario 'seandainya'
Cmdlet Azure PowerShell New-AzResourceGroupDeployment
membuat penyebaran baru ke grup sumber daya. Saat Anda menambahkan parameter -Whatif
ke perintah ini, perintah beralih dari melakukan penyebaran ke hanya melaporkan pratinjau tentang apa yang akan terjadi jika Anda melakukannya.
Perintah az deployment group what-if
memberi Anda pratinjau tentang apa yang akan terjadi jika Anda melakukan penyebaran.
Anda dapat mengontrol jumlah output teks dari operasi bagaimana-jika dengan menggunakan salah satu format hasil ini:
-
FullResourcePayloads
. Dengan menyertakan parameter ini, Anda mendapatkan output verbose yang terdiri dari daftar sumber daya yang akan berubah. Output juga menunjukkan detail tentang semua properti yang akan berubah sesuai dengan template. -
ResourceIdOnly
. Mode ini mengembalikan daftar sumber daya yang akan berubah, tetapi tidak semua detailnya.
Misalnya, asumsikan bahwa Anda mengubah jenis penyimpanan dalam templat yang menyebarkan satu akun penyimpanan ke lingkungan yang ada.
Anda mungkin menjalankan kode PowerShell berikut dan meminta Resource Manager untuk memberi Anda payload sumber daya lengkap:
New-AzResourceGroupDeployment `
-ResourceGroupName ToyStorage `
-TemplateFile $templateFileName `
-WhatIf `
-WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
--resource-group ToyStorage \
--template-file $templateFile \
--result-format FullResourcePayloads
Perintah sebelumnya menghasilkan hasil berikut:
Resource and property changes are indicated with this symbol:
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage
~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
~ sku.name: "Standard_LRS" => "Standard_GRS"
Resource changes: 1 to modify.
Anda kemudian dapat menjalankan ulang perintah tetapi hanya meminta ID sumber daya:
New-AzResourceGroupDeployment `
-ResourceGroupName ToyStorage `
-TemplateFile $templateFileName `
-WhatIf `
-WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
--resource-group ToyStorage \
--template-file $templateFile \
--result-format ResourceIdOnly
Perintah sebelumnya menghasilkan hasil berikut:
Resource and property changes are indicated with this symbol:
! Deploy
The deployment will update the following scope:
Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage
! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi
Resource changes: 1 to deploy.
Jenis perubahan yang terdeteksi oleh analisis 'what-if'.
Saat Anda menggunakan operasi bagaimana-jika, operasi tersebut mencantumkan enam jenis perubahan:
Jenis | Penjelasan | Efek |
---|---|---|
Buat | Sumber daya saat ini tidak ada tetapi didefinisikan dalam templat. | Sumber daya akan dibuat. |
Menghapus | Jenis perubahan ini hanya berlaku saat Anda menggunakan mode lengkap untuk penyebaran. Sumber daya ada tetapi tidak ditentukan dalam templat. | Jika Anda menyebarkan dengan menggunakan mode bertambah bertahap, sumber daya tidak dihapus. Jika Anda menyebarkan dengan menggunakan mode lengkap, sumber daya akan dihapus. Jenis perubahan ini dikembalikan hanya untuk sumber daya yang mendukung penghapusan melalui mode lengkap. |
Mengabaikan | Sumber daya ada tetapi tidak ditentukan dalam templat. | Saat Anda menggunakan mode inkremental, yang merupakan mode penyebaran default, sumber daya tidak disebarkan atau dimodifikasi. Jika Anda menyebarkan dengan menggunakan mode lengkap, sumber daya akan dihapus. |
TanpaPerubahan | Sumber daya ada dan didefinisikan dalam templat. | Sumber daya akan disebarkan ulang, tetapi properti sumber daya tidak akan berubah. Jenis perubahan ini dikembalikan ketika format hasil diatur ke FullResourcePayloads , yang merupakan format hasil default. |
Memodifikasi | Sumber daya ada dan didefinisikan dalam templat. | Sumber daya akan disebarkan ulang, dan properti sumber daya akan berubah. Jenis perubahan ini dikembalikan ketika format hasil diatur ke FullResourcePayloads , yang merupakan format hasil default. |
Menyebarkan | Sumber daya ada dan didefinisikan dalam templat. | Sumber daya akan disebarkan ulang. Properti sumber daya mungkin atau mungkin tidak berubah. Operasi mengembalikan jenis perubahan ini ketika tidak memiliki informasi yang cukup untuk menentukan apakah ada properti yang akan berubah. Anda melihat kondisi ini hanya ketika format hasil diatur ke ResourceIdOnly . |
Jika Anda tidak perlu mengetahui semua jenis perubahan, Anda dapat menggunakan argumen -WhatIfExcludeChangeType
untuk menghilangkan jenis yang tidak Anda minati.
Jika Anda tidak perlu mengetahui semua jenis perubahan, Anda dapat menggunakan argumen --what-if-exclude-change-types
untuk menghilangkan jenis yang tidak Anda minati.
Menggunakan hasil analisis skenario dalam skrip
Anda mungkin ingin menggunakan hasil dari operasi what-if dalam skrip atau sebagai bagian dari proses penyebaran otomatis.
Anda bisa mendapatkan hasilnya dengan menggunakan cmdlet Get-AzResourceGroupDeploymentWhatIfResult
. Kemudian, skrip Anda dapat mengurai hasil dan melakukan logika kustom apa pun yang mungkin Anda butuhkan.
Anda bisa mendapatkan hasil JSON mentah dengan menambahkan argumen --no-pretty-print
ke perintah CLI Anda. Kemudian, skrip Anda dapat mengurai hasil dan melakukan logika kustom apa pun yang mungkin Anda butuhkan.
Mode penyebaran dan penghapusan sumber daya
Ada kalanya Anda ingin mengonfirmasi penghapusan sumber daya saat Anda menyebarkan templat. Untuk itu, operasi what-if memperhitungkan mode penyebaran yang Anda gunakan. Jika Anda menggunakan mode penyebaran lengkap , Resource Manager melaporkan sumber daya yang akan dihapus karena tidak terdefinisi dalam penyebaran Anda.
Mari kita lihat contoh templat yang memperbarui sumber daya yang ada dan disebarkan dalam mode lengkap:
Berikut adalah penjelasan tentang apa yang terjadi dalam contoh ini:
- Templat memperbarui akun penyimpanan bernama
storage-1
, yang sudah disebarkan. SKU berubah dari LRS menjadi GRS, dan tagowner
mengubah nilai menjadi Team A. Output bagaimana-jika menunjukkan jenis perubahan Modifikasi untuk sumber daya ini. - Templat ini membuat akun Azure Cosmos DB baru bernama
cosmos-db-1
, yang belum ada di grup sumber daya. Output bagaimana-jika menunjukkan jenis perubahan Buat untuk sumber daya ini. - Templat tidak menyertakan server logis Azure SQL yang sudah ada di grup sumber daya. Karena penyebaran menggunakan mode lengkap, output skenario apa-jika menunjukkan perubahan jenis Hapus untuk sumber daya tertentu ini. Jika penyebaran menggunakan mode inkremental alih-alih mode lengkap, jenis perubahan akan Abaikan sebagai gantinya.
Konfirmasikan penerapan Anda
Untuk mempratinjau perubahan sebelum menyebarkan templat, gunakan parameter -Confirm
dengan perintah penyebaran. Jika perubahan seperti yang Anda harapkan, konfirmasikan bahwa Anda ingin penyebaran akan diselesaikan.
Tips
Sebaiknya jalankan perintah penyebaran dengan sakelar -Confirm
, terutama jika Anda menyebarkan dalam mode lengkap. Jika Anda menggunakan sakelar -Confirm
, Anda memiliki kesempatan untuk menghentikan operasi jika Anda tidak menyukai perubahan yang diusulkan.
Untuk mempratinjau perubahan sebelum menyebarkan templat, gunakan argumen --confirm-with-what-if
dengan perintah penyebaran. Jika perubahan tersebut sesuai dengan yang Anda harapkan, nyatakan bahwa Anda ingin penyebaran tersebut selesai.
Saran
Sebaiknya Anda menjalankan perintah penyebaran dengan argumen --confirm-with-what-if
, terutama jika Anda melakukan penyebaran dalam mode lengkap. Jika Anda menggunakan sakelar --confirm-with-what-if
, Anda memiliki kesempatan untuk menghentikan operasi jika Anda tidak menyukai perubahan yang diusulkan.