Obtén una vista previa de los cambios en la pila de implementación mediante what-if

Antes de crear o actualizar una pila de despliegue de Azure, revisa los cambios que realiza la pila usando la operación hipotética. La operación hipotética no realiza ningún cambio en los recursos existentes. En su lugar, predice los cambios que se producirían al aplicar la pila con la plantilla y los parámetros especificados. Dado que una pila de implementación gestiona una colección de recursos como una sola unidad, previsualizar los cambios usando hipotética es especialmente útil. Puedes confirmar qué recursos se crean, actualizan o se dejan sin cambios. También puedes capturar recursos que quedan sin gestionar (desvinculados o eliminados) antes de aplicar el cambio.

What If para implementaciones de Bicep

La operación hipotética es una función de los despliegues de plantillas de Azure Resource Manager que previsualiza los cambios que realiza un despliegue antes de aplicarlos. Está disponible para implementaciones estándar de Bicep y para pilas de implementación. Para obtener una descripción completa de cómo funciona la operación, los tipos de cambios que informa y sus limitaciones, consulte Vista previa de los cambios de implementación de Bicep con what-if. El resto de este artículo se centra en el uso de hipotética con stacks de implementación.

Cómo difieren los resultados de hipotética del conjunto de hipotética de la implementación

Si pasa de implementaciones a conjuntos de implementaciones, la diferencia más importante es dónde reside el resultado.

Para una implementación estándar, hipotética es una operación. Lo ejecutas, Azure devuelve los cambios previstos y no se almacena nada después.

Para un conjunto de implementación, hipotética crea un recurso de resultados de hipotética. El resultado es un recurso Azure independiente de tipo Microsoft.Resources/deploymentStacksWhatIfResults que tú mismo nombras, y hace referencia a la pila contra la que fue evaluado en lugar de ser una operación sobre esa pila. Como el resultado es un recurso propio, puedes recuperarlo, compartir su ID de recurso y eliminarlo más adelante.

Característica Implementación de hipotética Hipotética del conjunto de implementación
Form Una operación que devuelve un resultado Un recurso que creas tú
Name No nombrado Tú pones un nombre
Tipo de recurso No aplicable Microsoft.Resources/deploymentStacksWhatIfResults
Enlace a la pila No aplicable properties.deploymentStackResourceId hace referencia a la pila
Persistencia No almacenado Almacenado para el intervalo de retención que establezcas

Un resultado tiene un ID de recurso en esta forma:

/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Resources/deploymentStacksWhatIfResults/{what-if-result-name}

La pila que evaluaste no necesita existir todavía. Si no es así, what-if muestra la propia pila como un recurso nuevo, lo que te permite obtener una vista previa de la primera ejecución de la pila antes de crearla.

Limitations

La característica «hipotética» de los conjuntos de implementación comparte las limitaciones subyacentes de hipotética de las implementaciones de plantillas de Azure Resource Manager, incluida la precisión de los resultados para determinados tipos de recursos y propiedades. Revise siempre con atención los cambios predichos antes de aplicar un conjunto, especialmente cuando actionOnUnmanage está configurado con la opción de eliminación.

  • La reducción de ruido no elimina todas las diferencias. El 'qué pasaría si' filtra muchas diferencias comunes que no son cambios reales, pero no filtra todas. Para más información, véase Reducción de ruido.
  • Los resultados almacenados persisten hasta que transcurre su intervalo de retención. Cada resultado hipotético es un recurso dentro del ámbito en el que lo creas, y cuenta para los límites de recursos de ese ámbito. Un resultado que utilice un intervalo de retención más largo que PT3H no se elimina automáticamente, así que elimina los resultados que ya no necesites. Para más información, consulte Recuperar y eliminar resultados almacenados.

Cómo funciona hipotética con los conjuntos de implementación

Cuando ejecutas el 'qué pasaría si' contra una pila de despliegue, la operación evalúa la plantilla en función del estado actual de los recursos gestionados por la pila y reporta cada recurso como uno de los siguientes tipos de cambio:

Cambiar tipo Description
Crear El recurso no existe y se crea.
Modificar El recurso existe y algunas propiedades cambian.
NoChange El recurso existe y no cambia.
Eliminar Se aplica cuando actionOnUnmanage está configurado para eliminar. El recurso se quita de la pila y se elimina.
Separar Se aplica cuando actionOnUnmanage está configurado para desvincularse. El recurso se elimina de la gestión del conjunto pero no se elimina de Azure.
Unsupported El recurso no es compatible con la evaluación de hipótesis.

Note

Cuando el proveedor de recursos ignora una propiedad de solo lectura (por ejemplo, sku.tier configurada para coincidir sku.name con algunos tipos de recursos), el 'qué pasaría si' informa de esa propiedad como NoEffect. Algunos clientes muestran NoEffect como NoChange. Esta diferencia solo afecta a la visualización y no a los cambios que aplica el conjunto.

What-if también muestra los recursos que se desasocian de la pila (que ya no se administran) en función del comportamiento de actionOnUnmanage, para que puedas confirmar que no se elimine de forma involuntaria ningún recurso administrado.

Reducción de ruido

What If compara su plantilla con el estado actual de los recursos que gestiona el conjunto. No todas las diferencias que encuentra son un cambio que tú hicieras. Los proveedores de recursos suman y normalizan valores después de que un recurso se despliegue, por lo que una propiedad puede diferir de tu plantilla incluso cuando no haya cambiado nada significativo. Estas diferencias son ruido y dificultan la lectura del resultado.

Los conjuntos de implementación filtran esta información innecesaria por usted. Cuando despliegas o actualizas una pila, Azure evalúa el 'qué pasaría si' para la pila en ese momento y mantiene el resultado como referencia. Cuando ejecuta hipotética contra el conjunto más adelante, cualquier propiedad que no haya cambiado entre esa línea base y la evaluación actual se elimina del resultado como ruido. Lo que queda es más parecido al conjunto de cambios que tu plantilla realmente introduce.

Como la línea base se registra cuando se implementa el conjunto, la reducción de ruido se aplica a los conjuntos que se crearon o actualizaron después de que la función estuviera disponible. Si un conjunto no se ha implementado ni actualizado desde entonces, sus resultados hipotéticos siguen incluyendo ruido. Implemente o actualice el conjunto una vez para establecer la línea base.

Note

La reducción de ruido elimina muchas diferencias comunes, pero no todas. Revisa los cambios reportados en lugar de asumir que cada diferencia es un cambio real.

Ejecute hipotética antes de crear o actualizar un conjunto

Ejecuta el comando what-if para previsualizar los cambios sin aplicarlos. Identifique el conjunto de destino por su ID de recurso: use --stack-id en CLI de Azure o -StackResourceId en Azure PowerShell. El --name valor (CLI de Azure) o -Name (Azure PowerShell) nombra el resultado almacenado del 'qué pasaría si', y la operación conserva ese resultado para el intervalo de retención que hayas configurado para que puedas recuperarlo más adelante.

El intervalo de retención utiliza el formato de duración ISO 8601, como PT3H por ejemplo de tres horas o P7D siete días.

Tip

Establece el intervalo de retención en PT3H o menos. Los resultados que requieren un intervalo de retención más largo no se eliminan automáticamente, así que tienes que eliminarlos tú mismo cuando ya no los necesites.

Para previsualizar los cambios en una pila de grupos de recursos, utilice el siguiente comando:

az stack-whatif group create \
  --name "<what-if-result-name>" \
  --resource-group "<resource-group-name>" \
  --stack-id "<deployment-stack-resource-id>" \
  --template-file "<bicep-file-name>" \
  --action-on-unmanage "detachAll" \
  --deny-settings-mode "none" \
  --retention-interval "PT3H"

Para previsualizar cambios en una pila de suscripción, utilice el siguiente comando:

