Erőforrások üzembe helyezési sorrendjének definiálása ARM-sablonokban
Az erőforrások üzembe helyezésekor előfordulhat, hogy bizonyos erőforrásoknak a többi erőforrás előtt kell létezniük. Egy adatbázis üzembe helyezése előtt például logikai SQL-kiszolgálóra van szükség. Ezt a kapcsolatot úgy hozhatja létre, hogy az egyik erőforrást a másik erőforrástól függőként jelöli meg. dependsOn
Az elem használatával definiáljon egy explicit függőséget. A referencia - vagy listafüggvények használatával definiálhat implicit függőséget.
Az Azure Resource Manager kiértékeli az erőforrások közötti függőségeket, és a függő sorrendben helyezi üzembe őket. Ha az erőforrások között nincs függőségi viszony, akkor a Resource Manager párhuzamosan helyezi üzembe azokat. Csak az ugyanazon sablonban üzembe helyezett erőforrások függőségeit kell meghatároznia.
Tipp
A Bicep használatát javasoljuk, mert ugyanazokat a képességeket kínálja, mint az ARM-sablonok, és a szintaxis használata is egyszerűbb. További információ: Erőforrás-függőségek.
dependsOn
Az Azure Resource Manager-sablonon (ARM-sablonon) belül az dependsOn
elem lehetővé teszi, hogy egy erőforrást egy vagy több erőforrástól függőként definiáljon. Az értéke egy Sztringek JavaScript Object Notation (JSON) tömbje, amelyek mindegyike egy erőforrásnév vagy -azonosító. A tömb tartalmazhat feltételesen üzembe helyezett erőforrásokat. Ha egy feltételes erőforrás nincs üzembe helyezve, az Azure Resource Manager automatikusan eltávolítja azt a szükséges függőségekből.
Az alábbi példa egy virtuális hálózattól, hálózati biztonsági csoporttól és nyilvános IP-címtől függő hálózati adaptert mutat be. A teljes sablont a Linux rendszerű virtuális gépek rövid útmutatósablonjában tekintheti meg.
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2022-07-01",
"name": "[variables('networkInterfaceName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/networkSecurityGroups/', parameters('networkSecurityGroupName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]",
"[resourceId('Microsoft.Network/publicIpAddresses/', variables('publicIpAddressName'))]"
],
...
}
A languageVersion 2.0-val használja az erőforrás szimbolikus nevét tömbökben dependsOn
. Például:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": {
"myStorage": {
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[format('storage{0}', uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
},
"myVm": {
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2023-03-01",
"name": "[format('vm{0}', uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"dependsOn": [
"myStorage"
],
...
}
}
}
Bár érdemes lehet az erőforrások közötti kapcsolatok leképezésére használni dependsOn
, fontos tisztában lenni azzal, hogy miért teszi ezt. Az erőforrások összekapcsolási dependsOn
módjának dokumentálásához például nem a megfelelő módszer. Az üzembe helyezés után az erőforrás nem őrzi meg az üzembehelyezési függőségeket a tulajdonságaiban, így nincsenek olyan parancsok vagy műveletek, amelyek lehetővé teszik a függőségek megtekintését. A szükségtelen függőségek beállítása lelassítja az üzembe helyezési időt, mert Resource Manager nem tudja párhuzamosan üzembe helyezni ezeket az erőforrásokat.
Gyermekerőforrások
Az implicit üzembe helyezési függőség nem jön létre automatikusan a gyermekerőforrás és a szülőerőforrás között. Ha a szülőerőforrás után telepítenie kell a gyermekerőforrást, állítsa be a tulajdonságot dependsOn
.
Az alábbi példa egy logikai SQL-kiszolgálót és -adatbázist mutat be. Figyelje meg, hogy explicit függőség van definiálva az adatbázis és a kiszolgáló között, annak ellenére, hogy az adatbázis a kiszolgáló gyermeke.
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2022-05-01-preview",
"name": "[parameters('serverName')]",
"location": "[parameters('location')]",
"properties": {
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]"
},
"resources": [
{
"type": "databases",
"apiVersion": "2022-05-01-preview",
"name": "[parameters('sqlDBName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"dependsOn": [
"[resourceId('Microsoft.Sql/servers', parameters('serverName'))]"
]
}
]
}
]
A teljes sablonért tekintse meg a Azure SQL Database rövid útmutatósablonját.
referencia- és listafüggvények
A referenciafüggvény lehetővé teszi, hogy egy kifejezés más JSON-névből és értékpárokból vagy futtatókörnyezeti erőforrásokból származtassa az értékét. A list* függvények egy listaműveletből származó erőforrás értékeit adja vissza.
A hivatkozási és listakifejezések implicit módon deklarálják, hogy az egyik erőforrás egy másiktól függ. Amikor csak lehetséges, használjon implicit hivatkozást a szükségtelen függőségek hozzáadásának elkerülése érdekében.
Implicit függőség kényszerítéséhez az erőforrásra hivatkozzon név szerint, nem pedig erőforrás-azonosító alapján. Ha átadja az erőforrás-azonosítót a referencia- vagy listafüggvényekbe, a rendszer nem hoz létre implicit hivatkozást.
A függvény általános formátuma reference
:
reference('resourceName').propertyPath
A függvény általános formátuma listKeys
:
listKeys('resourceName', 'yyyy-mm-dd')
A következő példában a CDN-végpont explicit módon a CDN-profiltól függ, és implicit módon egy webalkalmazástól függ.
{
"type": "endpoints",
"apiVersion": "2021-06-01",
"name": "[variables('endpointName')]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[variables('profileName')]"
],
"properties": {
"originHostHeader": "[reference(variables('webAppName')).hostNames[0]]",
...
}
...
}
További információ: referenciafüggvény.
Erőforrásoktól függ egy ciklusban
A másolási ciklus erőforrásaitól függő erőforrások üzembe helyezéséhez két lehetősége van. Beállíthat függőséget az egyes erőforrásoktól a hurokban vagy a teljes hurokban.
Megjegyzés
A legtöbb forgatókönyv esetében a másolási cikluson belül kell beállítani az egyes erőforrásoktól való függőséget. Csak akkor függ az egész ciklustól, ha a ciklusban lévő összes erőforrásnak léteznie kell a következő erőforrás létrehozása előtt. Ha a függőséget az egész ciklusra állítja, a függőségi diagram jelentősen megnő, különösen akkor, ha ezek a hurkolt erőforrások más erőforrásoktól függnek. A kibővített függőségek megnehezítik az üzembe helyezés hatékony elvégzését.
Az alábbi példa bemutatja, hogyan helyezhet üzembe több virtuális gépet. A sablon ugyanannyi hálózati adaptert hoz létre. Minden virtuális gép egy hálózati adaptertől függ, nem pedig a teljes huroktól.
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2022-07-01",
"name": "[format('{0}-{1}', variables('nicPrefix'), copyIndex())]",
"location": "[parameters('location')]",
"copy": {
"name": "nicCopy",
"count": "[parameters('vmCount')]"
},
...
},
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2022-11-01",
"name": "[format('{0}{1}', variables('vmPrefix'), copyIndex())]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/networkInterfaces',format('{0}-{1}', variables('nicPrefix'),copyIndex()))]"
],
"copy": {
"name": "vmCopy",
"count": "[parameters('vmCount')]"
},
"properties": {
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces',format('(0)-(1)', variables('nicPrefix'), copyIndex()))]",
"properties": {
"primary": "true"
}
}
]
},
...
}
}
Az alábbi példa bemutatja, hogyan helyezhet üzembe három tárfiókot a virtuális gép üzembe helyezése előtt. Figyelje meg, hogy az copy
elem name
értéke storagecopy
és a dependsOn
virtuális gép eleme is értékre storagecopy
van állítva.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}storage{1}, copyIndex(), uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"copy": {
"name": "storagecopy",
"count": 3
},
"properties": {}
},
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2022-11-01",
"name": "[format('VM{0}', uniqueString(resourceGroup().id))]",
"dependsOn": ["storagecopy"],
...
}
]
}
A szimbolikus nevek tömbökben dependsOn
is használhatók. Ha a szimbolikus név egy másolási hurokhoz tartozik, a hurokban lévő összes erőforrás függőségként lesz hozzáadva. Az előző minta a következő JSON-ként írható. A mintában a myVM a myStorages hurok összes tárfiókjától függ.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": {
"myStorages": {
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[format('{0}storage{1}, copyIndex(), uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"copy": {
"name": "storagecopy",
"count": 3
},
"properties": {}
},
"myVM": {
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2022-11-01",
"name": "[format('VM{0}', uniqueString(resourceGroup().id))]",
"dependsOn": ["myStorages"],
...
}
}
}
Körkörös függőségek
Resource Manager azonosítja a körkörös függőségeket a sablon érvényesítése során. Ha a körkörös függőségekkel kapcsolatban hibaüzenetet kap, értékelje ki a sablont, és ellenőrizze, hogy eltávolíthatók-e függőségek. Ha a függőségek eltávolítása nem működik, elkerülheti a körkörös függőségeket, ha egyes üzembehelyezési műveleteket gyermekerőforrásokba helyez át. Helyezze üzembe a gyermekerőforrásokat a körkörös függőségű erőforrások után. Tegyük fel például, hogy két virtuális gépet helyez üzembe, de mindegyiken meg kell adnia a másikra hivatkozó tulajdonságokat. Ezeket a következő sorrendben helyezheti üzembe:
- vm1
- vm2
- A vm1 bővítménye a vm1-től és a vm2-től függ. A bővítmény beállítja a vm1 azon értékeit, amelyeket a vm2-ből kap.
- A vm2 bővítménye a vm1-től és a vm2-től függ. A bővítmény beállítja a vm2 azon értékeit, amelyeket a vm1-ből kap.
Az üzembehelyezési sorrend felmérésével és a függőségi hibák megoldásával kapcsolatos információkért lásd: Gyakori Azure-beli üzembehelyezési hibák elhárítása az Azure Resource Manager.
Következő lépések
- Az oktatóanyagok megtekintéséhez lásd : Oktatóanyag: ARM-sablonok létrehozása függő erőforrásokkal.
- Az erőforrás-függőségeket ismertető Learn-modulért lásd: Összetett felhőbeli üzemelő példányok kezelése speciális ARM-sablonfunkciók használatával.
- A függőségek beállításával kapcsolatos javaslatokért tekintse meg az ARM-sablonok ajánlott eljárásait.
- A függőségek üzembe helyezés során történő hibaelhárításával kapcsolatos további információkért lásd: Gyakori Azure-beli üzembehelyezési hibák elhárítása az Azure Resource Manager.
- Az Azure Resource Manager-sablonok létrehozásáról az ARM-sablonok szerkezetének és szintaxisának ismertetése című témakörben olvashat.
- A sablonban elérhető függvények listáját lásd: ARM-sablonfüggvények.
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: