Wdrażanie połączonych i zagnieżdżonych szablonów ARM
Wraz ze wzrostem złożoności wdrożenia możesz przejść do modułowego podejścia do wdrażania zasobów przy użyciu usługi Azure Resource Manager (ARM) połączonych lub zagnieżdżonych szablonów. Połączone i zagnieżdżone szablony to sposoby podziału wdrożenia na wiele powiązanych szablonów, a następnie ich wdrażanie za pomocą głównego szablonu.
Szablon połączony
Połączony szablon odnosi się do procesu łączenia oddzielnych plików szablonów za pomocą linku z głównego szablonu. Połączone szablony umożliwiają tworzenie wdrożeń wielokrotnego użytku, złożonych i modułowych, które składają się z wielu pojedynczych szablonów ARM.
W przypadku odwoływania się do połączonego szablonu należy podać wartość identyfikatora URI dostępną za pośrednictwem protokołu HTTP lub HTTPS. W przeciwieństwie do naszej ostatniej jednostki, w której mogliśmy użyć pliku lokalnego jako szablonu.
Aby korzystać z szablonów połączonych, należy najpierw przygotować szablony w publicznie dostępnym punkcie końcowym, takim jak GitHub lub Azure Blob Storage. Użyj konta usługi Azure Storage zabezpieczonego za pomocą tokenu sygnatury dostępu współdzielonego (SAS), aby zapewnić bezpieczeństwo szablonów przed dostępem publicznym.
Aby dodać powiązany szablon do szablonu ARM, dodaj zasób Microsoft.Resources/deployments
i właściwość templateLink
skonfigurowaną z lokalizacją szablonu.
{
"$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]"
}
}
}
W razie potrzeby można również przekazać wartości parametrów do połączonego szablonu i pobrać dane wyjściowe z połączonego szablonu podczas wdrażania. Parametry można przekazać za pośrednictwem pliku parametrów lub parametrów wbudowanych.
{
"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]" }
}
}
}
W przypadku małych i średnich rozwiązań pojedynczy szablon jest łatwiejszy do zrozumienia i utrzymania. Wszystkie zasoby i wartości są widoczne w jednym pliku. W przypadku zaawansowanych scenariuszy połączone szablony umożliwiają podzielenie rozwiązania na składniki docelowe. Te szablony można łatwo użyć w innych scenariuszach.
Szablon zagnieżdżony
szablon zagnieżdżony odnosi się do procesu osadzania składni szablonu w głównym szablonie. Szablony zagnieżdżone umożliwiają wykonywanie zaawansowanych scenariuszy wdrażania, takich jak wdrażanie w wielu zakresach usługi Azure Resource Manager lub wielu grupach zasobów z jednego pliku szablonu. W przeciwieństwie do szablonów połączonych, w których każdy szablon jest przechowywany we własnych plikach szablonów, zagnieżdżone szablony umożliwiają przechowywanie wielu pojedynczych szablonów w jednym pliku. Istnieje kilka powodów, dla których warto użyć tej struktury szablonu, na przykład podczas wdrażania zasobów w wielu grupach zasobów lub zakresach wdrażania.
{
"$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": {
}
}
Gdy używasz szablonu zagnieżdżonego, możesz określić, czy wyrażenia szablonu są oceniane w zakresie szablonu nadrzędnego, czy szablonu zagnieżdżonego. Zakres określa, jak są rozwiązywane parametry, zmienne i funkcje, takie jak resourceGroup
i subscription
.