Exploración de los componentes de la plantilla

Completado

Las plantillas de Resource Manager se escriben en JSON, lo que permite expresar los datos almacenados como un objeto (como una máquina virtual) en texto.

Un documento JSON es, básicamente, una colección de pares clave-valor. Cada clave es una cadena cuyos valores pueden ser los siguientes:

  • Una cadena.
  • Un número.
  • Expresión booleana.
  • Una lista de valores.
  • Un objeto (que es una colección de otros pares clave-valor).

Una plantilla de Resource Manager puede contener secciones que se expresen mediante la notación JSON, pero no están relacionadas con el propio lenguaje JSON:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}

Vamos a revisar más detalladamente cada una de estas secciones.

Parámetros

En esta sección se especifica qué valores son configurables cuando la plantilla se ejecuta.

Por ejemplo, puede permitir que los usuarios de la plantilla establezcan un nombre de usuario, una contraseña o un nombre de dominio.

Este es un ejemplo que ilustra dos parámetros, uno relacionado con un nombre de usuario de máquina virtual (VM) y el otro con su contraseña correspondiente:

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "Username for the Virtual Machine."
    }
  },
  "adminPassword": {
    "type": "securestring",
    "metadata": {
      "description": "Password for the Virtual Machine."
    }
  }
}

Variables

En esta sección se definen los valores que se usan en toda la plantilla.

Las variables contribuyen a que las plantillas sean fáciles de mantener.

Por ejemplo, es posible definir un nombre de cuenta de almacenamiento una vez como una variable y, luego, usar esa variable en toda la plantilla.

Si el nombre de cuenta de almacenamiento cambia, solo será necesario actualizar la variable una vez.

Este es un ejemplo que muestra algunas variables que describen las características de red de una máquina virtual:

"variables": {
  "nicName": "myVMNic",
  "addressPrefix": "10.0.0.0/16",
  "subnetName": "Subnet",
  "subnetPrefix": "10.0.0.0/24",
  "publicIPAddressName": "myPublicIP",
  "virtualNetworkName": "MyVNET"
}

Functions

En esta sección se definen los procedimientos que no desea que se repitan a lo largo de la plantilla.

Al igual que las variables, las funciones contribuyen a que las plantillas sean fáciles de mantener.

En el siguiente ejemplo se crea una función que genera un nombre único para usarlo al crear los recursos que tienen requisitos de nomenclatura únicos globalmente:

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

Resources

En esta sección es donde se definen los recursos de Azure que conforman la implementación.

En el siguiente ejemplo se crea un recurso de dirección IP pública:

{
  "type": "Microsoft.Network/publicIPAddresses",
  "name": "[variables('publicIPAddressName')]",
  "location": "[parameters('location')]",
  "apiVersion": "2018-08-01",
  "properties": {
    "publicIPAllocationMethod": "Dynamic",
    "dnsSettings": {
      "domainNameLabel": "[parameters('dnsLabelPrefix')]"
    }
  }
}

Aquí, el tipo de recurso es Microsoft.Network/publicIPAddresses.

El nombre se obtiene de la sección de variables y la ubicación (o región de Azure), de la sección de parámetros.

Dado que los tipos de recursos pueden cambiar con el tiempo, apiVersion hace referencia a la versión del tipo de recurso que queremos usar.

A medida que los tipos de recursos evolucionan, podemos modificar las plantillas para que funcionen con las características más recientes.

Salidas

En esta sección se define la información que le gustaría recibir cuando se ejecute la plantilla.

Por ejemplo, es posible que desee recibir la dirección IP o el nombre de dominio completo (FQDN) de la máquina virtual, la información que no sabrá hasta que se ejecute la implementación.

Este es un ejemplo que ilustra una salida llamada hostname.

El valor de FQDN se obtiene de la configuración de dirección IP pública de la máquina virtual:

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
  }
}