ARM şablonları için Lambda işlevleri
Bu makalede ARM şablonlarında kullanılacak lambda işlevleri açıklanmaktadır. Lambda işlevleri temelde bağımsız değişken olarak geçirilebilen kod bloklarıdır. Birden çok parametre alabilirler, ancak tek bir kod satırıyla sınırlandırılırlar. Bicep'te lambda ifadesi şu biçimdedir:
lambda(<lambda variable>, [<lambda variable>, ...], <expression>)
İpucu
ARM şablonlarıyla aynı özellikleri sunduğundan ve söz diziminin kullanımı daha kolay olduğundan Bicep'i öneririz. Daha fazla bilgi edinmek için bkz . dağıtım işlevleri.
Sınırlamalar
ARM şablonu lambda işlevi şu sınırlamalara sahiptir:
- Lambda işlevi yalnızca şu işlevlerde işlev bağımsız değişkenleri olarak doğrudan belirtilebilir:
filter()
,map()
,reduce()
,sort()
vetoObject()
. - Kaynak veya modül dizisi erişimi içinde lambda değişkenlerini (lambda işlevlerinde kullanılan geçici değişkenler) kullanma şu anda desteklenmemektedir.
- İşlevin içinde
listKeys
lambda değişkenlerinin kullanılması şu anda desteklenmemektedir. - Başvuru işlevinin içinde lambda değişkenlerinin kullanılması şu anda desteklenmemektedir.
filtrele
filter(inputArray, lambda function)
Bir diziyi özel filtreleme işleviyle filtreler.
Bicep'te filtre işlevini kullanın.
Parametreler
Parametre | Zorunlu | Türü | Açıklama |
---|---|---|---|
inputArray | Yes | dizi | Filtre uygulamak için dizi. |
lambda işlevi | Yes | ifade | Her giriş dizisi öğesine uygulanan lambda işlevi. False ise, öğe çıkış dizisinin dışına filtrelenmiş olur. |
Dönüş değeri
Bir dizi.
Örnekler
Aşağıdaki örneklerde işlevin nasıl kullanılacağı gösterilmektedir filter
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"oldDogs": {
"type": "array",
"value": "[filter(variables('dogs'), lambda('dog', greaterOrEquals(lambdaVariables('dog').age, 5)))]"
}
}
}
Yukarıdaki örnekten alınan çıkışta beş veya daha büyük olan köpekler gösterilir:
Adı | Tür | Değer |
---|---|---|
oldDogs | Dizi | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"copy": [
{
"name": "itemForLoop",
"count": "[length(range(0, 10))]",
"input": "[range(0, 10)[copyIndex('itemForLoop')]]"
}
]
},
"resources": [],
"outputs": {
"filteredLoop": {
"type": "array",
"value": "[filter(variables('itemForLoop'), lambda('i', greater(lambdaVariables('i'), 5)))]"
},
"isEven": {
"type": "array",
"value": "[filter(range(0, 10), lambda('i', equals(0, mod(lambdaVariables('i'), 2))))]"
}
}
}
Yukarıdaki örnekten çıktı:
Adı | Tür | Değer |
---|---|---|
filteredLoop | Dizi | [6, 7, 8, 9] |
isEven | Dizi | [0, 2, 4, 6, 8] |
filterdLoop, 5'ten büyük bir dizideki sayıları, isEven ise dizideki çift sayıları gösterir.
map
map(inputArray, lambda function)
Bir dizinin her öğesine özel eşleme işlevi uygular.
Bicep'te map işlevini kullanın.
Parametreler
Parametre | Zorunlu | Türü | Açıklama |
---|---|---|---|
inputArray | Yes | dizi | Eşlenecek dizi. |
lambda işlevi | Yes | ifade | Çıkış dizisini oluşturmak için her giriş dizisi öğesine uygulanan lambda işlevi. |
Dönüş değeri
Bir dizi.
Örnek
Aşağıdaki örnekte işlevin nasıl kullanılacağı gösterilmektedir map
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"dogNames": {
"type": "array",
"value": "[map(variables('dogs'), lambda('dog', lambdaVariables('dog').name))]"
},
"sayHi": {
"type": "array",
"value": "[map(variables('dogs'), lambda('dog', format('Hello {0}!', lambdaVariables('dog').name)))]"
},
"mapObject": {
"type": "array",
"value": "[map(range(0, length(variables('dogs'))), lambda('i', createObject('i', lambdaVariables('i'), 'dog', variables('dogs')[lambdaVariables('i')].name, 'greeting', format('Ahoy, {0}!', variables('dogs')[lambdaVariables('i')].name))))]"
}
}
}
Yukarıdaki örnekten alınan çıkış:
Adı | Tür | Değer |
---|---|---|
dogNames | Dizi | ["Evie","Casper","Indy","Kira"] |
sayHi | Dizi | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapObject | Dizi | [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!"},{"i":1,"köpek":"Casper","greeting":"Ahoy, Casper!"},{"i":2,"köpek":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"köpek":"Kira","greeting":"Ahoy, Kira!"}] |
dogNames , nesne dizisinden köpek adlarını gösterir; sayHi , "Hello" ve köpek adlarının her birini birleştirir ve mapObject başka bir nesne dizisi oluşturur.
Azaltmak
reduce(inputArray, initialValue, lambda function)
Bir diziyi özel bir azaltma işleviyle azaltır.
Bicep'te reduce işlevini kullanın.
Parametreler
Parametre | Zorunlu | Türü | Açıklama |
---|---|---|---|
inputArray | Yes | dizi | Azaltacak dizi. |
ınitialvalue | Yes | herhangi bir | İlk değer. |
lambda işlevi | Yes | ifade | Geçerli değeri ve sonraki değeri toplamak için kullanılan lambda işlevi. |
Dönüş değeri
Herhangi biri.
Örnek
Aşağıdaki örneklerde işlevin nasıl kullanılacağı gösterilmektedir reduce
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
],
"ages": "[map(variables('dogs'), lambda('dog', lambdaVariables('dog').age))]"
},
"resources": [],
"outputs": {
"totalAge": {
"type": "int",
"value": "[reduce(variables('ages'), 0, lambda('cur', 'next', add(lambdaVariables('cur'), lambdaVariables('next'))))]"
},
"totalAgeAdd1": {
"type": "int",
"value": "[reduce(variables('ages'), 1, lambda('cur', 'next', add(lambdaVariables('cur'), lambdaVariables('next'))))]"
}
}
}
Yukarıdaki örnekten alınan çıkış:
Adı | Tür | Değer |
---|---|---|
totalAge | int | 18 |
totalAgeAdd1 | int | 19 |
totalAge , köpeklerin yaşlarını özetler; totalAgeAdd1'in başlangıç değeri 1'tir ve tüm köpek yaşlarını ilk değerlere ekler.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"reduceObjectUnion": {
"type": "object",
"value": "[reduce(createArray(createObject('foo', 123), createObject('bar', 456), createObject('baz', 789)), createObject(), lambda('cur', 'next', union(lambdaVariables('cur'), lambdaVariables('next'))))]"
}
}
}
Yukarıdaki örnekten alınan çıkış:
Adı | Tür | Değer |
---|---|---|
reduceObjectUnion | nesne | {"foo":123,"bar":456,"baz":789} |
union işlevi, parametrelerdeki tüm öğeleri içeren tek bir nesne döndürür. İşlev çağrısı, nesnelerin anahtar değer çiftlerini yeni bir nesne olarak birleştirir.
sıralayın
sort(inputArray, lambda function)
Bir diziyi özel sıralama işleviyle sıralar.
Bicep'te sıralama işlevini kullanın.
Parametreler
Parametre | Zorunlu | Türü | Açıklama |
---|---|---|---|
inputArray | Yes | dizi | Sıralanacak dizi. |
lambda işlevi | Yes | ifade | Sıralama için iki dizi öğesini karşılaştırmak için kullanılan lambda işlevi. True ise, ikinci öğe çıkış dizisindeki ilk öğeden sonra sıralanır. |
Dönüş değeri
Bir dizi.
Örnek
Aşağıdaki örnekte işlevin nasıl kullanılacağı gösterilmektedir sort
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"dogsByAge": {
"type": "array",
"value": "[sort(variables('dogs'), lambda('a', 'b', less(lambdaVariables('a').age, lambdaVariables('b').age)))]"
}
}
}
Önceki örnekten elde edilen çıkış, köpek nesnelerini en gençten en eskiye sıralar:
Adı | Tür | Değer |
---|---|---|
dogsByAge | Dizi | [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Diğer köpekler"]},{"ad ":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
Toobject
toObject(inputArray, lambda function, [lambda function])
Bir diziyi, özel anahtar işlevi ve isteğe bağlı özel değer işlevi olan bir nesneye dönüştürür. Bir nesneyi diziye dönüştürme hakkındaki öğelere bakın.
Bicep'te toObject işlevini kullanın.
Parametreler
Parametre | Zorunlu | Türü | Açıklama |
---|---|---|---|
inputArray | Yes | dizi | Nesne oluşturmak için kullanılan dizi. |
lambda işlevi | Yes | ifade | Anahtar koşulunu sağlamak için kullanılan lambda işlevi. |
lambda işlevi | Hayır | ifade | Değer koşulunu sağlamak için kullanılan lambda işlevi. |
Dönüş değeri
Bir nesnesi.
Örnek
Aşağıdaki örnekte işlevin toObject
gerekli iki parametreyle nasıl kullanılacağı gösterilmektedir:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name))]"
}
}
}
Yukarıdaki örnek, bir diziyi temel alan bir nesne oluşturur.
Adı | Tür | Değer |
---|---|---|
dogsObject | Object | {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interests":["Diğer köpekler"]},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":{"name":"Kira","age":8,"interests":["Rubs"]}} |
Üçüncü parametreye sahip aşağıdaki toObject
işlev aynı çıkışı sağlar.
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
}
}
Aşağıdaki örnekte işlevin toObject
üç parametreyle nasıl kullanılacağı gösterilmektedir.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"properties": {
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
}
},
{
"name": "Casper",
"properties": {
"age": 3,
"interests": [
"Other dogs"
]
}
},
{
"name": "Indy",
"properties": {
"age": 2,
"interests": [
"Butter"
]
}
},
{
"name": "Kira",
"properties": {
"age": 8,
"interests": [
"Rubs"
]
}
}
]
},
"resources": [],
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry').properties))]"
}
}
}
Yukarıdaki örnek, bir diziyi temel alan bir nesne oluşturur.
Adı | Tür | Değer |
---|---|---|
dogsObject | Object | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Diğer köpekler"]},"Indy":{"age":2,"interests":["Butter"},"Kira":{"age":8,"interests":["Rubs"]}} |
Sonraki adımlar
- Diziyle ilgili daha fazla şablon işlevi için bkz . Şablon işlevleri - diziler .