Prever o que uma implantação fará usando o teste de hipóteses

Concluído

Qualquer pessoa que esteja implantando ou modificando recursos em um ambiente tem perguntas como estas em mente:

  • Vou interromper algo?
  • Vou excluir alguma coisa?
  • Como essa implantação afetará os recursos existentes?
  • Antes de clicar no botão Implantar, posso confirmar se o que espero que acontecerá realmente se concretizará na implantação?

Implantar e esperar pelo melhor não é uma boa abordagem. Uma abordagem melhor é usar a operação teste de hipóteses. Essa operação ajuda você a prever as consequências de uma nova implantação, caso tente fazê-la.

O Azure Resource Manager fornece a operação teste de hipóteses para realçar as alterações quando você implanta um modelo. A operação what-if não faz nenhuma alteração nos recursos existentes. Em vez disso, ela prevê as alterações se o modelo especificado é implantado em um nível de assinatura e grupo de recursos.

Observação

Às vezes, a operação de teste de hipóteses mostra que um recurso será alterado quando, na verdade, nenhuma alteração ocorrerá. Estamos trabalhando para reduzir esses problemas, mas precisamos da sua ajuda. Relate esses problemas.

Usando a operação de teste de hipóteses, compare o modelo de estado atual com o modelo de estado desejado. A operação what-if confirma se as alterações feitas pelo seu modelo correspondem às suas expectativas sem aplicar essas alterações aos recursos reais ou ao estado desses recursos.

Controlar o formato dos resultados de teste de hipóteses

O cmdlet do Azure PowerShell New-AzResourceGroupDeployment cria uma implantação em um grupo de recursos. Quando você adiciona o parâmetro -Whatif nesse comando, o comando deixa de executar a implantação para simplesmente relatar uma visualização do que acontecerá se você a executar.

O comando az deployment group what-if fornece uma visualização do que acontecerá se você executar uma implantação.

Você pode controlar a quantidade de saída de texto da operação teste de hipóteses usando um destes formatos de resultado:

  • FullResourcePayloads. Ao incluir esse parâmetro, você obtém uma saída detalhada que consiste em uma lista de recursos que serão alterados. A saída também mostra detalhes sobre todas as propriedades que serão alteradas de acordo com o modelo.
  • ResourceIdOnly. Esse modo retorna uma lista de recursos que serão alterados, mas não todos os detalhes.

Por exemplo, suponha que você esteja alterando o tipo de armazenamento em um modelo que implanta uma única conta de armazenamento em um ambiente existente.

Você pode executar o seguinte código do PowerShell e solicitar que o Resource Manager forneça os conteúdos de recursos completos:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format FullResourcePayloads

O comando anterior produz os seguintes resultados:

Resource and property changes are indicated with this symbol:
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
    ~ sku.name: "Standard_LRS" => "Standard_GRS"

Resource changes: 1 to modify.

Em seguida, você pode executar novamente o comando, mas solicitar apenas as IDs de recurso:

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format ResourceIdOnly

O comando anterior produz os seguintes resultados:

Resource and property changes are indicated with this symbol:
  ! Deploy

The deployment will update the following scope:

Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

Tipos de alterações detectadas pelo teste de hipóteses

Quando você usa a operação teste de hipóteses, ela lista seis tipos de alterações:

Tipo Explicação Efeito
Criar O recurso não existe atualmente, mas está definido no modelo. O recurso será criado.
Excluir Este tipo de alteração se aplica apenas quando você está usando o modo completo para implantação. O recurso existe, mas não está definido no modelo. Se a implantação for utilizada no modo incremental, o recurso não será excluído. Se você implantar utilizando o modo completo, o recurso será excluído. Esse tipo de alteração é retornado somente para recursos que suportam a exclusão por meio do modo completo.
Ignorar O recurso existe, mas não está definido no modelo. Quando você utiliza o modo incremental, que é o modo de implantação padrão, o recurso não é implantado nem modificado. Se você implantar usando o modo completo, o recurso será excluído.
NoChange O recurso existe e está definido no modelo. O recurso será reimplantado, mas as propriedades do recurso não serão alteradas. Esse tipo de alteração é retornado quando o formato de resultado é definido como FullResourcePayloads, que é o formato de resultado padrão.
Modificar O recurso existe e está definido no modelo. O recurso será reimplantado e as propriedades do recurso serão alteradas. Esse tipo de alteração é retornado quando o formato de resultado é definido como FullResourcePayloads, que é o formato de resultado padrão.
Implantar O recurso existe e está definido no modelo. O recurso será reimplantado. As propriedades do recurso podem ou não ser alteradas. A operação retorna esse tipo de alteração quando não tem informações suficientes para determinar se as propriedades serão alteradas. Você verá essa condição somente quando o formato de resultado estiver definido como ResourceIdOnly.

Se você não precisar conhecer todos os tipos de alteração, poderá usar o argumento -WhatIfExcludeChangeType para omitir os tipos nos quais não está interessado.

Se você não precisar conhecer todos os tipos de alteração, poderá usar o argumento --what-if-exclude-change-types para omitir os tipos nos quais não está interessado.

Usar o teste de hipóteses resulta em um script

Talvez você queira usar a saída da operação de teste de hipóteses dentro de um script ou como parte de um processo de implantação automatizada.

Você pode obter os resultados usando o cmdlet Get-AzResourceGroupDeploymentWhatIfResult. Em seguida, o script pode analisar os resultados e executar qualquer lógica personalizada que você possa precisar.

Você pode obter os resultados brutos de JSON acrescentando o argumento --no-pretty-print no comando da CLI. Em seguida, o script pode analisar os resultados e executar qualquer lógica personalizada que você possa precisar.

Modos de implantação e exclusão de recursos

Existem tempos em que você deseja confirmar a exclusão de recursos ao implantar o modelo. Para esse fim, a operação de teste de hipóteses considera o modo de implantação usado. Se você utilizar o modo de implantação completo, o Resource Manager relatará os recursos que serão excluídos porque não estão definidos na sua implantação.

Vejamos um exemplo de um modelo que atualiza um recurso existente e é implantado no modo completo:

Diagram showing change types for three resources, some of which already exist.

Veja abaixo uma explicação do que está acontecendo nesse exemplo:

  • O modelo está atualizando uma conta de armazenamento chamada storage-1, que já está implantada. O SKU está mudando de LRS para GRS e o valor da tag owner está sendo alterado para a Equipe A. O resultado what-if mostra uma alteração tipo Modificar para esse recurso.
  • O modelo está criando uma conta do Azure Cosmos DB chamada cosmos-db-1, que ainda não existe no grupo de recursos. A saída what-if mostra um tipo de alteração Criar para esse recurso.
  • O modelo não inclui o servidor lógico do SQL do Azure que já existe no grupo de recursos. Como a implantação utiliza o modo completo, a saída what-if mostra um tipo de alteração Excluir para esse recurso. Se a implantação tivesse usado o modo incremental em vez do modo completo, o tipo de alteração seria Ignore.

Confirmar as suas implantações

Para visualizar as alterações antes de implantar um modelo, use o parâmetro -Confirm com o comando de implantação. Se as alterações forem as esperadas, confirme que você deseja finalizar a implantação.

Dica

É uma boa ideia executar os seus comandos de implantação com a alternância -Confirm, especialmente se você estiver implantando no modo completo. Se você usar a alternância -Confirm, terá a chance de interromper a operação se não gostar das alterações propostas.

Para visualizar as alterações antes de implantar um modelo, use o argumento --confirm-with-what-if com o comando de implantação. Se as alterações forem as esperadas, confirme que você deseja finalizar a implantação.

Dica

É uma boa ideia executar os seus comandos de implantação com o argumento --confirm-with-what-if, especialmente se você estiver implantando no modo completo. Se você usar a alternância --confirm-with-what-if, terá a chance de interromper a operação se não gostar das alterações propostas.