Geçersiz şablon hatalarını giderme

Bu makalede, Bicep dosyaları ve Azure Resource Manager şablonları (ARM şablonları) için geçersiz şablon hatalarının nasıl çözüleceğini açıklar. Hata söz dizimi hatası, geçersiz parametre değeri veya döngüsel bağımlılık gibi çeşitli nedenlerle oluşur.

Belirti

Bir şablon dağıtıldığında şunları belirten bir hata alırsınız:

Code=InvalidTemplate
Message=<varies>

Hata iletisi hatanın türüne bağlıdır.

Nedeni

Bu hata birkaç farklı hata türünden kaynaklanabilir. Bunlar genellikle şablonda söz dizimi veya yapısal hata içerir.

Çözüm 1: Söz dizimi hatası

Şablonun doğrulanamadıdığını belirten bir hata iletisi alırsanız, şablonunuzda söz dizimi sorunu olabilir.

Code=InvalidTemplate
Message=Deployment template validation failed

Şablon ifadelerinde birçok öğe olduğundan söz dizimi hataları oluşabilir. Örneğin, bir depolama hesabının ad ataması tek veya çift tırnak çiftleri, küme ayraçları, köşeli ayraçlar ve parantezler içerir. İfadeler ayrıca dolar işaretleri, virgüller ve noktalar gibi işlevler ve karakterler içerir.

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

Bu tür bir hata aldığınızda ifadenin söz dizimini gözden geçirin. Şablon hatalarını tanımlamak için en son Bicep uzantısına veya Azure Resource Manager Araçları uzantısına sahip Visual Studio Code kullanabilirsiniz.

Çözüm 2: Yanlış segment uzunlukları

Kaynak adı doğru biçimde olmadığında başka bir geçersiz şablon hatası oluşur. Bu hatayı çözmek için bkz . Ad ve tür uyuşmazlığı hatalarını çözme.

Çözüm 3: Parametre geçerli değil

Şablonda parametrenin izin verilen değerlerini belirtebilirsiniz. Dağıtım sırasında, izin verilen değer olmayan bir değer sağlarsanız aşağıdaki hataya benzer bir ileti alırsınız:

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

Parametrenin izin verilen değerlerinin şablonunu denetleyin ve dağıtım sırasında izin verilen bir değer kullanın. Daha fazla bilgi için bkz. Bicep veya ARM şablonları için izin verilen değerler.

Çözüm 4: Çok fazla hedef kaynak grubu

Tek bir dağıtımda beş hedef kaynak grubuyla sınırlı olduğunuzdan bu hatayı önceki dağıtımlarda görebilirsiniz. Mayıs 2020'de bu sınır 800 kaynak grubuna yükseltildi. Daha fazla bilgi için bkz. Bicep veya ARM şablonları için birden çok kaynak grubuna dağıtma.

Çözüm 5: Döngüsel bağımlılık algılandı

Kaynaklar birbirine bağımlı olduğunda dağıtımın başlamasını engelleyecek şekilde bu hatayı alırsınız. Bağımlılıkların birleşimi, iki veya daha fazla kaynağın bekleyen diğer kaynakları beklemesine neden olur. Örneğin, resource1 öğesine bağlıdır resource3, resource2 öğesine bağlıdır resource1ve resource3 öğesine bağlıdır resource2. Bu sorunu genellikle gereksiz bağımlılıkları kaldırarak çözebilirsiniz.

Bicep, bir kaynak başka bir kaynağın sembolik adını kullandığında örtük bir bağımlılık oluşturur. kullanan dependsOn açık bir bağımlılık genellikle gerekli değildir. Daha fazla bilgi için bkz. Bicep bağımlılıkları.

