Bagikan melalui


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 yang 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 diakibatkan oleh beberapa jenis kesalahan yang berbeda. Mereka biasanya melibatkan sintaksis atau kesalahan struktural dalam templat.

Solusi 1: Kesalahan sintaks

Jika Anda menerima pesan kesalahan yang menunjukkan validasi templat gagal, Anda mungkin memiliki masalah sintaks dalam templat Anda.

Code=InvalidTemplate
Message=Deployment template validation failed

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

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

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

Solusi 2: Panjang segmen yang salah

Kesalahan templat lain yang tidak valid terjadi ketika nama sumber daya tidak dalam format yang benar. Untuk mengatasi kesalahan tersebut, lihat Mengatasi kesalahan terkait nama dan jenis yang tidak cocok.

Solusi 3: Parameter tidak valid

Anda dapat menentukan nilai parameter yang diizinkan dalam templat. Selama penyebaran, jika Anda memberikan nilai yang bukan nilai yang diizinkan, Anda menerima pesan yang mirip 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 templat Bicep atau ARM.

Solusi 4: Terlalu banyak grup sumber daya target

Anda mungkin melihat kesalahan ini dalam penyebaran sebelumnya karena Anda dibatasi hingga 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 melingkar terdeteksi

Anda mendapatkan kesalahan ini ketika sumber daya saling bergantung dengan cara yang menghalangi dimulainya 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. Anda biasanya dapat menyelesaikan masalah ini dengan menghapus dependensi yang tidak perlu.

Bicep membuat dependensi implisit ketika satu sumber daya menggunakan nama simbolis sumber daya lain. Dependensi eksplisit yang menggunakan dependsOn biasanya tidak diperlukan. Untuk informasi lebih lanjut, lihat ketergantungan Bicep.

Untuk menyelesaikan masalah dependensi melingkar:

  1. Di templat Anda, temukan sumber daya yang diidentifikasi dalam dependensi melingkar.
  2. Untuk sumber daya tersebut, periksa properti dependsOn dan penggunaan fungsi reference atau resourceId untuk melihat sumber daya mana yang bergantung padanya.
  3. Periksa sumber daya tersebut untuk melihat sumber daya mana yang mereka andalkan. Ikuti dependensi hingga Anda melihat sumber daya yang bergantung pada sumber daya asli.
  4. Untuk sumber daya yang terlibat dalam dependensi melingkar, periksa dengan cermat semua penggunaan dependsOn properti untuk mengidentifikasi dependensi apa pun yang tidak diperlukan. Untuk mengatasi masalah penyebaran perangkat lunak, 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 dependsOn properti dapat menyebabkan kesalahan saat Anda menyebarkan templat. Jika Anda mendapatkan kesalahan, tambahkan dependensi kembali ke templat. Jika Anda menggunakan komentar untuk melewati kode di templat, Anda dapat menghapus komentar untuk memulihkan kode.

Jika pendekatan tersebut tidak menyelesaikan dependensi melingkar, pertimbangkan untuk memindahkan bagian dari logika penyebaran Anda ke sumber daya anak (seperti ekstensi atau pengaturan konfigurasi). Konfigurasikan sumber daya anak tersebut agar dapat diterapkan setelah sumber daya yang terlibat dalam dependensi siklus. Misalnya, Anda menyebarkan dua komputer virtual tetapi Anda harus mengatur properti pada masing-masing komputer virtual yang merujuk ke komputer virtual 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 sumber daya turunan dari sumber daya aplikasi. Anda dapat menyebarkan dua aplikasi web dalam urutan berikut:

  1. aplikasi web1
  2. aplikasi web2
  3. Konfigurasi untuk webapp1 bergantung pada webapp1 dan webapp2. Ini berisi pengaturan aplikasi dengan nilai dari webapp2.
  4. Konfigurasi untuk webapp2 bergantung pada webapp1 dan webapp2. 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 Anda 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 lebih lanjut, buka artikel berikut: