Mode penyebaran Azure Resource Manager

Saat menyebarkan sumber daya, Anda menentukan bahwa penyebaran adalah pembaruan bertahap atau pembaruan lengkap. Perbedaan antara kedua mode ini adalah bagaimana Resource Manager menangani sumber daya yang ada di grup sumber daya yang tidak ada dalam templat.

Untuk kedua mode, Resource Manager mencoba membuat semua sumber daya yang ditentukan dalam templat. Jika sumber daya sudah ada di grup sumber daya dan pengaturannya tidak berubah, tidak ada operasi yang diambil untuk sumber daya tersebut. Jika Anda mengubah nilai properti untuk sumber daya, sumber daya diperbarui dengan nilai baru tersebut. Jika Anda mencoba memperbarui lokasi atau tipe sumber daya yang ada, penyebaran akan gagal dengan kesalahan. Sebagai gantinya, sebarkan sumber daya baru dengan lokasi atau jenis yang Anda butuhkan.

Mode defaultnya adalah bertahap.

Mode lengkap

Dalam mode lengkap, Resource Manager menghapus sumber daya yang ada di grup sumber daya, tetapi tidak ditentukan dalam templat.

Catatan

Selalu gunakan operasi what-if sebelum menyebarkan templat dalam mode lengkap. Operasi what-if memperlihatkan sumber daya mana yang akan dibuat, dihapus, atau diubah. Gunakan bagaimana-jika untuk menghindari menghapus sumber daya secara tidak sengaja.

Jika templat Anda menyertakan sumber daya yang tidak disebarkan karena kondisi mengevaluasi ke salah, hasilnya bergantung pada versi REST API mana yang Anda gunakan untuk menyebarkan templat. Jika Anda menggunakan versi yang lebih lama dari 2019-05-10, sumber daya tidak dihapus. Dengan 2019-05-10 atau yang lebih baru, sumber daya dihapus. Versi terbaru Azure PowerShell dan Azure CLI menghapus sumber daya.

Hati-hati menggunakan mode lengkap dengan salin loop. Sumber daya apa pun yang tidak ditentukan dalam templat setelah menyelesaikan salin loop akan dihapus.

Jika Anda menyebarkan lebih dari satu grup sumber daya dalam templat, sumber daya dalam grup sumber daya yang ditentukan dalam operasi penyebaran memenuhi syarat untuk dihapus. Sumber daya dalam grup sumber daya sekunder tidak dihapus.

Ada beberapa perbedaan dalam cara jenis sumber daya menangani penghapusan mode lengkap. Sumber daya induk dihapus secara otomatis saat tidak berada dalam templat yang disebarkan dalam mode lengkap. Beberapa sumber daya anak tidak dihapus secara otomatis saat tidak ada di templat. Namun, sumber daya turunan ini akan dihapus jika sumber daya induk dihapus.

Misalnya, jika grup sumber daya Anda berisi zona DNS (Microsoft.Network/dnsZones jenis sumber daya) dan data CNAME (Microsoft.Network/dnsZones/CNAME jenis sumber daya), zona DNS adalah sumber daya induk untuk data CNAME. Jika Anda menyebarkan dengan mode lengkap dan tidak menyertakan zona DNS dalam templat Anda, zona DNS dan data CNAME akan dihapus. Jika Anda menyertakan zona DNS dalam templat Anda tapi tidak menyertakan data CNAME, CNAME tidak dihapus.

Untuk daftar bagaimana jenis sumber daya menangani penghapusan, lihat Penghapusan sumber daya Azure untuk penyebaran mode lengkap.

Jika grup sumber daya dikunci, mode lengkap tidak menghapus sumber daya.

Catatan

Hanya templat tingkat dasar yang mendukung mode penyebaran lengkap. Untuk templat yang berlapis atau ditautkan, Anda harus menggunakan mode bertahap.

Penyebaran tingkat langganan tidak mendukung mode lengkap.

Saat ini, portal tidak mendukung mode lengkap.

Mode bertahap

Dalam mode bertahap, Resource Manager tidak mengubah sumber daya yang ada di grup sumber daya, tetapi tidak ditentukan dalam templat. Sumber daya dalam templat ditambahkan ke grup sumber daya.

Catatan

Saat melakukan penyebaran ulang sumber daya yang ada dalam mode bertahap, semua properti diterapkan kembali. Properti tidak ditambahkan secara bertahap. Kesalahpahaman umum yang ada terjadi adalah properti yang tidak ditentukan dalam templat dibiarkan tidak berubah. Jika Anda tidak menentukan properti tertentu, Resource Manager menginterpretasikan penyebaran sebagai menimpa nilai-nilai tersebut. Properti yang tidak disertakan dalam templat direset ke nilai default. Tentukan semua nilai non-default untuk sumber daya, bukan hanya yang sedang Anda perbarui. Definisi sumber daya dalam templat selalu berisi status akhir sumber daya. Ini tidak dapat mewakili pembaruan parsial ke sumber daya yang ada.

Terkadang, properti yang Anda tentukan untuk sumber daya benar-benar diimplementasikan sebagai sumber daya turunan. Misalnya, saat Anda menyediakan nilai konfigurasi situs untuk aplikasi web, nilai tersebut diterapkan dalam jenis sumber daya anak Microsoft.Web/sites/config. Jika Anda melakukan penyebaran ulang aplikasi web dan menentukan objek kosong untuk nilai konfigurasi situs, sumber daya turunan tidak diperbarui. Namun, jika Anda menyediakan nilai konfigurasi situs baru, jenis sumber daya turunan diperbarui.

Contoh hasil:

Untuk mengilustrasikan perbedaan antara mode bertahap dan lengkap, pertimbangkan skenario berikut.

Grup Sumber Daya berisi:

  • Sumber Daya A
  • Sumber Daya B
  • Sumber Daya C

Templat berisi:

  • Sumber Daya A
  • Sumber Daya B
  • Sumber Daya D

Saat disebarkan dalam mode bertahap, grup sumber daya memiliki:

  • Sumber Daya A
  • Sumber Daya B
  • Sumber Daya C
  • Sumber Daya D

Saat disebarkan dalam mode lengkap, Sumber Daya C akan dihapus. Grup sumber daya memiliki:

  • Sumber Daya A
  • Sumber Daya B
  • Sumber Daya D

Mengatur mode penyebaran

Untuk mengatur mode penyebaran saat menyebarkan dengan PowerShell, gunakan parameter Mode.

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

Untuk mengatur mode penyebaran saat menyebarkan dengan Azure CLI, gunakan parameter mode.

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

Contoh berikut ini memperlihatkan templat tertaut yang diatur ke mode penerapan bertahap:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

Langkah berikutnya