Exploración de la estructura de plantillas de Azure Resource Manager

Completado

En esta unidad, aprenderá a usar las plantillas de Azure Resource Manager (plantillas de ARM) para implementar la infraestructura como código. Examinará las secciones de una plantilla de ARM, aprenderá a implementarla en Azure y profundizará en los detalles de la sección de recursos de la plantilla.

¿Qué es la infraestructura como código?

La infraestructura como código le permite describir, mediante código, la infraestructura que necesita para la aplicación.

Con la infraestructura como código, puede mantener en un repositorio de código central el código de la aplicación y todo lo que necesita para implementarla. Las ventajas de la infraestructura como código son las siguientes:

  • Configuraciones coherentes
  • Escalabilidad mejorada
  • Implementaciones más rápidas
  • Mejor rastreabilidad

En este vídeo se explica la infraestructura como código:

¿Qué es una plantilla de ARM?

Las plantillas de ARM son archivos de notación de objetos JavaScript (JSON) que definen la infraestructura y la configuración de la implementación. La plantilla usa una sintaxis declarativa. La sintaxis declarativa es una forma de crear la estructura y los elementos que describen el aspecto que tendrán los recursos sin describir el flujo de control. La sintaxis declarativa es diferente de la sintaxis imperativa, en la que se usan comandos que el equipo debe ejecutar. El scripting imperativo se centra en especificar cada paso de la implementación de los recursos.

Las plantillas de ARM le permiten declarar lo que piensa implementar sin tener que escribir la secuencia de comandos de programación para crearlo. En una plantilla de ARM, se especifican los recursos y las propiedades de esos recursos. Después, Azure Resource Manager usa esa información para implementar los recursos de forma organizada y coherente.

Ventajas del uso de plantillas de ARM

Las plantillas de ARM permiten automatizar las implementaciones y usar el procedimiento de infraestructura como código (IaC). El código de plantilla se convierte en parte de los proyectos de infraestructura y desarrollo. Como sucede con el código de la aplicación, puede almacenar los archivos IaC en un repositorio de origen y crear una versión de él.

Las plantillas de ARM son idempotentes, lo que significa que puede implementar la misma plantilla muchas veces y obtener los mismos tipos de recursos en el mismo estado.

Resource Manager organiza la implementación de los recursos para que se creen en el orden correcto. Siempre que sea posible, los recursos también se crearán en paralelo, por lo que las implementaciones de plantillas de ARM finalizan más rápido que las implementaciones con scripts.

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process scripts.

Resource Manager también tiene validación integrada. Comprueba la plantilla antes de iniciar la implementación para asegurarse de que la implementación se realizará correctamente.

Si las implementaciones se vuelven más complejas, puede dividir las plantillas de ARM en componentes más pequeños y reutilizables. Puede vincular estas plantillas más pequeñas juntas en el momento de la implementación. También puede anidar plantillas dentro de otras.

En Azure Portal, puede revisar el historial de implementación y obtener información sobre el estado de la implementación. El portal muestra los valores para todos los parámetros y salidas.

También puede integrar las plantillas de ARM en herramientas de integración continua e implementación continua (CI/CD), como Azure Pipelines, que permite automatizar las canalizaciones de versión para actualizaciones de aplicaciones e infraestructura rápidas y confiables. Mediante Azure DevOps y las tareas de plantilla de ARM, puede compilar e implementar los proyectos de forma continuada.

Estructura de los archivos de plantilla de ARM

Al escribir una plantilla de ARM, debe comprender todos los elementos que la componen y lo que hacen. Los archivos de plantilla de ARM se componen de los elementos siguientes:

Elemento Descripción
schema una sección obligatoria en la que se define la ubicación del archivo de esquema JSON que describe la estructura de los datos JSON. El número de versión que use dependerá del ámbito de la implementación y del editor de JSON.
contentVersion una sección obligatoria en la que se define la versión de la plantilla (por ejemplo, 1.0.0.0). Puede usar este valor para documentar los cambios importantes en la plantilla y asegurarse de que implementa la plantilla correcta.
apiProfile una sección opcional en la que se define una colección de versiones de API para los tipos de recurso. Puede usar este valor para evitar tener que especificar las versiones de API para cada recurso de la plantilla.
parameters una sección opcional en la que se definen los valores que se proporcionan durante la implementación. Estos valores se pueden proporcionar mediante un archivo de parámetros, con parámetros de la línea de comandos o en Azure Portal.
variables una sección opcional en la que se definen los valores que se usan para simplificar las expresiones de lenguaje de plantilla.
functions una sección opcional en la que se pueden definir funciones definidas por el usuario que están disponibles dentro de la plantilla. Las funciones definidas por el usuario pueden simplificar la plantilla cuando se usan repetidamente expresiones complicadas en la plantilla.
resources una sección obligatoria en la que se definen los elementos reales que quiere implementar o actualizar en un grupo de recursos o una suscripción.
output una sección opcional en la que se especifican los valores que se devolverán al final de la implementación.

