Şablon işlevlerini kullanarak Azure Resource Manager şablonunuza esneklik kazandırma
Bu senaryoda Azure Resource Manager (ARM) şablonunuzu farklı ortamlara dağıtma sürecini mümkün olduğunca kolaylaştırmak istiyorsunuz. Burada sorunla karşılaşabileceğiniz noktalardan biri, Azure depolama hesabı için benzersiz bir ad belirlemek.
Bu sorunu çözmek için ARM şablonu işlevlerini kullanarak bir ifade oluşturmaya karar verdiniz.
ARM şablonu işlevleri nedir?
ARM şablonu işlevleri, dağıtım sırasında gerekli değerleri dinamik olarak alır ve ARM şablonunuza esneklik kazandırır.
İşlevleri anlamak için öncelikle ifadeleri anlamanız gerekir. İfadeler, şablon dağıtıldığında değerlendirilen değerlerdir. Köşeli ayraçlarla başlayıp biter ve []
dize, tamsayı, Boole, dizi veya nesne döndürebilirler.
Bu öğrenme yolundaki önceki modülde, Resource Manager şablonunuzdaki ifadelerle zaten çalıştınız. Örneğin, şunları kullandınız:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
İfade, defaultValue:
özniteliğinin değeridir. Bu ifadenin resourceGroup()
ARM şablonu işlevini içerdiğine dikkat edin. Bu işlev, bu şablonun dağıtıldığı kaynak grubu hakkındaki bilgileri döndürür. .location
, bu işlev tarafından döndürülen nesneden bir özellik alır. İşlevler, ihtiyacınız olan değerleri dinamik olarak oluşturmanızı sağlar.
ARM şablonu işlevleriyle nasıl çalışılır?
İşlevlerle çalışırken izlenecek birkaç kural vardır:
Bir işleve dize değeri geçirdiğinizde tek tırnak işaretleri kullanın. Aşağıda bir örnek verilmiştir:
concat('storage',uniqueString(resourceGroup().id))
. işlevi ,concat
işlevine geçirdiğiniz dize ise şeklindedir'storage'
.Şablon işlevlerinde değişmez değerlerle çalışmak için kaçış karakteri kullanmanız gerekir. Kaçış karakteri, kullandığınız değere göre farklılık gösterir.
Bir özelliği null olarak ayarlamak için
null
veya[json('null')]
kullanabilirsiniz. JSON işlevi, parametre olarak null sağladığınızda boş bir nesne döndürür."stringValue": null, "objectValue": "[json('null')]"
Resource Manager, sizin için birkaç ARM şablonu işlevi sunar. İşlevler, türlerine göre gruplar halinde listelenir:
- Dizi işlevleri, dizilerle çalışmanızı sağlar. Örneğin,
first
velast
. - Karşılaştırma işlevleri, şablonlarınızda karşılaştırma yapmanızı sağlar. Örneğin,
equals
vegreater
. - Tarih işlevleri, tarihlerle çalışmanızı sağlar. Örneğin,
utcNow
vedateTimeAdd
. - Dağıtım değeri işlevleri, şablonun belirli bölümlerindeki değerleri ve dağıtımla ilgili değerleri almanızı sağlar. Örneğin,
environment
veparameters
. - Mantıksal işlevler, mantıksal koşullarla çalışmanızı sağlar. Örneğin,
if
venot
. - Sayısal işlevler, tamsayılarla çalışmanızı sağlar. Örneğin,
max
vemod
. - Nesne işlevleri, nesnelerle çalışmanızı sağlar. Örneğin,
contains
velength
. - Kaynak işlevleri, kaynak değerlerini almanızı sağlar. Örneğin,
resourceGroup
vesubscription
. - Dize işlevleri, dizelerle çalışmanızı sağlar. Örneğin,
length
vestartsWith
.
Bir ifadede birkaç işlev birden nasıl kullanılır?
Birkaç şablon işlevini birlikte kullanarak kendi ifadelerinizi oluşturabilirsiniz. Bu senaryoda bir ön ek girişi ile kaynak grubu kimliğinin karmasını birleştirerek her kaynak grubu için benzersiz ad oluşturan bir ifade oluşturmanız gerekir. Bu ifade, dev2hu6fktr577wh
ve staging5his8hgr67tt5
gibi depolama hesabı adlarıyla sonuçlanır. Bu dize değerini oluşturmak için dört işlev kullanabilirsiniz. Örneğin:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
Bu ifadeyi inceleyelim.
Concat ile başlayarak, bu işlev herhangi bir sayıda bağımsız değişken alır ve parametreler için dizeleri veya dizileri kabul edebilir. Burada "Storage"
değişmez değerini kullanıp bir diğer işlev olan uniqueString işlevinin sonucunu ekliyorsunuz. uniqueString
işlevi, parametrelere göre belirlenimci bir karma dize oluşturuyor. Bu ifadede, bir diğer işlev olan resourceGroup işlevini kullanarak geçerli kaynak grubu kimliğinin karmasını oluşturuyorsunuz.
Şu ana kadar ele aldığımız çıktı aşağıdadır:
Adlandırma kurallarına uymak için bu dizenin tamamının küçük harften oluşması gerekir. Burada dış işlev olarak toLower işlevini ekliyorsunuz.
Sonuçta elde ettiğiniz dize şöyle oluyor: