Geçersiz şablon hatalarını giderme

Bu makalede, Bıcep dosyaları ve Azure Resource Manager şablonları (ARM şablonları) için geçersiz şablon hatalarının nasıl giderileceği açıklanmaktadır.

Belirti

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

Code=InvalidTemplate
Message=<varies>

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

Nedeni

Bu hata, çeşitli farklı hata türlerinin oluşmasına neden olabilir. Genellikle şablonda bir sözdizimi veya yapısal hata içerir.

Çözüm 1-söz dizimi hatası

Şablonun doğrulanmadığını belirten bir hata iletisi alırsanız, şablonunuzda bir sözdizimi sorununuz olabilir.

Code=InvalidTemplate
Message=Deployment template validation failed

Şablon ifadelerinde birçok öğe olduğu için sözdizimi hataları oluşabilir. Örneğin, bir depolama hesabı için ad ataması, tek veya çift tırnak, küme ayracı, köşeli parantezler ve parantez çiftleri 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özdizimini gözden geçirin. şablon hatalarını belirlemek için en son bicep uzantısı veya Azure Resource Manager araçları uzantısıyla Visual Studio Code kullanabilirsiniz.

Çözüm 2-yanlış kesim 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ığı için hataları çözümleme.

Çözüm 3-parametre geçerli değil

Bir şablonda bir parametre için izin verilen değerler belirtebilirsiniz. Dağıtım sırasında, izin verilen bir 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ğerleri için şablonu kontrol edin ve dağıtım sırasında izin verilen bir değeri kullanın. Daha fazla bilgi için bkz. Bıcep 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 grubu ile sınırlı olduğunuzdan bu hatayı daha önceki dağıtımlarda görebilirsiniz. Mayıs 2020 ' de, bu sınır 800 kaynak gruplarına artmıştı. Daha fazla bilgi için bkz. bicep veya ARM şablonlarıiçin birden çok kaynak grubuna dağıtım.

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

Kaynakların, dağıtımın başlamasını engelleyecek şekilde birbirlerine bağlı olması durumunda bu hatayı alırsınız. Her iki veya daha fazla kaynak de bekleyen diğer kaynaklar için bir arada bir bağımlılık sağlar. Örneğin, Resource1 Resource3 'e bağlıdır, Resource2 Resource1 'e bağlıdır ve Resource3 Resource2 bağımlıdır. Bu sorunu, genellikle gereksiz bağımlılıkları kaldırarak çözebilirsiniz.

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

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

  1. Şablonunuzda, döngüsel bağımlılığa göre tanımlanan kaynağı bulun.
  2. Bu kaynak için, dependsOn özelliği ve reference işlevin hangi kaynaklara bağlı olduğunu görmek için tüm kullanımlarını inceleyin.
  3. Bağımlı oldukları kaynakları görmek için bu kaynakları inceleyin. Özgün kaynağa bağlı bir kaynak fark edinceye kadar bağımlılıkları izleyin.
  4. Döngüsel bağımlılığa dahil olan kaynaklar için, dependsOn gerekli olmayan bağımlılıkları belirlemek üzere özelliğinin tüm kullanımlarını dikkatle inceleyin. Bu bağımlılıkları kaldırın. Bağımlılığın gerekli olduğundan emin değilseniz kaldırmayı deneyin.
  5. Şablonu yeniden dağıtın.

Verileri özelliğinden kaldırmak, dependsOn şablonu dağıtırken hatalara neden olabilir. Bir hata alırsanız, bağımlılığı şablona geri ekleyin.

Bu yaklaşım dairesel bağımlılığı çözmezse, dağıtım mantığınızın bir kısmı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ığa dahil edilen kaynaklardan sonra dağıtılacak şekilde yapılandırın. Örneğin, iki sanal makine dağıttığını, ancak birbirlerine başvuran her bir üzerinde Özellikler ayarlamanız gerektiğini varsayalım. Bunları aşağıdaki sırayla dağıtabilirsiniz:

  1. vm1
  2. VM2
  3. VM1 üzerindeki uzantı VM1 ve VM2 'ye bağımlıdır. Uzantı, VM1 'teki VM2 'dan aldığı değerleri ayarlar.
  4. VM2 üzerindeki uzantı VM1 ve VM2 'ye bağımlıdır. Uzantı, VM2 'teki VM1 'dan aldığı değerleri ayarlar.

Aynı yaklaşım App Service uygulamalar için de geçerlidir. Yapılandırma değerlerini uygulama kaynağının alt bir kaynağına taşımayı düşünün. İki Web uygulaması aşağıdaki sırayla dağıtılabilir:

  1. webapp1
  2. webapp2
  3. WebApp1 yapılandırması WebApp1 ve webapp2 'ye bağımlıdır. Webapp2 ' deki değerler ile uygulama ayarlarını içerir.
  4. Webapp2 yapılandırması WebApp1 ve webapp2 'ye bağımlıdır. WebApp1 ' deki değerler ile uygulama ayarlarını içerir.