Mengatasi kesalahan untuk templat yang tidak valid

Artikel ini menjelaskan cara mengatasi kesalahan templat yang tidak valid untuk file Bicep dan templat Azure Resource Manager (templat ARM). Kesalahan terjadi karena beberapa alasan, seperti kesalahan sintaksis, nilai parameter tidak valid, atau dependensi melingkar.

Gejala

Saat templat disebarkan, Anda menerima kesalahan yang menunjukkan:

Code=InvalidTemplate
Message=<varies>

Pesan kesalahan tergantung pada jenis kesalahan.

Penyebab

Kesalahan ini dapat disebabkan oleh beberapa jenis kesalahan yang berbeda. Biasanya dikarenakan adanya galat sintaksis atau struktural dalam templat.

Solusi 1: Kesalahan sintaks

Jika Anda menerima pesan kesalahan yang menunjukkan kegagalan validasi templat, berarti mungkin terdapat masalah sintaks dalam templat Anda.

Code=InvalidTemplate
Message=Deployment template validation failed

Kesalahan sintaks dapat terjadi karena ekspresi templat memiliki banyak elemen. Misalnya, tugas nama untuk akun penyimpanan mencakup pasangan kuotasi tunggal atau ganda, tanda kurung keriting, tanda kurung siku, dan tanda kurung. Ekspresi juga berisi fungsi dan karakter seperti tanda dolar, koma, dan titik.

name: 'storage${uniqueString(resourceGroup().id)}'

Saat Anda menemukan jenis kesalahan ini, tinjau sintaks ekspresi. Untuk mengidentifikasi kesalahan templat, Anda dapat menggunakan Visual Studio Code dengan ekstensi Bicep atau ekstensi Alat Azure Resource Manager terbaru.

Solusi 2: Panjang segmen yang tidak sesuai

Kesalahan templat yang tidak valid lain terjadi ketika nama sumber daya tidak dalam format yang benar. Untuk mengatasi kesalahan itu, lihat Mengatasi kesalahan untuk ketidakcocokan nama dan jenis.

Solusi 3: Parameter tidak valid

Anda dapat menentukan nilai parameter yang diizinkan dalam templat. Selama penyebaran, jika Anda memberikan nilai yang bukan merupakan nilai yang diizinkan, Anda akan menerima pesan yang serupa dengan kesalahan berikut:

Code=InvalidTemplate;
Message=Deployment template validation failed: 'The provided value {parameter value}
for the template parameter {parameter name} is not valid. The parameter value is not
part of the allowed values

Periksa templat untuk nilai parameter yang diizinkan, dan gunakan nilai yang diizinkan selama penyebaran. Untuk informasi selengkapnya, lihat nilai yang diizinkan untuk Bicep atau templat ARM.

Solusi 4: Terlalu banyak grup sumber daya target

Anda mungkin melihat kesalahan ini pada penyebaran sebelumnya karena Anda dibatasi pada lima grup sumber daya target dalam satu penyebaran. Pada Mei 2020, batas tersebut ditingkatkan menjadi 800 grup sumber daya. Untuk informasi selengkapnya, lihat cara menyebarkan ke beberapa grup sumber daya untuk templat Bicep atau ARM.

Solusi 5: Dependensi sirkuler terdeteksi

Anda mendapati kesalahan ini ketika sumber daya bergantung pada satu sama lain sehingga mencegah terjadinya penyebaran. Kombinasi saling ketergantungan membuat dua sumber daya atau lebih menunggu sumber daya lain yang juga menunggu. Misalnya, resource1 tergantung pada resource3, resource2 tergantung pada resource1, dan resource3 tergantung pada resource2. Umumnya, Anda dapat menyelesaikan masalah ini dengan menghapus dependensi yang tidak perlu.

Bicep menciptakan dependensi implisit ketika satu sumber daya menggunakan nama simbolis dari sumber daya lain. Dependensi eksplisit menggunakan dependsOn biasanya tidak diperlukan. Untuk informasi selengkapnya, lihat Dependensi Bicep.

