Prever o que uma implementação fará com what-if
Qualquer pessoa que esteja implantando ou modificando recursos em um ambiente tem perguntas como estas em mente:
- Vou causar alguma falha?
- Vou apagar alguma coisa?
- Como é que esta implementaçã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 melhor abordagem é a operação what-if. Essa operação ajuda você a antecipar as consequências de uma nova implantação, se você tentar.
O Azure Resource Manager disponibiliza a operação what-if para realçar as alterações quando implementa um modelo. A operação what-if não faz alterações aos recursos existentes. Prevê as alterações que irão ocorrer se o modelo especificado for implementado num grupo de recursos e nível de subscrição.
Nota
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 aos recursos reais ou ao estado desses recursos.
Controlar o formato dos resultados hipotéticos
O New-AzResourceGroupDeployment
cmdlet do Azure PowerShell cria uma nova implantação para um grupo de recursos. Quando você adiciona o parâmetro a esse comando, o -Whatif
comando muda de realizar a implantação para meramente relatar uma visualização do que acontecerá se você executá-la.
O az deployment group what-if
comando 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 hipotética usando um destes formatos de resultado:
FullResourcePayloads
. Ao incluir este parâmetro, obtém um resultado verboso que consiste numa lista de recursos que irão mudar. O resultado também mostra detalhes sobre todas as propriedades que irão mudar de acordo com o modelo.ResourceIdOnly
. Este modo devolve uma lista dos recursos que irão mudar, mas não todos os detalhes.
Por exemplo, suponha que está a alterar o tipo de armazenamento num modelo que implementa uma conta de armazenamento num 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
A operação what-if lista seis tipos de alterações:
Type | Explicação | Efeito |
---|---|---|
Criar | O recurso não existe atualmente, mas está definido no modelo. | O recurso será criado. |
Eliminar | Este tipo de alteração aplica-se apenas ao utilizar o modo completo para implementaçã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. |
NãoAlteração | O recurso existe e está definido no modelo. | O recurso será novamente implementado, mas as propriedades do recurso não mudam. 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á novamente implementado e as propriedades do recurso mudam. Esse tipo de alteração é retornado quando o formato de resultado é definido como FullResourcePayloads , que é o formato de resultado padrão. |
Implementar | O recurso existe e está definido no modelo. | O recurso será novamente implementado. As propriedades do recurso podem ou não mudar. A operação devolve este tipo de alteração quando não tiver informações suficientes para determinar se há propriedades que vão mudar. Essa condição é exibida somente quando o formato do resultado é definido como ResourceIdOnly . |
Se você não precisa saber todos os tipos de alteração, pode usar o -WhatIfExcludeChangeType
argumento 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 --what-if-exclude-change-types
argumento para omitir os tipos nos quais não está interessado.
Usar resultados hipotéticos em um script
Talvez você queira usar a saída da operação hipotética em um script ou como parte de um processo de implantação automatizado.
Você pode obter os resultados usando o Get-AzResourceGroupDeploymentWhatIfResult
cmdlet. 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 --no-pretty-print
argumento 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 é responsável pelo modo de implantação que você usa. Se você usar o modo de implantação completo, o Gerenciador de Recursos informará os recursos que excluirá 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:
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á mudando de LRS para GRS, e a tag está mudando deowner
valor para Equipe A. A saída hipotética mostra um tipo de alteraçã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 este recurso. Se 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 com o -Confirm
comando deployment. Se as alterações forem as esperadas, confirme que pretende concluir a implementação.
Gorjeta
É uma boa ideia executar os comandos de implantação com o -Confirm
switch, especialmente se você estiver implantando no modo completo. Se você usar o -Confirm
interruptor, você tem a chance de parar a operação se você não gosta das alterações propostas.
Para visualizar as alterações antes de implantar um modelo, use o argumento com o --confirm-with-what-if
comando deployment. Se as alterações forem as esperadas, confirme que pretende concluir a implementação.
Gorjeta
É uma boa ideia executar seus comandos de implantação com o --confirm-with-what-if
argumento, especialmente se você estiver implantando no modo completo. Se você usar o --confirm-with-what-if
interruptor, você tem a chance de parar a operação se você não gosta das alterações propostas.