Döngüsel bağımlılığı çözmek için:

  1. Şablonunuzda döngüsel bağımlılıkta tanımlanan kaynağı bulun.
  2. Bu kaynak için, hangi kaynaklara dependsOn bağımlı olduğunu görmek için özelliğini ve veya resourceId işlevlerinin kullanımlarını reference inceleyin.
  3. Hangi kaynaklara bağımlı olduklarını görmek için bu kaynakları inceleyin. Özgün kaynağa bağlı bir kaynak fark edene kadar bağımlılıkları izleyin.
  4. Döngüsel bağımlılıkta yer alan kaynaklar için, gerekli olmayan bağımlılıkları belirlemek için özelliğin tüm kullanımlarını dependsOn dikkatle inceleyin. Dağıtım sorunlarını gidermek için döngüsel bağımlılıkları kaldırın. Kodu silmek yerine, sonraki dağıtım sırasında kodun çalışmaması için açıklamaları kullanabilirsiniz. ARM şablonlarında veya Bicep dosyalarında tek satırlı açıklamaları (//) veya çok satırlı açıklamaları (/* ... */) kullanabilirsiniz.
  5. Şablonu yeniden dağıtın.

Özelliğinden dependsOn değerlerin kaldırılması, şablonu dağıttığınızda hatalara neden olabilir. Hata alırsanız, bağımlılığı şablona yeniden ekleyin. Şablonunuzda kodu atlamak için açıklamalar kullandıysanız, kodu geri yüklemek için açıklamaları kaldırabilirsiniz.

Bu yaklaşım döngüsel bağımlılığı çözmezse dağıtım mantığınızın bir bölümünü alt kaynaklara (uzantılar veya yapılandırma ayarları gibi) taşımayı göz önünde bulundurun. Bu alt kaynakları döngüsel bağımlılıkta yer alan kaynaklardan sonra dağıtılacak şekilde yapılandırın. Örneğin, iki sanal makine dağıttığınızı ancak her birinde diğerine başvuran özellikleri ayarlamanız gerektiğini varsayalım. Bunları aşağıdaki sırayla dağıtabilirsiniz:

  1. vm1
  2. vm2
  3. vm1'de uzantı, vm1 ve vm2'ye bağlıdır. Uzantı, vm2'den aldığı vm1 üzerindeki değerleri ayarlar.
  4. vm2'de uzantı, vm1 ve vm2'ye bağlıdır. Uzantı, vm1'den aldığı vm2 değerlerini ayarlar.

Aynı yaklaşım App Service uygulamalarda da çalışır. Yapılandırma değerlerini uygulama kaynağının alt kaynağına taşımayı göz önünde bulundurun. aşağıdaki sırayla iki web uygulaması dağıtabilirsiniz:

  1. webapp1
  2. webapp2
  3. webapp1 yapılandırması webapp1 ve webapp2'ye bağlıdır. Webapp2 değerlerini içeren uygulama ayarlarını içerir.
  4. webapp2 yapılandırması webapp1 ve webapp2'ye bağlıdır. Webapp1 değerlerini içeren uygulama ayarlarını içerir.

Çözüm 6: Dışarı aktarılan şablonlar için söz dizimlerini doğrulama

Azure'da kaynakları dağıttığınızda ARM şablonu JSON'unu dışarı aktarabilir ve diğer dağıtımlar için değiştirebilirsiniz. Kaynakları dağıtmak için kullanmadan önce , dışarı aktarılan şablonu doğru söz dizimi için doğrulamanız gerekir.

Şablonu portaldan, Azure CLI'dan veya Azure PowerShell dışarı aktarabilirsiniz. Şablonu kaynaktan veya kaynak grubundan veya dağıtım geçmişinden dışarı aktardığınıza ilişkin öneriler vardır.

ARM şablonunu dışarı aktardıktan sonra JSON şablonunu Bicep'e kaynak koddan çıkarabilirsiniz. Ardından kodunuzu doğrulamak için en iyi yöntemleri ve lint aracını kullanın.

Daha fazla bilgi için aşağıdaki makalelere gidin: