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 ifadesi yalnızca şu işlevlerde işlev bağımsız değişkenleri olarak doğrudan belirtilebilir: filter(), groupBy(), map(), mapValues(), reduce()sort()ve toObject().
  • 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)))]"
    },
    "dogNameIndex": {
      "type": "array",
      "value": "[filter(variables('dogs'), lambda('val', 'i', and(less(lambdaVariables('i'), 2), equals(substring(lambdaVariables('val').name, 0, 1), 'C'))))]"
    }
  }
}

Önceki örnekten alınan çıkışlar:

Adı Tür Değer
oldDogs Dizi [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]
dogNameIndex Dizi [{"name":"Casper","age":3,"interests":["Diğer köpekler"]}]

oldDogs beş veya daha büyük köpekleri listeler; dogNameIndex , dizin numarası ikiden küçük olan ve adı "C" harfiyle başlayan köpekleri tanımlar.

{
  "$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.

Groupby

groupBy(inputArray, lambda expression)

Gruplandırma koşulu kullanarak bir diziden dizi değerlerine sahip bir nesne oluşturur.

Bicep'te groupBy işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
inputArray Yes dizi Gruplandırma dizisi.
lambda ifadesi Yes ifade Lambda ifadesi her giriş dizisi öğesine uygulanır ve gruplandırma koşulu kullanılarak öğeleri gruplandırılır.

Dönüş değeri

Bir nesnesi.

Örnekler

Aşağıdaki örnekte işlevin nasıl kullanılacağı gösterilmektedir groupBy .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "inputArray": [
      "foo",
      "bar",
      "baz"
    ]
  },
  "resources": [],
  "outputs": {
    "outObject": {
      "type": "object",
      "value": "[groupBy(variables('inputArray'), lambda('x', substring(lambdaVariables('x'), 0, 1)))]"
    }
  }
}

Yukarıdaki örnekten alınan çıkışta beş veya daha büyük olan köpekler gösterilir:

Adı Tür Değer
outObject Object {"f":["foo"],"b":["bar","baz"]}

outObject , dizi öğelerini ilk harflerine göre gruplandıran bir nesne 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)))]"
    },
    "mapArray": {
      "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))))]"
    },
    "mapArrayIndex": {
      "type": "array",
      "value": "[map(variables('dogs'), lambda('x', 'i', createObject('index', lambdaVariables('i'), 'val', lambdaVariables('x').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!"]
mapArray 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!"}]
mapArrayIndex Dizi [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}]

dogNames , nesne dizisinden köpek adlarını gösterir; sayHi , "Merhaba" ve köpek adlarının her birini birleştirir; mapArray ve mapArrayIndex başka iki nesne dizisi oluşturur.

mapValues

mapValues(inputObject, lambda expression)

Değerleri eşlemek için lambda ifadesi kullanarak giriş nesnesinden bir nesne oluşturur.

Bicep'te mapValues işlevini kullanın.

Parametreler

Parametre Zorunlu Türü Açıklama
inputObject Yes nesne Eşlenecek nesne.
lambda ifadesi Yes ifade Değerleri eşlemek için kullanılan lambda ifadesi.

Dönüş değeri

Bir nesnesi.

Örnek

Aşağıdaki örnekte işlevin nasıl kullanılacağı gösterilmektedir mapValues .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "inputObject": {
      "foo": "foo",
      "bar": "bar"
    }
  },
  "resources": [],
  "outputs": {
    "mapObject": {
      "type": "object",
      "value": "[mapValues(variables('inputObject'), lambda('val', toUpper(lambdaVariables('val'))))]"
    }
  }
}

Yukarıdaki örnekten alınan çıkış:

Adı Tür Değer
mapObject Object {foo: 'FOO', çubuk: 'BAR'}

mapObject , büyük harf değerleriyle başka bir nesne 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'))))]"
    },
    "oddAge": {
      "type": "int",
      "value": "[reduce(variables('ages'), 0, lambda('cur', 'next', 'i', if(equals(mod(lambdaVariables('i'), 2), 0), add(lambdaVariables('cur'), lambdaVariables('next')), lambdaVariables('cur'))))]"
    }
  }
}

Yukarıdaki örnekten alınan çıkış:

Adı Tür Değer
totalAge int 18
totalAgeAdd1 int 19
oddAge int 7

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. oddAge , özellikle 5 (Evie) ve 2 (Indy) gibi dizinlerde bulunan köpeklerin yaşlarını özetler.

{
  "$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