Preveja o que uma implantação fará usando hipóteses

Concluído

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

  • Vou quebrar alguma coisa?
  • Vou apagar alguma coisa?
  • Como essa implantação afetará os recursos existentes?
  • Posso validar que o que eu espero que aconteça é realmente o que acontecerá na implantação, antes de pressionar o botão de implantação?

Implantar e esperar o melhor não é uma boa abordagem. Uma abordagem melhor é utilizar a operação hipotética . Essa operação ajuda-o a antecipar as consequências de uma nova implementação, caso a tente.

O Azure Resource Manager fornece a operação 'e se' para destacar as alterações aquando da implantação de um modelo. A operação hipotética não faz alterações nos recursos existentes. Em vez disso, ele prevê as alterações se o modelo especificado for implantado em um grupo de recursos e nível de assinatura.

Observação

A operação hipotética às vezes mostra que um recurso mudará quando, na verdade, nenhuma alteração acontecerá. Estamos a trabalhar para reduzir estes problemas, mas precisamos da sua ajuda. Por favor, relate esses problemas.

O uso da operação hipotética compara o modelo de estado atual com o modelo de estado desejado. A operação hipotética confirma se as alterações feitas pelo seu modelo correspondem às suas expectativas sem aplicar essas alterações a recursos reais ou ao estado desses recursos.

Controlar o formato dos resultados hipotéticos

O cmdlet New-AzResourceGroupDeployment Azure PowerShell cria uma nova implantação para um grupo de recursos. Quando adicionas o parâmetro -Whatif a este comando, o comando alterna de realizar a implantação para meramente relatar uma pré-visualização do que acontecerá se a realizares.

O comando az deployment group what-if fornece uma visualização do que acontecerá ao executar uma implementação.

Você pode controlar a quantidade de saída de texto da operação hipotética usando um destes formatos de resultado:

  • FullResourcePayloads. Ao incluir este parâmetro, obtém uma saída detalhada que consiste numa 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 Gerenciador de Recursos forneça todas as cargas úteis de recursos:

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 apenas pedir as IDs do 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 que as hipóteses detetam

Quando você usa a operação hipotética, 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.
Suprimir Esse tipo de alteração se aplica somente quando você estiver usando o modo completo para implantação. O recurso existe, mas não está definido no modelo. Se você implantar usando o modo incremental, o recurso não será excluído. Se você implantar usando o modo completo, o recurso será excluído. Esse tipo de alteração é retornado somente para recursos que oferecem suporte à exclusão através do modo completo.
Ignorar O recurso existe, mas não está definido no modelo. Quando você usa o modo incremental, que é o modo de implantação padrão, o recurso não é implantado ou modificado. Se você implantar usando o modo completo, o recurso será excluído.
Sem Alteração O recurso existe e é 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 é 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 é definido no modelo. O recurso será redistribuído. As propriedades do recurso podem ou não mudar. A operação retorna esse tipo de alteração quando não tem informações suficientes para determinar se alguma propriedade será alterada. Você verá essa condição somente quando o formato do resultado estiver definido como ResourceIdOnly.

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

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

Usar resultados hipotéticos em um script

Talvez queira usar a saída da operação "e se" num script ou como parte de um processo de implementação automatizado.

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 JSON brutos anexando o argumento --no-pretty-print ao 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

Há momentos em que você deseja confirmar a exclusão de recursos à medida que implanta o modelo. Para esse fim, a operação hipotética tem em conta o modo de implantação que se utiliza. Se você usar o concluir o modo de implantação, o Gerenciador de Recursos informará os recursos que excluirão porque eles não estão definidos em sua implantação.

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

Diagrama mostrando os tipos de alteração para três recursos, alguns dos quais já existem.

Aqui está uma explicação do que está acontecendo neste exemplo:

  • O modelo está atualizando uma conta de armazenamento chamada storage-1, que já está implantada. O SKU está a alterar-se de LRS para GRS, e a tag owner está a alterar-se para o valor Team A. O resultado hipotético mostra um tipo de modificação Modificar para este recurso.
  • O modelo está criando uma nova conta do Azure Cosmos DB chamada cosmos-db-1, que ainda não existe no grupo de recursos. A saída hipotética mostra um tipo de alteração Criar para este recurso.
  • O modelo não inclui o servidor lógico SQL do Azure que já existe no grupo de recursos. Como a implantação usa o modo completo, a saída hipotética mostra um tipo de alteração Excluir para esse recurso. Caso a implantação usasse o modo incremental em vez do modo completo, o tipo de alteração seria Ignorar.

Confirme suas implantações

Para visualizar as alterações antes de implantar um modelo, use o parâmetro -Confirm com o comando deployment. Se as alterações forem as esperadas, reconheça que deseja que a implantação seja concluída.

Dica

É uma boa ideia executar os comandos de implantação com o switch -Confirm, especialmente se você estiver implantando no modo completo. Se utilizar o interruptor -Confirm, tem a oportunidade de parar 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 deployment. Se as alterações forem as esperadas, reconheça que deseja que a implantação seja concluída.

Dica

É uma boa ideia executar seus comandos de implantação com o argumento --confirm-with-what-if, especialmente se você estiver implantando no modo completo. Se utilizar o interruptor --confirm-with-what-if, tem a oportunidade de parar a operação se não gostar das alterações propostas.