Hinzufügen von Flexibilität zu Ihrer Azure Resource Manager-Vorlage durch Verwendung von Parametern und Ausgaben

Abgeschlossen

In der letzten Lerneinheit haben Sie eine Azure Resource Manager-Vorlage (ARM) erstellt und dieser ein Azure Storage-Konto hinzugefügt. Möglicherweise haben Sie bemerkt, dass es ein Problem mit Ihrer Vorlage gibt. Der Name des Speicherkontos ist hartcodiert. Sie können mit dieser Vorlage immer nur das gleiche Speicherkonto bereitstellen. Wenn Sie ein Speicherkonto mit einem anderen Namen bereitstellen möchten, müssen Sie eine neue Vorlage erstellen – keine praktische Vorgehensweise zum Automatisieren Ihrer Bereitstellungen. Die Speicherkonto-SKU ist ebenfalls hartcodiert, was bedeutet, dass Sie den Typ des Speicherkontos für unterschiedliche Umgebungen nicht verändern können. Denken Sie daran, dass in unserem Szenario jede Bereitstellung einen anderen Speicherkontotyp aufweisen kann. Sie können Ihre Vorlage besser wiederverwendbar machen, indem Sie einen Parameter für die Speicherkonto-SKU hinzufügen.

In dieser Lerneinheit erfahren Sie mehr über die Abschnitte Parameter und Ausgaben der Vorlage.

ARM-Vorlagenparameter

Mithilfe von ARM-Vorlagenparametern können Sie die Bereitstellung anpassen, indem Sie Werte angeben, die auf eine bestimmte Umgebung zugeschnitten sind. Beispielsweise übergeben Sie unterschiedliche Werte, je nachdem, ob Sie die Bereitstellung in einer Umgebung für Entwicklung, Tests, Produktion oder andere durchführen. Die obige Vorlage verwendet beispielsweise die Speicherkonto-SKU Standard_LRS. Sie können diese Vorlage für andere Bereitstellungen wiederverwenden, die ein Speicherkonto erstellen, indem Sie den Namen der Speicherkonto-SKU als Parameter angeben. Anschließend übergeben Sie den Namen der für diese spezifische Bereitstellung gewünschten SKU, wenn die Vorlage bereitgestellt wird. Diesen Schritt können Sie entweder über die Befehlszeile oder mithilfe einer Parameterdatei erledigen.

Im parameters-Abschnitt der Vorlage geben Sie an, welche Werte Sie beim Bereitstellen der Ressourcen eingeben können. Sie sind in einer Vorlage auf 256 Parameter beschränkt. Parameterdefinitionen können die meisten Vorlagenfunktionen verwenden.

Folgende Eigenschaften sind für einen Parameter verfügbar:

"parameters": {
  "<parameter-name>": {
    "type": "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [
      "<array-of-allowed-values>"
    ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the-parameter>"
    }
  }
}

Die zulässigen Parametertypen sind:

  • string
  • secureString
  • integers
  • boolean
  • object
  • secureObject
  • array

Empfehlungen für die Verwendung von Parametern

Verwenden Sie Parameter für Einstellungen, die je nach Umgebung variieren, wie z. B. SKU, Größe oder Kapazität. Verwenden Sie Parameter auch für Ressourcennamen, die Sie selbst für die einfache Identifikation angeben möchten, oder um interne Namenskonventionen einzuhalten. Stellen Sie zudem sicher, dass Sie für jeden Parameter eine Beschreibung angeben und nach Möglichkeit Standardwerte verwenden.

Aus Sicherheitsgründen ist es wichtig, Benutzernamen und/oder Kennwörter in Vorlagen niemals hartzucodieren oder Standardwerte für diese bereitzustellen. Verwenden Sie immer Parameter für Benutzernamen und Kennwörter (oder Geheimnisse). Verwenden Sie secureString- für alle Kennwörter und Geheimnisse. Wenn Sie vertrauliche Daten in einem JSON-Objekt übergeben, verwenden Sie den Typ secureObject. Vorlagenparameter mit secureString- oder secureObject-Typen können nach der Bereitstellung der Ressource nicht mehr gelesen oder abgerufen werden.

Verwenden von Parametern in einer ARM-Vorlage

Geben Sie im Parameterabschnitt der ARM-Vorlage die Parameter an, die beim Bereitstellen der Ressourcen eingegeben werden können. Die Anzahl der Parameter in einer Vorlage ist auf 256 beschränkt.

Im Folgenden finden Sie ein Beispiel für eine Vorlagendatei mit einem Parameter für die Speicherkonto-SKU, der im Abschnitt parameters der Vorlage definiert ist. Sie können einen Standardwert für den Parameter bereitstellen, der zu verwenden ist, wenn bei der Ausführung kein Wert angegeben wird.

"parameters": {
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
      "Standard_LRS",
      "Standard_GRS",
      "Standard_ZRS",
      "Premium_LRS"
    ],
    "metadata": {
      "description": "Storage Account type"
    }
  }
}

Verwenden Sie dann den Parameter in der Ressourcendefinition. Die Syntax lautet [parameters('name of the parameter')]. Sie verwenden die Funktion parameters. Im nächsten Modul erfahren Sie mehr über Funktionen.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "name": "learntemplatestorage123",
    "location": "[resourceGroup().location]",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true
    }
  }
]

Wenn Sie die Vorlage bereitstellen, können Sie einen Wert für den Parameter angeben. Beachten Sie die letzte Zeile im folgenden Befehl:

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

ARM-Vorlagenausgaben

Im Abschnitt „Ausgaben“ ihrer ARM-Vorlage können Sie Werte angeben, die nach einer erfolgreichen Bereitstellung zurückgegeben werden. Hier finden Sie die Elemente, aus denen der Abschnitt „Ausgaben“ besteht.

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Element BESCHREIBUNG
output-name Es muss sich um einen gültigen JavaScript-Bezeichner handeln.
condition (Optional) Ein boolescher Wert, der angibt, ob dieser Ausgabewert zurückgegeben wird. Bei „true“ wird der Wert in die Ausgabe für die Bereitstellung aufgenommen. Bei „false“ wird der Ausgabewert für diese Bereitstellung übersprungen. Wenn keine Angabe erfolgt, ist der Standardwert „true“.
type Der Typ des Ausgabewerts.
value (Optional) Ein Vorlagensprachausdruck, der ausgewertet und als Ausgabewert zurückgegeben wird.
copy (Optional) „copy“ wird zum Zurückgeben von mehr als einem Wert für eine Ausgabe verwendet.

Verwenden von Ausgaben in einer ARM-Vorlage

Im Folgenden finden Sie ein Beispiel für die Ausgabe der Endpunkte des Speicherkontos:

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

Beachten Sie den reference-Teil des Ausdrucks. Diese Funktion ruft den Laufzeitzustand des Speicherkontos ab.

Erneutes Bereitstellen einer ARM-Vorlage

Denken Sie daran, dass ARM-Vorlagen idempotent sind. Dies bedeutet, dass Sie die Vorlage erneut in derselben Umgebung bereitstellen können und sich in der Umgebung nichts ändert, wenn in der Vorlage nichts geändert wurde. Wenn eine Änderung an der Vorlage vorgenommen wurde, z. B. die Änderung eines Parameterwerts, wird nur diese Änderung bereitgestellt. Ihre Vorlage kann alle Ressourcen enthalten, die Sie für Ihre Azure-Lösung benötigen, und Sie können eine Vorlage problemlos noch mal ausführen. Ressourcen werden nur erstellt, wenn sie nicht bereits vorhanden sind, und nur aktualisiert, wenn eine Änderung vorliegt.