Visualizar pilha de alterações de implantação usando o teste de hipóteses

Antes de criar ou atualizar uma pilha de implantação do Azure, visualize previamente as alterações que a pilha fará usando a operação what-if. A operação what-if não faz nenhuma alteração nos recursos existentes. Em vez disso, ela prevê as alterações que ocorreriam se você aplicasse a pilha com o modelo e os parâmetros especificados. Como uma stack de implantação gerencia uma coleção de recursos como uma única unidade, visualizar previamente as alterações com o what-if é especialmente útil. Você pode confirmar quais recursos foram criados, atualizados ou deixados inalterados. Você também pode identificar recursos que se tornam não gerenciados (desanexados ou excluídos) antes de aplicar a alteração.

Teste de hipóteses para implantações do Bicep

A operação "what-if" é um recurso das implantações de modelo do Azure Resource Manager que visualiza previamente as alterações que uma implantação fará antes de aplicá-las. Está disponível para implantações padrão do Bicep e para pilhas de implantação. Para obter uma descrição completa de como a operação funciona, dos tipos de alterações que ela relata e de suas limitações, confira Visualizar alterações de implantação do Bicep usando what-if. O restante deste artigo foca no uso de teste de hipóteses com pilhas de implantação.

Como os resultados do teste de hipóteses da pilha diferem do teste de hipóteses de implantação

Se você está migrando de implantações para pilhas de implantação, a diferença mais importante é onde o resultado está presente.

Para uma implantação padrão, what-if é uma operação. Você executa, o Azure retorna as alterações previstas, e nada é armazenado em seguida.

Para uma pilha de implantação, o what-if cria um recurso de resultado do what-if. O resultado é um recurso independente do Azure do tipo Microsoft.Resources/deploymentStacksWhatIfResults, ao qual você mesmo dá um nome, e ele faz referência à pilha em relação à qual foi avaliado, em vez de ser uma operação nessa pilha. Como o resultado é um recurso próprio, você pode recuperá-lo, compartilhar o ID do recurso e deletá-lo depois.

Característica Simulação de implantação Teste de hipóteses da pilha de implantação
Form Uma operação que retorna um resultado Um recurso que você cria
Name Não nomeado Você fornece um nome
Tipo de recurso Não aplicável Microsoft.Resources/deploymentStacksWhatIfResults
Vincular à pilha Não aplicável properties.deploymentStackResourceId referencia a pilha
Persistência Não armazenado Armazenado para o intervalo de retenção que você definiu

Um resultado possui um ID de recurso nesta forma:

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

A pilha que você avaliou ainda não precisa existir. Se isso não acontecer, o what-if informará a própria pilha como um novo recurso, o que permite visualizar a primeira execução de uma pilha antes de criá-la.

Limitações

O what-if para pilhas de implantação compartilha as limitações what-if subjacentes das implantações de modelos do Azure Resource Manager, incluindo a precisão dos resultados para certos tipos de recursos e propriedades. Sempre revise com cuidado as alterações previstas antes de aplicar uma pilha, especialmente quando actionOnUnmanage estiver definida como opção de exclusão.

  • A redução de ruído não elimina todas as diferenças. O 'e se' filtra muitas diferenças comuns que não são mudanças reais, mas não filtra todas. Para mais informações, veja Redução de ruído.
  • Os resultados armazenados persistem até que seu intervalo de retenção acabe. Cada resultado hipotético é um recurso no escopo em que você o cria, e conta para os limites de recursos desse escopo. Um resultado que usa um intervalo de retenção maior que PT3H não é excluído automaticamente, portanto exclua os resultados de que você não precisa mais. Para mais informações, veja Recuperar e excluir resultados armazenados.

Como o what-if funciona com pilhas de implantação

Quando você executa o what-if contra uma pilha de implantação, a operação avalia o template em relação ao estado atual dos recursos gerenciados pela pilha e reporta cada recurso como um dos seguintes tipos de alteração:

Tipo de mudança Description
Create O recurso não existe e é criado.
Modificar O recurso existe e algumas propriedades mudam.
Sem Mudança O recurso existe e não é alterado.
Delete Aplica quando actionOnUnmanage está configurado para deletar. O recurso é removido da pilha e excluído.
Desanexar Aplica-se quando actionOnUnmanage está definido para desanexar. O recurso é removido do gerenciamento da pilha, mas não é excluído do Azure.
Unsupported O recurso não tem suporte para avaliação de hipóteses.

Note

Quando o provedor de recursos ignora uma propriedade somente de leitura (por exemplo, sku.tier configurada para corresponder a sku.name para alguns tipos de recurso), o what-if informa essa propriedade como NoEffect. Alguns clientes exibem NoEffect como NoChange. Essa diferença afeta apenas a exibição e não afeta as alterações que a pilha aplica.

