Tulajdonságátalakító és -gyűjtő implementálása Azure Resource Manager-sablonban
Az Objektumok használata paraméterként egy Azure-Resource Manager-sablon másolási ciklusában című cikkből megtudhatja, hogyan tárolhat erőforrástulajdonság-értékeket egy objektumban, és hogyan alkalmazhatja őket egy erőforrásra az üzembe helyezés során. Ez egy nagyon hasznos módszer a paraméterek kezelésére, de ehhez az objektum tulajdonságait erőforrás-tulajdonságokra kell leképeznie minden alkalommal, amikor az objektumot használja a sablonban.
Ennek megkerüléséhez implementálhat egy tulajdonságátalakítási és gyűjtősablont, amely iterálja az objektumtömböt, és átalakítja azt az erőforrás JSON-sémájába.
Fontos
Ehhez a megközelítéshez ismernie kell Resource Manager sablonokat és függvényeket.
Tekintsünk meg egy példát, amely egy tulajdonsággyűjtőt és transzformátort implementál egy hálózati biztonsági csoport üzembe helyezéséhez. Az alábbi ábra bemutatja, hogyan kapcsolódnak a sablonjaink a sablonokban található erőforrásokhoz:
A hívássablon két erőforrást tartalmaz:
- Egy sablonhivatkozás, amely meghívja a gyűjtősablont
- Az üzembe helyezendő hálózati biztonsági csoport erőforrása
Gyűjtősablonunk két erőforrást tartalmaz:
- Horgonyerőforrás
- Egy sablonhivatkozás, amely egy másolási hurokban hívja meg az átalakító sablont
Az átalakítási sablon egyetlen erőforrást tartalmaz: egy üres sablont egy változóval, amely átalakítja source
a JSON-t a fő sablonban található hálózati biztonsági csoport erőforrása által várt JSON-sémává.
Paraméterobjektum
A paraméterobjektumot securityRules
az Objektumok használata paraméterként egy Másolási hurokban egy Azure Resource Manager-sablonban című cikkből használjuk. Az átalakítási sablon a securityRules
tömb minden objektumát átalakítja a hívósablonban található hálózati biztonsági csoport erőforrása által várt JSON-sémává.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"networkSecurityGroupsSettings": {
"value": {
"securityRules": [
{
"name": "RDPAllow",
"description": "allow RDP connections",
"direction": "Inbound",
"priority": 100,
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "10.0.0.0/24",
"sourcePortRange": "*",
"destinationPortRange": "3389",
"access": "Allow",
"protocol": "Tcp"
},
{
"name": "HTTPAllow",
"description": "allow HTTP connections",
"direction": "Inbound",
"priority": 200,
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "10.0.1.0/24",
"sourcePortRange": "*",
"destinationPortRange": "80",
"access": "Allow",
"protocol": "Tcp"
}
]
}
}
}
}
Először nézzük meg az átalakító sablont .
Sablon átalakítása
Az átalakítási sablon két paramétert tartalmaz, amelyeket a gyűjtősablontól ad át:
source
egy olyan objektum, amely a tulajdonságtömb egyik tulajdonságérték-objektumát fogadja. A példánkban asecurityRules
tömb minden objektumát egyenként továbbítja a rendszer.state
egy tömb, amely az összes korábbi átalakítás összefűzött eredményeit fogadja. Ez az átalakított JSON gyűjteménye.
A paraméterek a következőképpen néznek ki:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"source": {
"type": "object"
},
"state": {
"type": "array",
"defaultValue": []
}
},
A sablon egy nevű instance
változót is definiál, amely az objektumot source
a szükséges JSON-sémává alakítja:
"variables": {
"instance": [
{
"name": "[parameters('source').name]",
"properties": {
"description": "[parameters('source').description]",
"protocol": "[parameters('source').protocol]",
"sourcePortRange": "[parameters('source').sourcePortRange]",
"destinationPortRange": "[parameters('source').destinationPortRange]",
"sourceAddressPrefix": "[parameters('source').sourceAddressPrefix]",
"destinationAddressPrefix": "[parameters('source').destinationAddressPrefix]",
"access": "[parameters('source').access]",
"priority": "[parameters('source').priority]",
"direction": "[parameters('source').direction]"
}
}
]
}
Végül a output
sablon összefűzi a paraméter összegyűjtött átalakítóit state
a változó által instance
végrehajtott aktuális átalakítással:
"resources": [],
"outputs": {
"collection": {
"type": "array",
"value": "[concat(parameters('state'), variables('instance'))]"
}
}
Ezután vessünk egy pillantást a gyűjtősablonra , és nézzük meg, hogyan adja át a paraméterértékeket.
Gyűjtősablon
Gyűjtősablonunk három paramétert tartalmaz:
source
A a teljes paraméterobjektum-tömb. Ezt a hívósablon adja át. Ugyanaz a neve, mint azsource
átalakítási sablon paraméterének, de egyetlen fontos különbség van: bár ez a teljes tömb, egyszerre csak egy tömbelemet adunk át az átalakítási sablonnak.transformTemplateUri
az átalakítási sablon URI-ja. A sablon újrafelhasználhatóságának paramétereként definiáljuk.state
egy kezdetben üres tömb, amelyet átadunk az átalakító sablonnak. A másolási ciklus befejezése után tárolja az átalakított paraméterobjektumok gyűjteményét.
A paraméterek a következőképpen néznek ki:
"parameters": {
"source": {
"type": "array"
},
"transformTemplateUri": {
"type": "string"
},
"state": {
"type": "array",
"defaultValue": []
}
}
Ezután definiálunk egy nevű count
változót. Értéke a paraméterobjektum-tömb hossza source
:
"variables": {
"count": "[length(parameters('source'))]"
}
A másolási hurok iterációinak számához használjuk.
Most vessünk egy pillantást az erőforrásainkra. Két erőforrást határozunk meg:
loop-0
A a másolási hurok nulla alapú erőforrása.loop-
A a függvény eredményévelcopyIndex(1)
összefűzve egyedi iteráció-alapú nevet hoz létre az erőforráshoz, kezdve a következővel1
: .
Az erőforrásaink a következőképpen néznek ki:
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2015-01-01",
"name": "loop-0",
"properties": {
"mode": "Incremental",
"parameters": { },
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": { },
"variables": { },
"resources": [ ],
"outputs": {
"collection": {
"type": "array",
"value": "[parameters('state')]"
}
}
}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2015-01-01",
"name": "[concat('loop-', copyindex(1))]",
"copy": {
"name": "iterator",
"count": "[variables('count')]",
"mode": "serial"
},
"dependsOn": [
"loop-0"
],
"properties": {
"mode": "Incremental",
"templateLink": { "uri": "[parameters('transformTemplateUri')]" },
"parameters": {
"source": { "value": "[parameters('source')[copyindex()]]" },
"state": { "value": "[reference(concat('loop-', copyindex())).outputs.collection.value]" }
}
}
}
]
Vizsgáljuk meg közelebbről azokat a paramétereket, amelyeket átadunk az átalakító sablonnak a beágyazott sablonban. A korábbiakból már tudjuk, hogy source
a paraméter átadja az aktuális objektumot a source
paraméterobjektum-tömbben. A state
paraméter az a hely, ahol a gyűjtemény történik, mert a másolási hurok előző iterációjának kimenetét veszi át az aktuális iterációba. Figyelje meg, hogy a függvény paraméter reference()
copyIndex()
nélküli függvénnyel hivatkozik az name
előző csatolt sablonobjektumra.
Végül a output
sablon az átalakítóoutput
sablon utolsó iterációját adja vissza:
"outputs": {
"result": {
"type": "array",
"value": "[reference(concat('loop-', variables('count'))).outputs.collection.value]"
}
}
Ellenérdekűnek tűnhet az output
átalakító sablon utolsó iterációjának visszaadása a hívássablonhoz, mert úgy tűnik, hogy a paraméterben source
tároltuk. Ez azonban az átalakítósablon utolsó iterációja, amely az átalakított tulajdonságobjektumok teljes tömbjét tartalmazza, és ezt szeretnénk visszaadni.
Végül nézzük meg, hogyan hívhatja meg a gyűjtősablont a hívássablonból.
Hívássablon
A hívássablon egyetlen, nevű networkSecurityGroupsSettings
paramétert határoz meg:
...
"parameters": {
"networkSecurityGroupsSettings": {
"type": "object"
}
}
Ezután a sablon egyetlen nevű változót collectorTemplateUri
határoz meg:
"variables": {
"collectorTemplateUri": "[uri(deployment().properties.templateLink.uri, 'collector.template.json')]"
}
Ez a csatolt sablonerőforrás által használt gyűjtősablon URI-ja:
{
"apiVersion": "2020-06-01",
"name": "collector",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[variables('collectorTemplateUri')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"source": {
"value": "[parameters('networkSecurityGroupsSettings').securityRules]"
},
"transformTemplateUri": {
"value": "[uri(deployment().properties.templateLink.uri, 'transform.json')]"
}
}
}
}
Két paramétert adunk át a gyűjtősablonnak:
source
a tulajdonságobjektum-tömb. A példánkban ez a paraméter.networkSecurityGroupsSettings
transformTemplateUri
az a változó, amelyet az imént definiáltunk a gyűjtősablon URI-jával.
Végül az Microsoft.Network/networkSecurityGroups
erőforrás közvetlenül hozzárendeli a output
csatolt sablonerőforrást a collector
tulajdonságához securityRules
:
"resources": [
{
"apiVersion": "2020-05-01",
"type": "Microsoft.Network/networkSecurityGroups",
"name": "networkSecurityGroup1",
"location": "[resourceGroup().location]",
"properties": {
"securityRules": "[reference('collector').outputs.result.value]"
}
}
],
"outputs": {
"instance": {
"type": "array",
"value": "[reference('collector').outputs.result.value]"
}
}
A sablon kipróbálása
Egy példasablon érhető el a GitHubon. A sablon üzembe helyezéséhez klónozza az adattárat, és futtassa a következő Azure CLI-parancsokat :
git clone https://github.com/mspnp/template-examples.git
cd template-examples/example4-collector
az group create --location <location> --name <resource-group-name>
az deployment group create -g <resource-group-name> \
--template-uri https://raw.githubusercontent.com/mspnp/template-examples/master/example4-collector/deploy.json \
--parameters deploy.parameters.json
Következő lépések
- Azure Resource Manager
- Mik azok az ARM-sablonok?
- Oktatóanyag: Az első ARM-sablon létrehozása és üzembe helyezése
- Oktatóanyag: Erőforrás hozzáadása AZ ARM-sablonhoz
- AJÁNLOTT ELJÁRÁSOK AZ ARM-sablonhoz
- Az Azure Resource Manager dokumentációja
- ARM-sablon dokumentációja
Kapcsolódó források (lehet, hogy a cikkek angol nyelvűek)
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: