Die Nordlicht Reisen GmbH will ihre Umgebungen nicht mehr von Hand klicken. Ein Kollege hat eine Vorlage für ein Speicherkonto geschrieben, und Sie sollen sie lesen, anpassen und bereitstellen. Außerdem soll eine Ressourcengruppe, die jemand im Portal angelegt hat, als Vorlage festgehalten werden. Genau das verlangt die Prüfung: eine ARM-Vorlage lesen, ändern, bereitstellen und eine Bereitstellung als ARM-Vorlage exportieren.

Vorwissen: Was Azure Resource Manager (ARM) ist und warum Infrastruktur als Code sinnvoll ist, steht in „AZ-900 kompakt“, Lektion 3.3, und in K3, Lektion 3.2.1. Die Sprache Bicep, Module und What-if lehrt K3 im Modul 3.2 (Lektionen 3.2.2 bis 3.2.4); Lektion 3.2 dieses Kurses ergänzt nur, was die Prüfung zu Bicep verlangt. Hier geht es um das JSON-Format, das hinter beiden steht.

Der Aufbau einer ARM-Vorlage

Eine ARM-Vorlage ist eine JSON-Datei. In der einfachsten Form besteht sie aus diesen Elementen (die Tabelle folgt Microsofts Beschreibung):

Element Pflicht Wofür
$schema ja Adresse des JSON-Schemas, das die Version der Vorlagensprache beschreibt; es hängt vom Bereich der Bereitstellung ab
contentVersion ja Version der Vorlage, zum Beispiel 1.0.0.0; ein beliebiger Wert zum Festhalten wichtiger Änderungen
parameters nein Werte, die man bei der Bereitstellung angibt
variables nein Werte, die man in der Vorlage wiederverwendet, um Ausdrücke zu kürzen
functions nein eigene Funktionen
resources ja die Ressourcentypen, die bereitgestellt oder aktualisiert werden
outputs nein Werte, die nach der Bereitstellung zurückkommen

Dazu kommen die Elemente languageVersion, apiProfile und definitions, die für diese Lektion keine Rolle spielen. Wichtig zu wissen: Mit "languageVersion": "2.0" wird resources ein Objekt statt einer Liste, und Ressourcen haben dann einen symbolischen Namen. Das passiert auch, wenn eine Bicep-Datei bestimmte Funktionen nutzt; Sie müssen es nur erkennen können.

Eine kleine, vollständige Vorlage, die ein Speicherkonto anlegt (Microsoft zeigt sie in dieser Form in der Dokumentation zu Vorlagen-Spezifikationen):

JSON
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

So lesen Sie sie:

  • Parameter haben einen type (string, securestring, int, bool, object, secureObject, array) und optional defaultValue, allowedValues, minLength, maxLength, minValue, maxValue und metadata mit einer description. Hier muss der Name 3 bis 24 Zeichen lang sein, und location nimmt den Ort der Ressourcengruppe, wenn niemand etwas angibt.
  • Ausdrücke stehen in eckigen Klammern und in Anführungszeichen: "[parameters('location')]" liest einen Parameter, [resourceGroup().location] ruft eine Funktion auf.
  • Ressourcen haben type (Anbieter und Ressourcentyp, hier Microsoft.Storage/storageAccounts), apiVersion (die Version der REST-Schnittstelle, mit der die Ressource angelegt wird), name, meist location, und je nach Typ sku, kind und properties. dependsOn legt eine Reihenfolge fest; Ressourcen ohne Abhängigkeit werden parallel bereitgestellt. Microsoft rät: Nehmen Sie bei einer neuen Vorlage die aktuelle API-Version, und ändern Sie sie später nur, wenn Sie ein neues Merkmal brauchen. So sinkt das Risiko, dass eine neue Version das Verhalten ändert.
  • Ausgaben geben Werte zurück. Eine Ausgabe vom Typ securestring erscheint nicht im Bereitstellungsverlauf.
  • Kommentare sind in Vorlagen mit // und /* ... */ möglich. Für die Azure CLI nennt Microsoft dazu den Schalter --handle-extended-json-format, den die Referenz zu az deployment group create heute als veraltet kennzeichnet. Mehrzeilige Zeichenfolgen in Vorlagen gehen nach Microsofts Angabe nur mit Azure PowerShell oder Azure CLI, nicht über das Portal, eine DevOps-Pipeline oder die REST-Schnittstelle.

Die Grenzen aus der Dokumentation: höchstens 256 Parameter, 256 Variablen, 800 Ressourcen und 64 Ausgaben je Vorlage.