O What-If também revela recursos que são destacados da pilha (não mais gerenciados) com base no comportamento actionOnUnmanage , então você pode confirmar que nenhum recurso gerenciado é removido involuntariamente.

Redução de ruído

O What-If compara seu modelo com o estado atual dos recursos que a pilha gerencia. Nem toda diferença que ele encontra é uma mudança que você fez. Provedores de recursos adicionam e normalizam valores após o implante de um recurso, então uma propriedade pode diferir do seu template mesmo quando nada significativo mudou. Essas diferenças são ruídos, e tornam o resultado mais difícil de ler.

Stacks de implantação filtram esse ruído para você. Quando você implanta ou atualiza uma pilha, o Azure avalia o what-if da pilha naquele momento e mantém o resultado como linha de base. Quando você executar o what-if na pilha posteriormente, qualquer propriedade que permaneça inalterada entre essa linha de base e a avaliação atual será removida do resultado como ruído. O que resta é mais próximo do conjunto de mudanças que seu modelo realmente introduz.

Como a linha de base é registrada quando a pilha é implantada, a redução de ruído se aplica às pilhas que foram criadas ou atualizadas após a disponibilização do recurso. Se uma pilha não tiver sido implantada ou atualizada desde então, os resultados do teste de hipóteses ainda incluirão ruídos. Implante ou atualize a stack uma vez para estabelecer a base de referência.

Note

A redução de ruído remove muitas diferenças comuns, mas não elimina todas. Revise as mudanças relatadas em vez de assumir que toda diferença é uma mudança real.

Execute um teste de hipóteses antes de criar ou atualizar uma pilha

Execute o comando 'e se' para pré-visualizar as mudanças sem aplicá-las. Você identifica a pilha de destino pela ID de recurso: use --stack-id na CLI do Azure ou -StackResourceId no Azure PowerShell. O valor --name (CLI do Azure) ou -Name (Azure PowerShell) nomeia o resultado what-if armazenado, e a operação mantém esse resultado pelo intervalo de retenção que você definir para que você possa recuperá-lo posteriormente.

O intervalo de retenção utiliza o formato de duração ISO 8601, como PT3H por três horas ou P7D sete dias.

Dica

Defina o intervalo de retenção para PT3H ou menos. Resultados que usam um intervalo de retenção mais longo não são deletados automaticamente, então você precisa apagar você mesmo quando não precisar mais.

Para pré-visualizar as mudanças em uma pilha de grupos de recursos, use o seguinte 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 visualizar previamente as alterações de uma stack de assinaturas, use o seguinte 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 visualizar as alterações de um stack de grupo de gerenciamento, use o seguinte 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 visualizar o impacto de uma atualização em uma pilha existente, execute o mesmo comando what-if e passe a ID de recurso dessa pilha. No Azure PowerShell, você também pode usar os Set-Az*DeploymentStackWhatIfResult cmdlets correspondentes.

Recuperar e excluir resultados armazenados

Como cada resultado hipotético é um recurso próprio, você pode listar, recuperar e excluir resultados em qualquer escopo. Exclua resultados que você não precisa mais, especialmente quando você define um intervalo de retenção maior 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 e az stack-whatif mg para escopos de subscrição e grupos de gestão.

Obter alterações no nível do recurso ou da propriedade

Um resultado hipotético contém mudanças em dois níveis de detalhe: quais recursos mudam e quais propriedades individuais mudam nesses recursos.

Quando você cria um resultado do teste de hipóteses, a saída inclui as alterações em nível de propriedade. Quando você recupera um resultado armazenado, a saída inclui apenas as mudanças em nível de recurso. Para incluir as mudanças em nível de propriedade ao recuperar um resultado, use --with-property-changes no CLI do Azure ou -WithPropertyChanges no Azure PowerShell.

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

Recuperar um resultado sem a opção informa que o recurso muda, mas não o que muda nele:

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

Ao recuperar o mesmo resultado com a opção, você adiciona as alterações individuais de propriedade:

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"

A opção se aplica quando você recupera um único resultado. A listagem de resultados não retorna alterações de propriedades.

Confirme antes de se candidatar

Use o teste de hipóteses como uma etapa de confirmação em sessões interativas e em pipelines:

  • Interativamente, execute o comando what-if, revise as mudanças previstas e então execute o comando stack create para aplicá-las.
  • Na automação, capture o resultado hipotético e limite a etapa de aplicação na revisão ou aprovação. Essa etapa é valiosa para pilhas porque uma atualização pode desanexar ou excluir recursos, dependendo da configuração de actionOnUnmanage.