Bereitstellen von DevTest Labs-Umgebungen mithilfe geschachtelter Vorlagen

Eine geschachtelte Bereitstellung führt sekundäre ARM-Vorlagen (Azure Resource Manager) aus einer Hauptvorlage aus. Dieser Artikel zeigt ein Beispiel für das Schachteln von Vorlagen zum Bereitstellen einer Azure DevTest Labs-Umgebung. DevTest Labs-Umgebungen enthalten mehrere IaaS-VMs (Infrastructure-as-a-Service), auf denen PaaS-Ressourcen (Platform-as-a-Service) installiert sind. Sie können die PaaS-Ressourcen und VMs mithilfe von ARM-Vorlagen bereitstellen.

Das Aufteilen einer Bereitstellung in eine Reihe von gezielten, zweckspezifischen Vorlagen bietet Vorteile beim Testen, Wiederverwenden und bezüglich der Lesbarkeit. Allgemeine Informationen zu geschachtelten Vorlagen, einschließlich Codebeispielen, finden Sie unter Verwenden von verknüpften und geschachtelten Vorlagen beim Bereitstellen von Azure-Ressourcen.

Bereitstellen von geschachtelten Vorlagen mit Visual Studio

Die Projektvorlage „Azure-Ressourcengruppe“ in Visual Studio erleichtert das Entwickeln und Debuggen von ARM-Vorlagen. Wenn Sie der Hauptvorlagendatei azuredeploy.json eine geschachtelte Vorlage hinzufügen, fügt Visual Studio die folgenden Elemente hinzu, um die Vorlage flexibler zu gestalten:

  • Einen Unterordner mit der sekundären Vorlage und Parameterdateien
  • Variablennamen in der Hauptvorlagendatei
  • Zwei Schlüsselparameter: _artifactsLocation und _artifactsLocationSasToken

In DevTest Labs speichern Sie ARM-Vorlagen in einem Git-Repository, das Sie mit dem Lab verknüpfen. Wenn Sie eine der verknüpften Repositoryvorlagen verwenden, um eine neue Umgebung zu erstellen, kopiert die Bereitstellung die Vorlagendateien in einen Azure Storage-Container im Lab. Wenn Sie dem Repository und der Hauptvorlagendatei eine geschachtelte Vorlagenressource hinzufügen, identifiziert Visual Studio die _artifactsLocation Werte und _artifactsLocationSasToken, kopiert die Unterordner in den Speichercontainer und fügt den Speicherort und das SAS-Token (Shared Access Signature) in die Parameterdateien ein.

Struktur des Ordners für geschachtelte Vorlagen

Im folgenden Vorlagenbeispiel enthält der Git-Repositoryordner einen Unterordner (nestedtemplates) mit den geschachtelten Vorlagendateien NestOne.json und NestOne.parameters.json. Die Hauptvorlagendatei azuredeploy.json erstellt den URI für die sekundären Vorlagen mithilfe des Artefaktspeicherorts, des Ordners für geschachtelte Vorlagen und des Dateinamens der geschachtelten Vorlage. Der URI für die Parameterdatei besteht aus dem Artefaktspeicherort, dem Ordner für geschachtelte Vorlagen und der Parameterdatei für die geschachtelte Vorlage. Sie können dem primären Ordner weitere Unterordner für geschachtelte Vorlagen hinzufügen, jedoch nur auf einer Schachtelungsebene.

Der folgende Screenshot zeigt die Projektstruktur in Visual Studio:

Screenshot that shows the nested template project structure in Visual Studio.

Beispiel für die geschachtelte Bereitstellung

Das folgende Beispiel zeigt die ARM-Hauptvorlagendatei azuredeploy.json für die geschachtelte Bereitstellung:


"$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": {}

Nächste Schritte