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ısını belirten bir hata iletisi alırsanız, şablonunuzda bir 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, küme ayracı, köşeli ayraç ve parantez çiftlerini 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ı belirlemek 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 değeri 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, önceki dağıtımlarda bu hatayı 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ğlıyken dağıtımın başlatılması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ı beklemesini sağlar. Örneğin, resource1 öğesine bağlıdır resource2resource3, öğesine ve resource1resource3 öğesine bağlıdırresource2. 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ğımlı 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ğinin dependsOn tüm kullanımlarını dikkatle inceleyin. Dağıtımın sorunlarını gidermek için döngüsel bağımlılıkları kaldırın. Kodu silmek yerine açıklamaları kullanarak kodun bir sonraki dağıtım sırasında çalışmaması gerekir. 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 değerlerin dependsOn 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ı, vm1 üzerinde vm2'den aldığı 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ğerlerine sahip uygulama ayarlarını içerir.