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.
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 resource1
ve 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:
- Şablonunuzda döngüsel bağımlılıkta tanımlanan kaynağı bulun.
- Bu kaynak için, hangi kaynaklara
dependsOn
bağımlı olduğunu görmek için özelliğini ve veyaresourceId
işlevlerinin kullanımlarınıreference
inceleyin. - 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.
- 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. - Ş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:
- vm1
- vm2
- vm1'de uzantı, vm1 ve vm2'ye bağlıdır. Uzantı, vm2'den aldığı vm1 üzerindeki değerleri ayarlar.
- 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:
- webapp1
- webapp2
- webapp1 yapılandırması webapp1 ve webapp2'ye bağlıdır. Webapp2 değerlerini içeren uygulama ayarlarını içerir.
- 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: