Resourcedeclaratie in ARM-sjablonen

Als u een resource wilt implementeren via een AZURE Resource Manager-sjabloon (ARM-sjabloon), voegt u een resourcedeclaratie toe. Gebruik de resources matrix in een JSON-sjabloon.

languageVersion 2.0 maakt een lijst met verbeteringen in ARM JSON-sjablonen, zoals het wijzigen van de declaratie van resources van een matrix in een object. De meeste voorbeelden die in dit artikel worden weergegeven, gebruiken resources nog steeds matrix. Zie Symbolische naam gebruiken voor specifieke informatie over languageVersion 2.0.

Notitie

De huidige versie van de Azure Resource Manager Tools-extensie voor Visual Studio Code herkent de verbeteringen die zijn aangebracht in languageVersion 2.0 niet.

Tip

We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie resourcedeclaratie voor meer informatie.

U bent beperkt tot 800 resources in een sjabloon. Zie Sjabloonlimieten voor meer informatie.

Resourcetype en -versie instellen

Wanneer u een resource aan uw sjabloon toevoegt, begint u met het instellen van het resourcetype en de API-versie. Deze waarden bepalen de andere eigenschappen die beschikbaar zijn voor de resource.

In het volgende voorbeeld ziet u hoe u het resourcetype en de API-versie voor een opslagaccount instelt. In het voorbeeld wordt de volledige resourcedeclaratie niet weergegeven.

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

Resourcenaam instellen

Elke resource heeft een naam. Let bij het instellen van de resourcenaam op de regels en beperkingen voor resourcenamen.

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

Locatie instellen

Voor veel resources is een locatie vereist. U kunt bepalen of de resource een locatie nodig heeft via intellisense of sjabloonreferenties. In het volgende voorbeeld wordt een locatieparameter toegevoegd die wordt gebruikt voor het opslagaccount.

"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')]",
    ...
  }
]

Zie Resourcelocatie instellen in ARM-sjabloon voor meer informatie.

Tags instellen

U kunt tags toepassen op een resource tijdens de implementatie. Met tags kunt u uw geïmplementeerde resources logisch organiseren. Zie ARM-sjabloontags voor voorbeelden van de verschillende manieren waarop u de tags kunt opgeven.

Resourcespecifieke eigenschappen instellen

De voorgaande eigenschappen zijn algemeen voor de meeste resourcetypen. Nadat u deze waarden hebt ingesteld, moet u de eigenschappen instellen die specifiek zijn voor het resourcetype dat u implementeert.

Gebruik intellisense of sjabloonreferenties om te bepalen welke eigenschappen beschikbaar zijn en welke zijn vereist. In het volgende voorbeeld worden de resterende eigenschappen voor een opslagaccount ingesteld.

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

Symbolische naam gebruiken

In Bicep heeft elke resourcedefinitie een symbolische naam. De symbolische naam wordt gebruikt om te verwijzen naar de resource uit de andere onderdelen van uw Bicep-bestand. Als u symbolische naam in ARM JSON-sjablonen wilt ondersteunen, voegt languageVersion u deze toe met de versie 2.0en wijzigt u de resourcedefinitie van een matrix in een object. Wanneer languageVersion deze is opgegeven voor een sjabloon, moet de symbolische naam worden opgegeven voor resources op hoofdniveau. Voorbeeld:

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

De voorgaande JSON kan in de volgende JSON worden geschreven:

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

Symbolische namen zijn hoofdlettergevoelig. De toegestane tekens voor symbolische namen zijn letters, cijfers en _. Symbolische namen moeten uniek zijn in een sjabloon, maar kunnen overlappen met variabelenamen, parameternamen en uitvoernamen in een sjabloon. In het volgende voorbeeld heeft de symbolische naam van de opslagaccountresource dezelfde naam als de uitvoer.

{
  "$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')]"
    }
  }
}

De referentiefunctie kan de symbolische naam van een resource gebruiken, zoals wordt weergegeven in het vorige voorbeeld. De verwijzingsfunctie kan bijvoorbeeld reference(parameters('storageAccountName')) de naam van een resource niet meer gebruiken.

Als de implementatieresource wordt gebruikt in een symbolische implementatie, gebruikt u apiVersion 2020-09-01 of hoger.

Bestaande resources declareren

Met languageVersion 2.0 een symbolische naam voor resourcedeclaratie kunt u bestaande resources declareren. Als een resourceeigenschap op het hoogste niveau wordt gebruikt, wordt ARM gelezen in plaats van "existing": true een resource te implementeren, zoals wordt weergegeven in het volgende voorbeeld:

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

Bestaande resources hoeven geen andere eigenschappen te definiëren dan type, apiVersionen name.

Volgende stappen