Share via


Lambda-függvények ARM-sablonokhoz

Ez a cikk az ARM-sablonokban használandó lambdafüggvényeket ismerteti. A Lambda függvények lényegében olyan kódblokkok, amelyek argumentumként átadhatók. Több paramétert is tartalmazhatnak, de egyetlen kódsorra korlátozódnak. A Bicep-ben a lambda kifejezés a következő formátumban van:

lambda(<lambda variable>, [<lambda variable>, ...], <expression>)

Tipp.

A Bicep használatát javasoljuk, mert ugyanazokkal a képességekkel rendelkezik, mint az ARM-sablonok, és a szintaxis használata egyszerűbb. További információkért tekintse meg az üzembehelyezési függvényeket.

Korlátozások

Az ARM-sablon lambda függvénye a következő korlátozásokkal rendelkezik:

  • A Lambda függvény csak közvetlenül adható meg függvényargumentumként ezekben a függvényekben: filter(), map(), reduce(), sort()és toObject().
  • A lambda változók (a lambda függvényekben használt ideiglenes változók) erőforrás- vagy modultömb-hozzáférésen belüli használata jelenleg nem támogatott.
  • A lambda változók függvényen belüli listKeys használata jelenleg nem támogatott.
  • A lambda változók referenciafüggvényen belüli használata jelenleg nem támogatott.

szűrő

filter(inputArray, lambda function)

Tömb szűrése egyéni szűrési függvénnyel.

A Bicepben használja a szűrőfüggvényt.

Paraméterek

Paraméter Szükséges Típus Leírás
inputArray Igen array A szűrni kívánt tömb.
lambda függvény Igen Kifejezés Az egyes bemeneti tömbelemekre alkalmazott lambda függvény. Ha hamis, az elem ki lesz szűrve a kimeneti tömbből.

Visszaadott érték

Egy tömb.

Példák

Az alábbi példák a függvény használatát filter mutatják be.

{
  "$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)))]"
    }
  }
}

Az előző példa kimenete az öt vagy annál idősebb kutyákat mutatja be:

Név Típus Érték
oldDogs Tömb [{"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))))]"
    }
  }
}

Az előző példa kimenete:

Név Típus Érték
filteredLoop Tömb [6, 7, 8, 9]
isEven Tömb [0, 2, 4, 6, 8]

a filterdLoop az 5-nél nagyobb tömbben lévő számokat jeleníti meg, az isEven pedig a tömb páros számát.

térkép

map(inputArray, lambda function)

Egyéni leképezési függvényt alkalmaz egy tömb minden elemére.

A Bicepben használja a térképfüggvényt .

Paraméterek

Paraméter Szükséges Típus Leírás
inputArray Igen array A megfeleltetendő tömb.
lambda függvény Igen Kifejezés Az egyes bemeneti tömbelemekre alkalmazott lambda függvény a kimeneti tömb létrehozásához.

Visszaadott érték

Egy tömb.

Példa

Az alábbi példa a függvény használatát map mutatja be.

{
  "$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))))]"
    }
  }
}

Az előző példa kimenete a következő:

Név Típus Érték
dogNames Tömb ["Evie","Casper","Indy","Kira"]
sayHi Tömb ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"]
mapObject Tömb [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!},{"i":1,"dog":"Casper","greeting":"Ahoy, Casper!"},{"i":2,"dog":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"dog":"Kira","greeting":"Ahoy, Kira!"}]

a dogNames az objektumok tömbjének kutyaneveit jeleníti meg; sayHi összefűzi a "Hello" és az egyes kutyanevek; és a mapObject létrehoz egy másik tömb objektumok.

Csökkenti

reduce(inputArray, initialValue, lambda function)

Egyéni csökkentési függvénnyel rendelkező tömbök csökkentése.

A Bicepben használja a csökkentési függvényt.

Paraméterek

Paraméter Szükséges Típus Leírás
inputArray Igen array A csökkenteni kívánt tömb.
initialValue Igen bármelyik Kezdeti érték.
lambda függvény Igen Kifejezés Az aktuális és a következő érték összesítéséhez használt lambda függvény.

Visszaadott érték

Bármelyiket.

Példa

Az alábbi példák a függvény használatát reduce mutatják be.

{
  "$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'))))]"
    }
  }
}

Az előző példa kimenete a következő:

Név Típus Érték
totalAge egész 18
totalAgeAdd1 egész 19

totalAge összegzi a kutyák életkorát; A totalAgeAdd1 kezdeti értéke 1, és hozzáadja az összes kutya életkorát a kezdeti értékekhez.

{
  "$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'))))]"
    }
  }
}

Az előző példa kimenete a következő:

Név Típus Érték
reduceObjectUnion object {"foo":123,"bar":456,"baz":789}

Az egyesítő függvény egyetlen objektumot ad vissza a paraméterek összes elemével együtt. A függvényhívás az objektumok kulcsértékpárjait egy új objektumba egyesíti.

Rendezés

sort(inputArray, lambda function)

Tömb rendezése egyéni rendezési függvénnyel.

A Bicepben használja a rendezési függvényt.

Paraméterek

Paraméter Szükséges Típus Leírás
inputArray Igen array A rendezendő tömb.
lambda függvény Igen Kifejezés A lambda függvény két tömbelem összehasonlítására szolgál a rendezéshez. Ha igaz, a második elem a kimeneti tömb első eleme után lesz rendezve.

Visszaadott érték

Egy tömb.

Példa

Az alábbi példa a függvény használatát sort mutatja be.

{
  "$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)))]"
    }
  }
}

Az előző példa kimenete a kutyaobjektumokat a legfiatalabbtól a legrégebbiig rendezi:

Név Típus Érték
dogsByAge Tömb [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]

toObject

toObject(inputArray, lambda function, [lambda function])

Átalakít egy tömböt egy egyéni kulcsfüggvényt és opcionális egyéni értékfüggvényt tartalmazó objektummá. Az objektumok tömbté alakításáról szóló elemek megtekintése.

A Bicepben használja a toObject függvényt .

Paraméterek

Paraméter Szükséges Típus Leírás
inputArray Igen array Az objektum létrehozásához használt tömb.
lambda függvény Igen Kifejezés A fő predikátum megadásához használt lambda függvény.
lambda függvény Nem Kifejezés Az érték predikátumának megadásához használt lambda függvény.

Visszaadott érték

Egy objektum.

Példa

Az alábbi példa bemutatja, hogyan használhatja a függvényt toObject a két szükséges paraméterrel:

{
  "$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))]"
    }
  }
}

Az előző példa egy tömbön alapuló objektumot hoz létre.

Név Típus Érték
dogsObject Objektum {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interests":["Other dogs"]},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":{"name":"Kira","age":8,"interests":["Rubs"]}}

A következő toObject függvény a harmadik paraméterrel ugyanazt a kimenetet biztosítja.

"outputs": {
  "dogsObject": {
    "type": "object",
    "value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
  }
}

Az alábbi példa bemutatja, hogyan használható a toObject függvény három paraméterrel.

{
  "$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))]"
    }
  }
}

Az előző példa egy tömbön alapuló objektumot hoz létre.

Név Típus Érték
dogsObject Objektum {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}}

Következő lépések