Dichiarazione delle risorse nei modelli di ARM

Per distribuire una risorsa tramite un modello di Azure Resource Manager (modello di ARM), aggiungere una dichiarazione di risorsa. Usare la matrice resources in un modello JSON.

languageVersion 2.0 rende un elenco di miglioramenti ai modelli di ARM JSON, ad esempio la modifica della dichiarazione delle risorse da una matrice a un oggetto . La maggior parte degli esempi illustrati in questo articolo usa resources ancora la matrice. Per informazioni specifiche su languageVersion 2.0, vedere Usare il nome simbolico.

Nota

La versione corrente dell'estensione Strumenti di Azure Resource Manager per Visual Studio Code non riconosce i miglioramenti apportati in languageVersion 2.0.

Suggerimento

È consigliabile Bicep perché offre le stesse funzionalità dei modelli di ARM e la sintassi è più semplice da usare. Per ulteriori informazioni, vedere dichiarazione delle risorse.

È previsto un limite di 800 risorse per modello. Per ulteriori informazioni, vedere Limiti dei modelli.

Impostare il tipo di risorsa e la versione

Quando si aggiunge una risorsa al modello, iniziare impostando il tipo di risorsa e la versione dell'API. Questi valori determinano le altre proprietà disponibili per la risorsa.

L'esempio seguente mostra come impostare il tipo di risorsa e la versione dell'API per un account di archiviazione. L'esempio non mostra la dichiarazione delle risorse completa.

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

Impostare il nome della risorsa

Ogni risorsa ha un nome. Quando si imposta il nome della risorsa, prestare attenzione alle regole e alle restrizioni per i nomi delle risorse.

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

Impostare la posizione

Molte risorse richiedono una posizione. È possibile determinare se la risorsa necessita di una posizione tramite intellisense o informazioni di riferimento sul modello. Nell'esempio seguente viene aggiunto un parametro posizione che è usato per l'account di archiviazione.

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

Per altre informazioni, vedere Impostare la posizione delle risorse nel modello di ARM.

Impostare i tag

È possibile applicare tag a una risorsa durante la distribuzione. I tag consentono di organizzare in modo logico le risorse distribuite. Per esempi dei diversi modi in cui è possibile specificare i tag, vedere Tag dei modelli di ARM.

Impostare le proprietà specifiche della risorsa

Le proprietà precedenti sono generiche per la maggior parte dei tipi di risorse. Dopo aver impostato questi valori, è necessario impostare le proprietà specifiche del tipo di risorsa che si sta distribuendo.

Usare intellisense o informazioni di riferimento sul modello per determinare quali proprietà sono disponibili e quali sono necessarie. Nell'esempio seguente vengono impostate le proprietà rimanenti per un account di archiviazione.

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

Usare il nome simbolico

In Bicepogni definizione di risorsa ha un nome simbolico. Il nome simbolico viene usato per fare riferimento alla risorsa dalle altre parti del file Bicep. Per supportare il nome simbolico nei modelli di ARM JSON, aggiungere languageVersion con la versione 2.0e modificare la definizione delle risorse da una matrice a un oggetto . Quando languageVersion viene specificato per un modello, è necessario specificare il nome simbolico per le risorse a livello radice. Ad esempio:

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

Il codice JSON precedente può essere scritto nel codice JSON seguente:

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

I nomi simbolici distinguono tra maiuscole e minuscole. I caratteri consentiti per i nomi simbolici sono lettere, numeri e _. I nomi simbolici devono essere univoci in un modello, ma possono sovrapporsi a nomi di variabili, nomi di parametri e nomi di output in un modello. Nell'esempio seguente il nome simbolico della risorsa dell'account di archiviazione ha lo stesso nome dell'output.

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

La funzione di riferimento può usare il nome simbolico di una risorsa, come illustrato nell'esempio precedente. La funzione di riferimento non può più usare il nome di una risorsa, reference(parameters('storageAccountName')) ad esempio non è consentita.

Se la risorsa Distribuzioni viene usata in una distribuzione con nome simbolico, usare apiVersion 2020-09-01 o versione successiva.

Dichiarare le risorse esistenti

Con languageVersion 2.0 e usando il nome simbolico per la dichiarazione delle risorse, è possibile dichiarare le risorse esistenti. Una proprietà di risorsa di primo livello di "existing": true fa sì che ARM legga anziché distribuire una risorsa, come illustrato nell'esempio seguente:

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

Le risorse esistenti non necessitano di definire proprietà diverse da type, apiVersione name.

Passaggi successivi