Distribuera länkade och kapslade ARM-mallar
När komplexiteten i distributionen växer kanske du vill gå över till en modulär metod för att distribuera resurser med hjälp av Azure Resource Manager (ARM) länkade eller kapslade mallar. Länkade och kapslade mallar är sätt att dela upp distributionen i många relaterade mallar och sedan distribuera dem tillsammans via en huvudmall.
Länkad mall
Länkade mallar refererar till att ansluta separata mallfiler, som refereras till av en länk från en huvudmall. Med länkade mallar kan du skapa återanvändbara, komposterbara och modulära distributioner som består av många enskilda ARM-mallar.
När du refererar till en länkad mall måste du ange ett URI-värde som är tillgängligt via HTTP eller HTTPS. Till skillnad från vår senaste lektion, där vi kan använda en lokal fil som mall.
Om du vill använda länkade mallar måste du först mellanlagra mallarna på en offentligt tillgänglig slutpunkt, till exempel GitHub eller Azure Blob Storage. Använd ett Azure Storage-konto som skyddas av en SAS-token (signatur för delad åtkomst) för att skydda dina mallar från offentlig åtkomst.
För att lägga till en länkad mall till din ARM-mall, lägg till en Microsoft.Resources/deployments
-resurs och egenskapen templateLink
som är konfigurerad med mallens plats.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "linkeddemo001"
}
},
"variables": {
"linked-template": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-Module-sample/storage.json",
"linked-template-two": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-Module-sample/identity.json"
},
"resources": [
{
"name": "storage",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-10-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[variables('linked-template')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"name": { "value": "[parameters('name')]" },
"location": { "value": "[resourceGroup().location]" }
}
}
},
{
"name": "identity",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-10-01",
"dependsOn": [
"[resourceId('Microsoft.Resources/deployments','storage')]"
],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[variables('linked-template-two')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"name": { "value": "[parameters('name')]" },
"location": { "value": "[resourceGroup().location]" }
}
}
}
],
"outputs": {
"storageURI": {
"type": "string",
"value": "[reference('storage').outputs.storageEndpoint.value]"
}
}
}
Om det behövs kan du även skicka parametervärden till den länkade mallen och hämta utdata från den länkade mallen vid distributionstillfället. Parametrar kan skickas antingen via en parameterfil eller via infogade parametrar.
{
"name": "storage",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-10-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[variables('linked-template')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"name": { "value": "[parameters('name')]" },
"location": { "value": "[resourceGroup().location]" }
}
}
}
För små till medelstora lösningar är en enda mall enklare att förstå och underhålla. Du kan se alla resurser och värden i en enda fil. I avancerade scenarier kan du med länkade mallar dela upp lösningen i målkomponenter. Du kan enkelt återanvända dessa mallar för andra scenarier.
Kapslad mall
Kapslad mall avser handlingen att bädda in mallsyntax i en huvudmall. Kapslade mallar möjliggör avancerade distributionsscenarier som att distribuera till flera Azure Resource Manager-omfång eller flera resursgrupper från en enda mallfil. Till skillnad från länkade mallar, där varje mall lagras i sina egna mallfiler, kan kapslade mallar lagra många enskilda mallar i en fil. Det finns flera orsaker till att du kanske vill använda den här mallstrukturen, till exempel när du distribuerar resurser till flera resursgrupper eller distributionsomfång.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-10-01",
"name": "nestedTemplate1",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-04-01",
"name": "[parameters('storageAccountName')]",
"location": "West US",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
}
]
}
}
}
],
"outputs": {
}
}
När du använder en kapslad mall kan du ange om malluttryck ska utvärderas inom omfånget för den överordnade mallen eller den kapslade mallen. Omfånget avgör hur parametrar, variabler och funktioner som resourceGroup
och subscription
löses.