Declaración de recursos en plantillas de ARM

Para implementar un recurso a través de una plantilla de Azure Resource Manager (plantilla de ARM), agregue una declaración de recursos. Use la matriz resources en una plantilla JSON.

languageVersion 2.0 realiza una lista de mejoras en las plantillas JSON de ARM, como cambiar la declaración de recursos de una matriz a un objeto. La mayoría de los ejemplos que se muestran en este artículo siguen usando resources la matriz. Para obtener información específica de languageVersion 2.0, vea Usar nombre simbólico.

Nota:

La versión actual de la extensión Herramientas de Azure Resource Manager para Visual Studio Code no reconoce las mejoras realizadas en languageVersion 2.0.

Sugerencia

Se recomienda Bicep porque ofrece las mismas funcionalidades que las plantillas de ARM y la sintaxis es más fácil de usar. Para obtener más información, consulte la declaración de recursos.

Está limitado a 800 recursos en una plantilla. Para obtener más información, consulte Límites de plantilla.

Definición del tipo de recurso y versión

Al agregar un recurso a la plantilla, empiece por establecer el tipo de recurso y la versión de la API. Estos valores determinan las demás propiedades que están disponibles para el recurso.

En el ejemplo siguiente se muestra cómo establecer el tipo de recurso y la versión de la API para una cuenta de almacenamiento. En el ejemplo no se muestra la declaración de recursos completa.

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

Definición del nombre del recurso

Cada recurso tiene un nombre. Al establecer el nombre del recurso, preste atención a las reglas y restricciones de los nombres de los recursos.

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

Establezca una ubicación

Muchos recursos requieren una ubicación. Puede determinar si el recurso necesita una ubicación a través de IntelliSense o de la referencia de plantillas. En el ejemplo siguiente se agrega un parámetro de ubicación que se usa para la cuenta de almacenamiento.

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

Para obtener más información, consulte Establecimiento de la ubicación del recurso en la plantilla de Resource Manager.

Definición de etiquetas

Puede aplicar etiquetas a un recurso durante la implementación. Las etiquetas le ayudan a organizar de forma lógica los recursos implementados. Para ver ejemplos de las diferentes maneras de especificar las etiquetas, consulte Etiquetas de plantillas de ARM.

Definición de propiedades específicas de recursos

Las propiedades anteriores son genéricas para la mayoría de los tipos de recursos. Después de establecer esos valores, tiene que establecer las propiedades que son específicas del tipo de recurso que va a implementar.

Use IntelliSense o la referencia de plantillas para decidir qué propiedades están disponibles y cuáles son obligatorias. En el ejemplo siguiente se establecen las propiedades restantes para una cuenta de almacenamiento.

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

Usar el nombre simbólico

En Bicep, cada definición de recurso tiene un nombre simbólico. El nombre simbólico se usa para hacer referencia al recurso de las demás partes del archivo de Bicep. Para admitir el nombre simbólico en plantillas JSON de ARM, agregue languageVersion con la versión 2.0 o una versión más reciente, y cambie la definición de recurso de una matriz a un objeto. Cuando languageVersion se especifica para una plantilla, se debe especificar el nombre simbólico para los recursos de nivel raíz. Por ejemplo:

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

El JSON anterior se puede escribir en el siguiente JSON:

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

Los nombres simbólicos distinguen mayúsculas de minúsculas. Los caracteres permitidos para los nombres simbólicos son letras, números y _. Los nombres simbólicos deben ser únicos en una plantilla, pero pueden superponerse con nombres de variable, nombres de parámetros y nombres de salida en una plantilla. En el ejemplo siguiente, el nombre simbólico del recurso de la cuenta de almacenamiento tiene el mismo nombre que la salida.

{
  "$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 función de referencia puede usar el nombre simbólico de un recurso, como se muestra en el ejemplo anterior. La función de referencia ya no puede usar el nombre de un recurso, por ejemplo, reference(parameters('storageAccountName')) no se permite.

Si el recurso Implementaciones se usa en una implementación de nombre simbólico, use la apiVersion 2020-09-01 o posterior.

Declaración de recursos existentes

Con languageVersion 2.0 y con el nombre simbólico para la declaración de recursos, puede declarar los recursos existentes. Una propiedad de recurso de nivel superior de "existing": true hace que ARM lea en lugar de implementar un recurso como se muestra en el ejemplo siguiente:

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

Los recursos existentes no necesitan definir ninguna propiedad distinta de type, apiVersion y name.

Pasos siguientes