Untuk mengatasi dependensi sirkuler:

  1. Pada templat Anda, temukan sumber daya yang diidentifikasi dalam dependensi sirkuler.
  2. Untuk sumber daya tersebutdependsOn, periksa properti dan penggunaan fungsi atau resourceId apa pun reference untuk melihat sumber daya mana yang bergantung padanya.
  3. Periksa sumber daya tersebut untuk melihat sumber daya mana yang bergantung padanya. Ikuti dependensi tersebut hingga Anda menemukan sumber daya yang bergantung pada sumber daya asli.
  4. Untuk sumber daya yang terlibat dalam dependensi sirkuler, periksa dengan cermat mengenai semua penggunaan properti dependsOn untuk mengidentifikasi dependensi apa pun yang tidak diperlukan. Untuk memecahkan masalah penyebaran, hapus dependensi melingkar. Daripada menghapus kode, Anda dapat menggunakan komentar sehingga kode tidak berjalan selama penyebaran berikutnya. Anda dapat menggunakan komentar baris tunggal (//) atau komentar multibaris (/* ... */) dalam templat ARM atau file Bicep .
  5. Sebar ulang templat tersebut.

Menghapus nilai dari properti dependsOn dapat menyebabkan kesalahan saat Anda menyebarkan templat. Jika terjadi kesalahan, tambahkan kembali dependensi ke dalam templat. Jika Anda menggunakan komentar untuk melewati kode di templat, Anda dapat menghapus komentar untuk memulihkan kode.

Jika pendekatan tersebut tidak menyelesaikan dependensi sirkuler, pertimbangkan untuk memindahkan sebagian logika penyebaran Anda ke sumber daya anak (seperti ekstensi atau pengaturan konfigurasi). Konfigurasikan sumber daya anak tersebut untuk disebarkan setelah sumber daya yang terlibat dalam dependensi sirkuler. Misalnya, ketika Anda menyebarkan dua komputer virtual tetapi Anda harus mengatur properti pada masing-masing yang merujuk ke yang lain. Anda dapat menyebarkannya dalam urutan berikut:

  1. vm1
  2. vm2
  3. Ekstensi pada vm1 bergantung pada vm1 dan vm2. Ekstensi menetapkan nilai pada vm1 yang didapatnya dari vm2.
  4. Ekstensi pada vm2 bergantung pada vm1 dan vm2. Ekstensi menetapkan nilai pada vm2 yang didapatnya dari vm1.

Pendekatan yang sama berfungsi untuk aplikasi App Service. Pertimbangkan untuk memindahkan nilai konfigurasi ke dalam sumber daya anak dari sumber daya aplikasi. Anda dapat menyebarkan dua aplikasi web dalam urutan berikut:

  1. webapp1
  2. webapp2
  3. Konfigurasi untuk webapp1 bergantung pada webapp1 dan webapp2. Hal ini berisi pengaturan aplikasi dengan nilai dari webapp2.
  4. Konfigurasi untuk webapp2 bergantung pada webapp1 dan webapp2. Hal ini berisi pengaturan aplikasi dengan nilai dari webapp1.

Solusi 6: Memvalidasi sintaks untuk templat yang diekspor

Setelah menyebarkan sumber daya di Azure, Anda dapat mengekspor JSON templat ARM dan memodifikasinya untuk penyebaran lain. Anda harus memvalidasi templat yang diekspor untuk sintaks yang benar sebelum menggunakannya untuk menyebarkan sumber daya.

Anda dapat mengekspor templat dari portal, Azure CLI, atau Azure PowerShell. Ada rekomendasi apakah Anda mengekspor templat dari sumber daya atau grup sumber daya, atau dari riwayat penyebaran.

Setelah mengekspor templat ARM, Anda dapat mendekompilasi templat JSON ke Bicep. Kemudian gunakan praktik terbaik dan linter untuk memvalidasi kode Anda.

Untuk informasi selengkapnya, buka artikel berikut ini: