Modos de implementación de Azure Resource Manager

Al implementar los recursos, debe especificar si la implementación es una actualización incremental o una actualización completa. La diferencia entre estos dos modos es la forma en que Resource Manager controla los recursos existentes en el grupo de recursos que no están en la plantilla.

En ambos modos, Resource Manager intenta crear todos los recursos especificados en la plantilla. Si el recurso ya existe en el grupo de recursos y su configuración es igual, no se realizará ninguna operación en ese recurso. Si cambia los valores de propiedad de un recurso, el recurso se actualiza con esos nuevos valores. Si intenta actualizar la ubicación o el tipo de un recurso existente, la implementación produce un error. En su lugar, implemente un nuevo recurso con la ubicación o escriba la que necesite.

El modo predeterminado es el incremental.

Modo completo

En el modo completo, Resource Manager elimina los recursos que existen en el grupo de recursos pero que no se especifican en la plantilla.

Nota:

Use siempre la operación what-if antes de implementar una plantilla en el modo completo. What-if muestra qué recursos se crearán, eliminarán o modificarán. Use what-if para evitar la eliminación accidental de recursos.

Si la plantilla incluye un recurso que no se ha implementado porque la condición se evalúa como false, el resultado depende de la versión de API REST que use para implementar la plantilla. Si usa una versión anterior a 2019-05-10, el recurso no se elimina. Con 2019-05-10 o posterior, el recurso se elimina. Las versiones más recientes de Azure PowerShell y la CLI de Azure eliminan el recurso.

Tenga cuidado al usar el modo completo con bucles de copia. Se eliminan todos los recursos que no se especifican en la plantilla después de resolver el bucle de copia.

Si implementa en más de un grupo de recursos en una plantilla, se pueden eliminar los recursos del grupo de recursos especificado en la operación de implementación. Los recursos de los grupos de recursos secundarios no se eliminarán.

Hay algunas diferencias en la forma en que los diferentes tipos de recursos controlan las eliminaciones en modo completo. Los recursos principales se eliminan automáticamente cuando no están en una plantilla implementada en modo completo. Por el contrario, algunos recursos secundarios no se eliminan automáticamente cuando no están en la plantilla. A pesar de ello, estos recursos secundarios sí se eliminan si también se elimina el recurso principal.

Por ejemplo, si el grupo de recursos contiene una zona DNS (tipo de recurso Microsoft.Network/dnsZones) y un registro CNAME (tipo de recurso Microsoft.Network/dnsZones/CNAME), la zona DNS es el recurso primario del registro CNAME. Si la implementación se realiza en modo completo y no se incluye la zona DNS en la plantilla, se eliminará tanto la zona DNS como el registro CNAME. Si se incluye la zona DNS en la plantilla, pero no se incluye el registro CNAME, el registro CNAME no se eliminará.

Para ver una lista del modo en que los diferentes tipos de recursos administran las eliminaciones, consulte Eliminación de recursos de Azure en implementaciones en modo completo.

Si el grupo de recursos está bloqueado, el modo completo no elimina los recursos.

Nota:

Solo las plantillas de nivel de raíz admiten el modo de implementación completa. En cuanto a plantillas vinculadas o anidadas , debe usar el modo incremental.

Las implementaciones de nivel de suscripción no son compatibles con el modo completo.

Actualmente, el portal no admite el modo completo.

Modo incremental

En el modo incremental, Resource Manager deja sin modificar los recursos que existen en el grupo de recursos pero que no se especifican en la plantilla. Los recursos de la plantilla se agregan al grupo de recursos.

Importante

Al volver a implementar un recurso existente en el modo incremental, se aplican todas las propiedades de nuevo. Las propiedades no se agregan de manera incremental. Suele pensarse erróneamente que las propiedades que no se especifican en la plantilla se mantienen sin cambios. Si no se especifican determinadas propiedades, Resource Manager interpreta la implementación como que sobrescribe esos valores. Las propiedades que no se incluyen en la plantilla se restablecen a los valores predeterminados. Especifique todos los valores no predeterminados del recurso, no solo los que vaya a actualizar. La definición del recurso en la plantilla siempre contiene el estado final del recurso. No puede representar una actualización parcial de un recurso existente.

Advertencia

En raras ocasiones, puede especificar propiedades en un recurso o en uno de sus recursos secundarios. Dos ejemplos comunes son subredes en redes virtuales y valores de configuración de sitio para aplicaciones web. En estos casos, debe controlar cuidadosamente las actualizaciones incrementales.

En el caso de las subredes, especifique los valores a través de la propiedad subnets en el recurso Microsoft.Network/virtualNetworks. No defina los valores mediante el recurso secundario Microsoft.Network/virtualNetworks/subnets. Siempre que las subredes estén definidas en la red virtual, puede volver a implementar la red virtual y no perder las subredes.

En el caso de los valores de configuración del sitio, los valores se implementan en el tipo de recurso secundario Microsoft.Web/sites/config. Si vuelve a implementar la aplicación web y especifica un objeto vacío para los valores de configuración del sitio, el recurso secundario no se actualiza. Sin embargo, si proporciona nuevos valores de configuración de sitio, se actualiza el tipo de recurso secundario.

Resultado de ejemplo

Para ilustrar la diferencia entre el modo incremental y el completo, considere el escenario siguiente.

El grupo de recursos contiene:

  • Recurso A
  • Recurso B
  • Recurso C

La plantilla contiene:

  • Recurso A
  • Recurso B
  • Recurso D

Cuando se implementa en modo incremental, el grupo de recursos contiene:

  • Recurso A
  • Recurso B
  • Recurso C
  • Recurso D

Cuando se implementa en modo completo, se elimina el recurso C. El grupo de recursos contiene:

  • Recurso A
  • Recurso B
  • Recurso D

Establecimiento del modo de implementación

Para establecer el modo de implementación al implementar con PowerShell, use el parámetro Mode.

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

Para establecer el modo de implementación al implementar con la CLI de Azure, use el parámetro mode.

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

En el siguiente ejemplo se muestra un conjunto de plantillas vinculadas al modo de implementación incremental:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

Pasos siguientes