az stack-whatif sub create \
  --name "<what-if-result-name>" \
  --location "<location>" \
  --stack-id "<deployment-stack-resource-id>" \
  --template-file "<bicep-file-name>" \
  --action-on-unmanage "detachAll" \
  --deny-settings-mode "none" \
  --retention-interval "PT3H"

Para previsualizar cambios en una pila de grupos de gestión, utilice el siguiente comando:

az stack-whatif mg create \
  --name "<what-if-result-name>" \
  --management-group-id "<management-group-id>" \
  --location "<location>" \
  --stack-id "<deployment-stack-resource-id>" \
  --template-file "<bicep-file-name>" \
  --action-on-unmanage "detachAll" \
  --deny-settings-mode "none" \
  --retention-interval "PT3H"

Para previsualizar el efecto de una actualización en una pila existente, ejecuta el mismo comando de 'qué pasaría si' y pasa el ID de recurso de esa pila. En Azure PowerShell, también puedes usar los cmdlets correspondientesSet-Az*DeploymentStackWhatIfResult.

Recuperar y eliminar los resultados almacenados

Como cada resultado hipotético es un recurso propio, puedes listar, recuperar y eliminar resultados en cualquier ámbito. Elimina resultados que ya no necesitas, especialmente cuando estableces un intervalo de retención mayor que PT3H.

# List the what-if results in a resource group
az stack-whatif group list --resource-group "<resource-group-name>"

# Get a single result
az stack-whatif group show --name "<what-if-result-name>" --resource-group "<resource-group-name>"

# Get a single result by resource ID
az stack-whatif group show --id "<what-if-result-resource-id>"

# Delete a result
az stack-whatif group delete --name "<what-if-result-name>" --resource-group "<resource-group-name>" --yes

Uso az stack-whatif sub y az stack-whatif mg para los ámbitos de suscripción y gestión de grupos.

Obtenga cambios a nivel de recurso o de propiedad

Un resultado hipotético contiene cambios en dos niveles de detalle: qué recursos cambian y qué propiedades individuales cambian en esos recursos.

Cuando creas un resultado hipotético, la salida incluye cambios en las propiedades. Cuando recuperas un resultado almacenado, la salida incluye solo los cambios a nivel de recurso. Para incluir los cambios a nivel de propiedad cuando recuperas un resultado, usa --with-property-changes en CLI de Azure o -WithPropertyChanges en Azure PowerShell.

az stack-whatif group show \
  --name "<what-if-result-name>" \
  --resource-group "<resource-group-name>" \
  --with-property-changes true

Recuperar un resultado sin la opción informa que el recurso cambia, pero no qué cambia en él:

Azure
  ~ /subscriptions/<subscription-id>/resourceGroups/demo-rg/providers/Microsoft.Storage/storageAccounts/examplestorage
    ~ Management Status: "notManaged" => "managed"
    = Deny Status: "none"

Obtener el mismo resultado con esta opción añade los cambios individuales de las propiedades:

Azure
  ~ /subscriptions/<subscription-id>/resourceGroups/demo-rg/providers/Microsoft.Storage/storageAccounts/examplestorage [2023-01-01]
    ~ Management Status: "notManaged" => "managed"
    = Deny Status: "none"
    ~ sku.name: "Standard_LRS" => "Standard_GRS"
    - tags.myTag: "myValue"
    + tags.env: "demo"

La opción se aplica cuando recuperas un solo resultado. Enumerar los resultados no devuelve cambios de propiedad.

Confirma antes de solicitar

Utiliza el 'qué pasaría si' como paso de confirmación en sesiones interactivas y en pipelines:

  • De forma interactiva, ejecuta el comando 'qué pasaría si', revisa los cambios previstos y luego ejecuta el comando de creación de pilas para aplicarlos.
  • En automatización, capturar el resultado de hipotética y condicionar el paso de aplicación a una revisión o aprobación. Este paso es importante para los conjuntos porque una actualización puede desvincular o eliminar recursos dependiendo de la configuración de actionOnUnmanage.