Ressourcendeklaration in ARM-Vorlagen

Um eine Ressource durch eine Azure Resource Manager-Vorlage (ARM-Vorlage) bereitzustellen, fügen Sie eine Ressourcendeklaration hinzu. Verwenden Sie das Array resources in einer JSON-Vorlage.

languageVersion 2.0 erstellt eine Liste von Verbesserungen an ARM-JSON-Vorlagen, z. B. das Ändern der Ressourcendeklaration von einem Array in ein Objekt. Die meisten in diesem Artikel gezeigten Beispiele verwenden weiterhin resources-Array. Informationen zu languageVersion 2.0 finden Sie unter Verwenden eines symbolischen Namens.

Hinweis

In der aktuellen Version der Azure Resource Manager Tools-Erweiterung für Visual Studio Code werden die in languageVersion 2.0 vorgenommenen Verbesserungen nicht erkannt.

Tipp

Wir empfehlen Bicep, weil es dieselben Funktionen wie ARM-Vorlagen bietet und die Syntax einfacher zu verwenden ist. Weitere Informationen finden Sie unter Deklaration zu Ressourcen.

Die Anzahl der Ressourcen in einer Vorlage ist auf 800 beschränkt. Weitere Informationen finden Sie unter Vorlagengrenzwerte.

Festlegen von Ressourcentyp und Version

Wenn Sie Ihrer Vorlage eine Ressource hinzufügen, legen Sie zunächst den Ressourcentyp und die API-Version fest. Diese Werte bestimmen die anderen Eigenschaften, die für die Ressource verfügbar sind.

Im folgenden Beispiel wird gezeigt, wie der Ressourcentyp und die API-Version für ein Speicherkonto festgelegt werden. Das Beispiel zeigt nicht die vollständige Ressourcendeklaration.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

Festlegen des Ressourcennamens

Jede Ressource besitzt einen Namen. Achten Sie beim Festlegen des Ressourcennamens auf die Regeln und Einschränkungen für Ressourcennamen.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

Legen Sie einen Speicherort fest

Viele Ressourcen erfordern einen Speicherort. Sie können mittels IntelliSense oder über eine Vorlagenreferenz ermitteln, ob die Ressource einen Speicherort benötigt. Im folgenden Beispiel wird ein Speicherortparameter hinzugefügt, der für das Speicherkonto verwendet wird.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

Weitere Informationen finden Sie unter Festlegen des Ressourcenspeicherorts in einer ARM-Vorlage.

Festlegen von Tags

Sie können während der Bereitstellung Tags auf eine Ressource anwenden. Tags helfen Ihnen dabei, Ihre bereitgestellten Ressourcen logisch zu organisieren. Beispiele für die verschiedenen Methoden zum Angeben der Tags finden Sie unter ARM-Vorlagen-Tags.

Festlegen ressourcenspezifischer Eigenschaften

Die vorstehenden Eigenschaften sind für die meisten Ressourcentypen generisch. Nachdem Sie diese Werte festgelegt haben, müssen Sie die Eigenschaften festlegen, die für den Ressourcentyp, den Sie bereitstellen, spezifisch sind.

Verwenden Sie IntelliSense oder eine Vorlagenreferenz, um zu bestimmen, welche Eigenschaften verfügbar sind und welche erforderlich sind. Im folgenden Beispiel werden die restlichen Eigenschaften für ein Speicherkonto festgelegt.

{
  "$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]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Verwenden des symbolischen Namens

In Bicep hat jede Ressourcendefinition einen symbolischen Namen. Der symbolische Name wird verwendet, um aus anderen Teilen der Bicep-Datei auf die Ressource zu verweisen. Um symbolische Namen in ARM-JSON-Vorlagen zu unterstützen, fügen Sie languageVersion mit der Version 2.0 hinzu, und ändern Sie die Ressourcendefinition von einem Array in ein Objekt. Wenn languageVersion für eine Vorlage angegeben wird, muss der symbolische Name für Ressourcen auf Stammebene angegeben werden. Zum Beispiel:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

Der vorherige JSON-Code kann in den folgenden JSON-Code geschrieben werden:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

Bei symbolischen Namen wird zwischen Groß- und Kleinschreibung unterschieden. Die zulässigen Zeichen für symbolische Namen sind Buchstaben, Zahlen und _. Symbolische Namen müssen in einer Vorlage eindeutig sein, können sich aber mit Variablennamen, Parameternamen und Ausgabenamen in einer Vorlage überlappen. Im folgenden Beispiel hat der symbolische Name der Speicherkontoressource denselben Namen wie die Ausgabe.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

Die Verweisfunktion kann den symbolischen Namen einer Ressource verwenden, wie im vorherigen Beispiel gezeigt. Die Verweisfunktion kann beispielsweise den Namen einer Ressource nicht mehr verwenden, reference(parameters('storageAccountName')) ist nicht zulässig.

Wenn die Bereitstellungsressource in einer Bereitstellung mit symbolischem Namen verwendet wird, verwenden Sie apiVersion 2020-09-01 oder höher.

Deklarieren vorhandener Ressourcen

Mit languageVersion 2.0 und mit dem symbolischen Namen für die Ressourcendeklaration können Sie vorhandene Ressourcen deklarieren. Eine Ressourceneigenschaft der obersten Ebene von "existing": true bewirkt, dass ARM eine Ressource liest und nicht bereitgestellt wird, wie im folgenden Beispiel gezeigt:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

Vorhandene Ressourcen müssen keine anderen Eigenschaften als type, apiVersion und name definieren.

Nächste Schritte