Wdrażanie środowisk usługi DevTest Labs przy użyciu szablonów zagnieżdżonych

Wdrożenie zagnieżdżone uruchamia pomocnicze szablony usługi Azure Resource Manager (ARM) z poziomu głównego szablonu. W tym artykule przedstawiono przykład zagnieżdżania szablonów w celu wdrożenia środowiska Azure DevTest Labs. Środowiska usługi DevTest Labs zawierają wiele maszyn wirtualnych typu infrastruktura jako usługa (IaaS) z zainstalowanymi zasobami typu "platforma jako usługa" (PaaS). Zasoby i maszyny wirtualne PaaS można aprowizować przy użyciu szablonów usługi ARM.

Rozdzielenie wdrożenia na zestaw docelowych szablonów specyficznych dla celu zapewnia korzyści z testowania, ponownego użycia i czytelności. Ogólne informacje na temat szablonów zagnieżdżonych, w tym przykładów kodu, można znaleźć w temacie Using linked and nested templates when deploying Azure resources (Używanie połączonych i zagnieżdżonych szablonów podczas wdrażania zasobów platformy Azure).

Wdrażanie zagnieżdżonych szablonów za pomocą programu Visual Studio

Szablon projektu grupy zasobów platformy Azure w programie Visual Studio ułatwia opracowywanie i debugowanie szablonów usługi ARM. Po dodaniu szablonu zagnieżdżonego do głównego pliku szablonu azuredeploy.json program Visual Studio dodaje następujące elementy, aby szablon był bardziej elastyczny:

  • Podfolder z pomocniczym szablonem i plikami parametrów
  • Nazwy zmiennych w głównym pliku szablonu
  • Dwa kluczowe parametry _artifactsLocation i _artifactsLocationSasToken

W usłudze DevTest Labs szablony usługi ARM są przechowywane w repozytorium Git, które łączysz z laboratorium. Gdy używasz jednego z połączonych szablonów repozytorium do utworzenia nowego środowiska, wdrożenie kopiuje pliki szablonów do kontenera usługi Azure Storage w laboratorium. Po dodaniu zagnieżdżonego zasobu szablonu do repozytorium i pliku głównego szablonu program Visual Studio identyfikuje _artifactsLocation wartości i _artifactsLocationSasToken , kopiuje podfoldery do kontenera magazynu i wstawia token lokalizacji i sygnatury dostępu współdzielonego (SaS) do plików parametrów.

Struktura folderów szablonu zagnieżdżonego

W poniższym przykładzie szablonu folder repozytorium Git zawiera podfolder, zagnieżdżone elementy z zagnieżdżonymi plikami szablonów NestOne.json i NestOne.parameters.json. Główny plik szablonu azuredeploy.json tworzy identyfikator URI szablonów pomocniczych przy użyciu lokalizacji artefaktów, zagnieżdżonego folderu szablonu i zagnieżdżonej nazwy pliku szablonu. Identyfikator URI pliku parametrów to lokalizacja artefaktów, zagnieżdżony folder szablonu i plik parametrów szablonu zagnieżdżonego. Do folderu podstawowego można dodać więcej zagnieżdżonych podfolderów szablonów, ale tylko na jednym poziomie zagnieżdżania.

Poniższy zrzut ekranu przedstawia strukturę projektu w programie Visual Studio:

Zrzut ekranu przedstawiający zagnieżdżony szablon struktury projektu w programie Visual Studio.

Przykład wdrożenia zagnieżdżonego

W poniższym przykładzie przedstawiono główny plik szablonu usługi ARM azuredeploy.json dla wdrożenia zagnieżdżonego:


"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "_artifactsLocation": {
        "type": "string"
    },
    "_artifactsLocationSasToken": {
        "type": "securestring"
    }},
"variables": {
    "NestOneTemplateFolder": "nestedtemplates",
    "NestOneTemplateFileName": "NestOne.json",
    "NestOneTemplateParametersFileName": "NestOne.parameters.json"},
    "resources": [
    {
        "name": "NestOne",
        "type": "Microsoft.Resources/deployments",
        "apiVersion": "2016-09-01",
        "dependsOn": [ ],
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            },
            "parametersLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateParametersFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            }
        }    
    }],
"outputs": {}

Następne kroki