Tipos de datos en plantillas de ARM

En este artículo se describen los tipos de datos admitidos en las plantillas de Azure Resource Manager (plantillas de ARM).

Tipos admitidos

Dentro de una plantilla de Resource Manager, puede usar estos tipos de datos:

  • array
  • bool
  • int
  • object
  • secureObject
  • securestring
  • string

Matrices

Las matrices comienzan con un corchete de apertura ([) y terminan con un corchete de cierre (]). Una matriz se puede declarar en una sola línea o en varias. Cada elemento está separado por una coma.

"parameters": {
  "exampleArray": {
    "type": "array",
    "defaultValue": [
      1,
      2,
      3
    ]
  }
},

"outputs": {
  "arrayOutput": {
    "type": "array",
    "value": "[variables('exampleArray')]"
  },
  "firstExampleArrayElement": {
    "type": "int",
    "value": "[parameters('exampleArray')[0]]"
  }
}

Los elementos de una matriz pueden ser del mismo tipo o de tipos diferentes.

"variables": {
  "mixedArray": [
    "[resourceGroup().name]",
    1,
    true,
    "example string"
  ]
}

"outputs": {
  "arrayOutput": {
    "type": "array",
    "value": "[variables('mixedArray')]"
  },
  "firstMixedArrayElement": {
    "type": "string",
    "value": "[variables('mixedArray')[0]]"
  }
}

Valores booleanos

Al especificar valores booleanos, use true o false. No incluya el valor entre comillas.

"parameters": {
  "exampleBool": {
    "type": "bool",
    "defaultValue": true
  }
},

Enteros

Al especificar valores enteros, no use comillas.

"parameters": {
  "exampleInt": {
    "type": "int",
    "defaultValue": 1
  }
}

En el caso de los enteros pasados como parámetros en línea, el intervalo de valores puede estar limitado por el SDK o la herramienta de línea de comandos que use para la implementación. Por ejemplo, al usar PowerShell para implementar una plantilla, los tipos de enteros pueden oscilar entre -2 147 483 648 y 2 147 483 647. Para evitar esta limitación, especifique valores enteros grandes en un archivo de parámetros. Los tipos de recursos aplican sus propios límites para las propiedades de enteros.

Objetos

Los objetos comienzan con una llave de apertura ({) y terminan con una llave de cierre (}). Cada propiedad de un objeto consta de key y value. key y value se incluyen entre comillas dobles y se separan con dos puntos (:). Cada propiedad está separada por una coma.

"parameters": {
  "exampleObject": {
    "type": "object",
    "defaultValue": {
      "name": "test name",
      "id": "123-abc",
      "isCurrent": true,
      "tier": 1
    }
  }
}

Puede obtener una propiedad de un objeto con notación de puntos.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "exampleObject": {
            "type": "object",
            "defaultValue": {
                "name": "test name",
                "id": "123-abc",
                "isCurrent": true,
                "tier": 1
            }
        }
    },
    "resources": [
    ],
    "outputs": {
        "nameFromObject": {
            "type": "string",
            "value": "[parameters('exampleObject').name]"
        }
    }
}

En JSON, un objeto es una colección desordenada de cero o más pares clave-valor. El orden puede ser diferente en función de las implementaciones. Por ejemplo, la función Bicep items() ordena los objetos por orden alfabético. En otros lugares, se puede conservar la ordenación original. Debido a este no determinismo, evite realizar suposiciones sobre el orden de las claves de objeto al escribir código, que interactúa con los parámetros y salidas de implementación.

Cadenas

Las cadenas se marcan con comillas dobles.

"parameters": {
  "exampleString": {
    "type": "string",
    "defaultValue": "test value"
  }
},

Protección de cadenas y objetos

La cadena segura usa el mismo formato que la cadena y el objeto seguro usa el mismo formato que el objeto. Cuando se establece un parámetro en una cadena segura o un objeto seguro, el valor del parámetro no se guarda en el historial de implementaciones y no se registra. Sin embargo, si establece ese valor seguro en una propiedad que no espera un valor seguro, el valor no está protegido. Por ejemplo, si establece una cadena segura en una etiqueta, ese valor se almacena como texto sin formato. Use cadenas seguras para contraseñas y secretos.

En el ejemplo siguiente se muestran dos parámetros seguros.

"parameters": {
  "password": {
    "type": "securestring"
  },
  "configValues": {
    "type": "secureObject"
  }
}

Nota

No use cadenas ni objetos seguros como valores de salida. Si incluye un valor seguro como valor de salida, el valor no se muestra en el historial de implementación y no se puede recuperar desde otra plantilla. En su lugar, guarde el valor seguro en un almacén de claves y páselo como parámetro del almacén de claves.

Pasos siguientes

Para obtener información sobre la sintaxis de las plantillas, consulte Nociones sobre la estructura y la sintaxis de las plantillas de ARM.