Preveja o que uma implantação fará usando hipóteses
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:
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 tagowner
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.