Implementación de una plantilla de ARM en Azure

Puede implementar una plantilla de ARM en Azure de una de las siguientes maneras:

  • Implementación de una plantilla local
  • Implementación de una plantilla vinculada
  • Implementación en una canalización de implementación continua

Este módulo se centra en la implementación de una plantilla de ARM local. En módulos Learn futuros obtendrá información sobre cómo implementar una infraestructura más complicada y realizar la integración con Azure Pipelines.

Para implementar una plantilla local, es necesario tener Azure PowerShell o la CLI de Azure instalado localmente.

En primer lugar, inicie sesión en Azure con la CLI de Azure o Azure PowerShell.

az login

Después, defina el grupo de recursos. Puede usar un grupo de recursos ya definido o crear uno nuevo con el siguiente comando. Puede obtener los valores de ubicación disponibles en: az account list-locations (la CLI) o Get-AzLocation (PowerShell). Puede configurar la ubicación predeterminada mediante az configure --defaults location=<location>.

az group create \
  --name {name of your resource group} \
  --location "{location}"

Para iniciar una implementación de plantilla en el grupo de recursos, use el comando az deployment group create de la CLI de Azure o el comando New-AzResourceGroupDeployment de Azure PowerShell.

Sugerencia

La diferencia entre az deployment group create y az group deployment create es que az group deployment create es un comando antiguo que va a quedar en desuso y se reemplazará por az deployment group create. Por lo tanto, se recomienda usar az deployment group create para implementar recursos en el ámbito del grupo de recursos.

Ambos comandos requieren el grupo de recursos, la región y el nombre de la implementación para que pueda identificarla fácilmente en el historial de implementación. Para mayor comodidad, los ejercicios crean una variable que almacena la ruta de acceso al archivo de plantilla. Esta variable facilita la ejecución de los comandos de implementación, ya que no es necesario volver a escribir la ruta de acceso cada vez que se implementa. Este es un ejemplo:

Para ejecutar este comando de implementación, debe tener la última versión de la CLI de Azure.

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

Las plantillas vinculadas se usan para implementar soluciones complejas. Puede dividir una plantilla en muchas e implementarlas a través de una plantilla principal. Cuando se implementa la plantilla principal, se desencadena la implementación de la plantilla vinculada. Puede almacenar y proteger la plantilla vinculada mediante un token de SAS.

Una canalización de CI/CD automatiza la creación e implementación de proyectos de desarrollo, lo que incluye proyectos de plantilla de ARM. Las dos canalizaciones más comunes que se usan para la implementación de plantillas son Azure Pipelines y Acciones de GitHub.

En otros módulos se describe más información sobre estos dos tipos de implementación.

Adición de recursos a la plantilla

Para agregar un recurso a la plantilla, tiene que conocer el proveedor de recursos y sus tipos de recursos. La sintaxis de esta combinación tiene el formato {proveedor_de_recursos}/{tipo_de_recurso}. Por ejemplo, para agregar un recurso de cuenta de almacenamiento a la plantilla, necesitará el proveedor de recursos Microsoft.Storage. Uno de los tipos de este proveedor es storageAccount. Por tanto, el tipo de recurso se mostrará como Microsoft.Storage/storageAccounts. Puede usar una lista de proveedores de recursos para servicios de Azure para encontrar los proveedores que necesita.

Después de definir el proveedor y el tipo de recurso, debe comprender las propiedades de cada tipo de recurso que desee usar. Par obtener más información, consulte Definición de recursos en plantillas de Azure Resource Manager. Vea la lista de la columna izquierda para buscar el recurso. Observe que las propiedades se ordenan por versión de API.

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

Este es un ejemplo de algunas de las propiedades enumeradas en la página Cuentas de almacenamiento:

Screenshot of a Microsoft documentation page showing some of the storage account properties.

Para este ejemplo de almacenamiento, la plantilla podría tener el aspecto siguiente:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}