Modularisieren von Vorlagen

Abgeschlossen

Wenn Sie Azure Resource Manager-Vorlagen verwenden, sollten Sie sie modularisieren, indem Sie sie in einzelne Komponenten aufteilen.

Die primäre zu nutzende Methode ist die Verwendung verknüpfter Vorlagen.

Sie ermöglicht es Ihnen, die Lösung in Zielkomponenten aufzuteilen und diese verschiedenen Elemente in verschiedenen Bereitstellungen wiederzuverwenden.

Verknüpfte Vorlage

Um eine Vorlage mit einer anderen zu verknüpfen, fügen Sie Ihrer Hauptvorlage eine Bereitstellungsressource hinzu.

"resources": [
  {
      "apiVersion": "2017-05-10",
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "properties": {
          "mode": "Incremental",
          <link-to-external-template>
      }
  }
]


Geschachtelte Vorlage

Sie können auch eine Vorlage in der Hauptvorlage schachteln, die Vorlageneigenschaft (template) verwenden und die Vorlagensyntax angeben.

Dies kann zwar die Modularisierung etwas unterstützen, aber die Aufteilung der verschiedenen Komponenten kann zu einer recht großen Hauptdatei führen, da sich alle Elemente in dieser einzelnen Datei befinden.

"resources": [
  {
    "apiVersion": "2017-05-10",
    "name": "nestedTemplate",
    "type": "Microsoft.Resources/deployments",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageName')]",
            "apiVersion": "2015-06-15",
            "location": "West US",
            "properties": {
              "accountType": "Standard_LRS"
            }
          }
        ]
      }
    }
  }
]

Hinweis

Für geschachtelte Vorlagen können Sie keine Parameter oder Variablen verwenden, die in der geschachtelten Vorlage selbst definiert sind. Sie können nur Parameter und Variablen aus der Hauptvorlage verwenden.

Die Eigenschaften, die Sie für die Bereitstellungsressource bereitstellen, variieren je nach Verknüpfung mit einer externen Vorlage oder Schachtelung einer Inlinevorlage in der Hauptvorlage.

Bereitstellungsmodi

Wenn Sie Ihre Ressourcen mithilfe von Vorlagen bereitstellen, haben Sie drei Optionen:

  • validate (validieren). Diese Option kompiliert die Vorlagen, überprüft die Bereitstellung, stellt sicher, dass die Vorlage funktionsfähig (z. B. keine Ringabhängigkeiten) und die Syntax korrekt ist.
  • Modus „incremental“ (Standard) (inkrementell). Mit dieser Option wird nur das bereitgestellt, was in der Vorlage definiert ist. Es werden keine Ressourcen entfernt oder geändert, die nicht in der Vorlage definiert sind. Wenn Sie beispielsweise einen virtuellen Computer über eine Vorlage bereitgestellt und dann in der Vorlage umbenannt haben, bleibt die erste bereitgestellte VM nach der erneuten Ausführung der Vorlage erhalten. Dies ist der Standardmodus.
  • Vollständiger Modus: Resource Manager löscht Ressourcen, die in der Ressourcengruppe vorhanden, aber nicht in der Vorlage angegeben sind. Beispielsweise sind nur in der Vorlage definierte Ressourcen in der Ressourcengruppe vorhanden, nachdem die Vorlage bereitgestellt wurde. Als bewährte Methode sollten Sie diesen Modus in Produktionsumgebungen wählen, um in Ihren Bereitstellungsvorlagen Idempotenz zu erreichen.

Verwenden Sie bei der Bereitstellung mit PowerShell zum Festlegen des Bereitstellungsmodus den Parameter Mode, wie im Beispiel für geschachtelte Vorlagen weiter oben in diesem Thema beschrieben.

Hinweis

Als bewährte Methode sollten Sie eine Ressourcengruppe pro Bereitstellung verwenden.

Hinweis

Sowohl für verknüpfte als auch für geschachtelte Vorlagen ist nur der Bereitstellungsmodus incremental möglich.

Externe Vorlage und externe Parameter

Um eine externe Vorlage und Parameterdatei zu verknüpfen, verwenden Sie templateLink und parametersLink.

Stellen Sie beim Verknüpfen mit einer Vorlage sicher, dass der Resource Manager-Dienst darauf zugreifen kann.

Beispielsweise können Sie keine lokale Datei oder eine Datei, die nur in Ihrem lokalen Netzwerk verfügbar ist, angeben.

Daher können Sie nur einen URI-Wert (Uniform Resource Identifier) bereitstellen, der entweder HTTP oder HTTPS enthält.

Eine Möglichkeit besteht im Platzieren der verknüpften Vorlage in einem Speicherkonto und der Verwendung des URI für dieses Element.

Sie können den Parameter auch inline bereitstellen. Sie können jedoch nicht sowohl Inlineparameter als auch eine Verknüpfung mit einer Parameterdatei verwenden.

Im folgenden Beispiel wird der Parameter templateLink verwendet:

  "resources": [
    {
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
          "mode": "Incremental",
          "templateLink": {
              "uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
          },
          "parameters": {
              "storageAccountName":{"value": "[variables('storageAccountName')]"},
              "location":{"value": "[parameters('location')]"}
          }
      }
    },


Sichern einer externen Vorlage

Obwohl die verknüpfte Vorlage extern verfügbar sein muss, muss sie nicht öffentlich verfügbar gemacht werden.

Stattdessen können Sie Ihre Vorlage einem privaten Speicherkonto hinzufügen, auf das nur der Besitzer des Speicherkontos zugreifen kann, wobei Sie SAS-Token (Shared Access Signature) erstellen, um den Zugriff während der Bereitstellung zu ermöglichen.

Sie fügen dieses SAS-Token dem URI für die verknüpfte Vorlage hinzu.

Obwohl das Token als sichere Zeichenfolge übergeben wird, wird der URI der verknüpften Vorlage, einschließlich des SAS-Tokens, in den Bereitstellungsvorgängen protokolliert.

Um eine Gefährdung zu begrenzen, können Sie auch ein Ablaufdatum für das Token festlegen.