Modularización de plantillas

Completado

Cuando se usan plantillas de Azure Resource Manager, es mejor dividirlas en componentes individuales para modularlas.

Las plantillas vinculadas son la metodología principal que se debe usar para hacerlo.

Permite dividir la solución en componentes de destino y reutilizar esos elementos en distintas implementaciones.

Plantilla vinculada

Para vincular una plantilla a otra, agregue un recurso de implementación a la plantilla principal.

"resources": [
  {
      "apiVersion": "2017-05-10",
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "properties": {
          "mode": "Incremental",
          <link-to-external-template>
      }
  }
]


Plantilla anidada

También puede anidar una plantilla dentro de la plantilla principal, usar la propiedad de plantilla y especificar la sintaxis de la plantilla.

Ayuda en cierto modo a la modularización, pero dividir los distintos componentes puede dar lugar a un archivo principal grande, ya que todos los elementos están dentro de ese único archivo.

"resources": [
  {
    "apiVersion": "2017-05-10",
    "name": "nestedTemplate",
    "type": "Microsoft.Resources/deployments",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageName')]",
            "apiVersion": "2015-06-15",
            "location": "West US",
            "properties": {
              "accountType": "Standard_LRS"
            }
          }
        ]
      }
    }
  }
]

Nota:

En el caso de las plantillas anidadas, no se pueden usar parámetros ni variables definidos dentro de la propia plantilla anidada. Solo puede usar parámetros y variables de la plantilla principal.

Las propiedades que proporcione para el recurso de implementación variarán en función de si se vincula a una plantilla externa o si se anida una plantilla insertada dentro de la plantilla principal.

Modos de implementación

Al implementar los recursos mediante plantillas, tiene tres opciones:

  • Validación: esta opción compila las plantillas, valida la implementación y garantiza que la plantilla sea funcional (por ejemplo, sin dependencias circulares) y que la sintaxis sea correcta.
  • Modo incremental (predeterminado): esta opción solo implementa lo que se define en la plantilla. No quita ni modifica los recursos que no están definidos en la plantilla. Por ejemplo, si ha implementado una máquina virtual a través de una plantilla y después ha cambiado el nombre de la máquina virtual en la plantilla, la primera máquina virtual implementada permanecerá una vez que se vuelva a ejecutar la plantilla. Es el modo predeterminado.
  • Modo completo: Resource Manager elimina los recursos del grupo de recursos, pero no se especifica en la plantilla. Por ejemplo, solo los recursos definidos en la plantilla estarán presentes en el grupo de recursos después de implementar la plantilla. Se recomienda usar este modo en los entornos de producción siempre que sea posible para intentar lograr la idempotencia en las plantillas de implementación.

Al implementar con PowerShell, para establecer el modo de implementación, use el parámetro Mode tal como se indica anteriormente en el ejemplo de plantilla anidada de este tema.

Nota:

Se recomienda usar un grupo de recursos por implementación.

Nota:

En las plantillas vinculadas y anidadas, solo puede usar el modo de implementación incremental.

Plantilla externa y parámetros externos

Para vincular a una plantilla externa y a un archivo de parámetros, utilice templateLink y parametersLink.

Al vincular a una plantilla, asegúrese de que el servicio de Resource Manager puede acceder a ella.

Por ejemplo, no puede especificar un archivo local o un archivo que solo esté disponible en la red local.

Por lo tanto, solo puede proporcionar un valor de identificador uniforme de recursos (URI) que incluya HTTP o HTTPS.

Una opción es colocar la plantilla vinculada en una cuenta de almacenamiento y usar el URI para ese elemento.

También puede proporcionar el parámetro insertado. Pero no puede usar parámetros insertados y un vínculo a un archivo de parámetros.

En el ejemplo siguiente se usa el parámetro templateLink:

  "resources": [
    {
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
          "mode": "Incremental",
          "templateLink": {
              "uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
          },
          "parameters": {
              "storageAccountName":{"value": "[variables('storageAccountName')]"},
              "location":{"value": "[parameters('location')]"}
          }
      }
    },


Protección de una plantilla externa

Aunque la plantilla vinculada debe estar disponible externamente, no es necesario que esté disponible para el público.

En su lugar, puede agregar la plantilla a una cuenta de almacenamiento privada accesible solo para el propietario de la cuenta de almacenamiento y crear tokens de firma de acceso compartido (SAS) para habilitar el acceso durante la implementación.

Ese token SAS se agrega al identificador URI para la plantilla vinculada.

Aunque el token se pasa como una cadena segura, el URI de la plantilla vinculada, incluido el token de SAS, se registra en las operaciones de implementación.

Para limitar la exposición, también puede establecer una fecha de expiración para el token.