Dichiarazione di risorsa nei modelli di Resource Manager

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

languageVersion 2.0 rende un elenco di miglioramenti ai modelli JSON arm, 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 usare Bicep perché offre le stesse funzionalità dei modelli arm e la sintassi è più facile da usare. Per altre informazioni, vedere Dichiarazione di risorsa.

Sono limitate a 800 risorse in un modello. Per altre 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 illustra come impostare il tipo di risorsa e la versione dell'API per un account di archiviazione. L'esempio non mostra la dichiarazione di risorsa 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 riferimento al modello. Nell'esempio seguente viene aggiunto un parametro location 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 Resource Manager.

Impostare i tag

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

Impostare 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 riferimento al 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 Bicep ogni 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 JSON arm, aggiungere languageVersion con la versione 2.0e modificare la definizione della risorsa 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 fanno distinzione 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 di risorsa, è 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 devono definire proprietà diverse da type, apiVersione name.

Passaggi successivi