Operação what-if da implementação de modelos do Resource Manager

Antes de implementar um modelo de Gestor de Recursos Azure (modelo ARM), pode visualizar as alterações que irão ocorrer. O Azure Resource Manager fornece o e-se a operação para que possa ver como os recursos serão alterados se implementar o modelo. A operação what-if não faz alterações aos recursos existentes. Em vez disso, prevê as alterações se o modelo especificado for implementado.

Pode utilizar a operação "e se" com Azure PowerShell, Azure CLI ou REST API. E se for suportado para implantações de grupo de recursos, subscrição, grupo de gestão e nível de inquilino.

Microsoft Learn

Para saber mais sobre o que-se e para orientação prática, consulte as alterações de implementação do Preview Azure utilizando o que se no Microsoft Learn.

Instalar Azure PowerShell módulo

Para utilizar o que se em PowerShell, tem de ter a versão 4.2 ou posterior do módulo Az.

Para instalar o módulo, utilize:

Install-Module -Name Az -Force

Para obter mais informações sobre a instalação de módulos, consulte instalar Azure PowerShell.

Instalar módulo CLI Azure

Para utilizar o "e se" em Azure CLI, tem de ter Azure CLI 2.14.0 ou mais tarde. Se for necessário, instale a versão mais recente da CLI do Azure.

Ver resultados

Quando utiliza o "what-if" em PowerShell ou Azure CLI, a saída inclui resultados codificados por cores que o ajudam a ver os diferentes tipos de alterações.

Implementação do modelo do gestor de recursos, se a operação fullresourcepayload e os tipos de alteração

A saída do texto é:

Resource and property changes are indicated with these symbols:
  - Delete
  + Create
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
    - tags.Owner: "Team A"
    ~ properties.addressSpace.addressPrefixes: [
      - 0: "10.0.0.0/16"
      + 0: "10.0.0.0/15"
      ]
    ~ properties.subnets: [
      - 0:

          name:                     "subnet001"
          properties.addressPrefix: "10.0.0.0/24"

      ]

Resource changes: 1 to modify.

Nota

O funcionamento do "e se" não pode resolver a função de referência. Cada vez que define uma propriedade para uma expressão de modelo que inclui a função de referência, e se reportar que a propriedade mudará. Este comportamento acontece porque o que-se compara o valor atual da propriedade (como true ou por um valor false booleano) com a expressão do modelo não resolvido. Obviamente, estes valores não vão corresponder. Quando implementar o modelo, a propriedade só mudará quando a expressão do modelo se resolver a um valor diferente.

E se comandos

Azure PowerShell

Para pré-visualizar alterações antes de implementar um modelo, utilize o New-AzResourceGroupDeployment ou o New-AzSubscriptionDeployment. Adicione o -Whatif parâmetro do interruptor ao comando de implantação.

  • New-AzResourceGroupDeployment -Whatif para implementações de grupos de recursos
  • New-AzSubscriptionDeployment -Whatif e New-AzDeployment -Whatif para implementações de nível de subscrição

Pode utilizar o -Confirm parâmetro do switch para visualizar as alterações e ser solicitado para continuar com a implementação.

  • New-AzResourceGroupDeployment -Confirm para implementações de grupos de recursos
  • New-AzSubscriptionDeployment -Confirm e New-AzDeployment -Confirm para implementações de nível de subscrição

Os comandos anteriores devolvem um resumo de texto que pode inspecionar manualmente. Para obter um objeto que possa inspecionar programaticamente para alterações, utilize o Get-AzResourceGroupDeploymentWhatIfResult ou Get-AzSubscriptionDeplomentWhatIfResult.

  • $results = Get-AzResourceGroupDeploymentWhatIfResult para implementações de grupos de recursos
  • $results = Get-AzSubscriptionDeploymentWhatIfResult ou $results = Get-AzDeploymentWhatIfResult para implementações de nível de subscrição

CLI do Azure

Para pré-visualizar alterações antes de implementar um modelo, use:

Pode utilizar o --confirm-with-what-if interruptor (ou a sua forma -c curta) para visualizar as alterações e ser solicitado para continuar com a implementação. Adicione este interruptor a:

Por exemplo, utilização az deployment group create --confirm-with-what-if ou -c para implantações de grupos de recursos.

Os comandos anteriores devolvem um resumo de texto que pode inspecionar manualmente. Para obter um objeto JSON que possa inspecionar programaticamente se há alterações, utilize o --no-pretty-print interruptor. Por exemplo, utilizar az deployment group what-if --no-pretty-print para implantações de grupos de recursos.

Se pretender devolver os resultados sem cores, abra o seu ficheiro de configuração Azure CLI. Desateia no_color para sim.

API REST do Azure

Para REST API, utilize:

Tipos de alterações

A operação do "e se" enumera seis tipos diferentes de alterações:

  • Criar: O recurso não existe atualmente, mas está definido no modelo. O recurso será criado.

  • Excluir: Este tipo de alteração só se aplica quando se utiliza o modo completo de implantação. O recurso existe, mas não está definido no modelo. Com o modo completo, o recurso será eliminado. Apenas os recursos que suportam a eliminação completa do modo estão incluídos neste tipo de alteração.

  • Ignorar: O recurso existe, mas não está definido no modelo. O recurso não será implementado ou modificado.

  • NoChange: O recurso existe e é definido no modelo. O recurso será novamente implementado, mas as propriedades do recurso não mudam. Este tipo de alteração é devolvido quando o ResultadoFormat está definido para FullResourcePayloads , que é o valor padrão.

  • Modificar: O recurso existe e é definido no modelo. O recurso será novamente implementado e as propriedades do recurso mudam. Este tipo de alteração é devolvido quando o ResultadoFormat está definido para FullResourcePayloads , que é o valor padrão.

  • Implementar: O recurso existe e é definido no modelo. O recurso será novamente implementado. As propriedades do recurso podem ou não ser alteradas. 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. Só se vê esta condição quando o ResultadoFormat está definido para ResourceIdOnly .

Formato dos resultados

Controla o nível de detalhe que é devolvido sobre as alterações previstas. Tem duas opções:

  • FullResourcePayloads - devolve uma lista de recursos que mudarão e detalhes sobre as propriedades que vão mudar
  • ResourceIdOnly - devolve uma lista de recursos que vão mudar

O valor predefinido é FullResourcePayloads.

Para os comandos de implantação PowerShell, utilize o -WhatIfResultFormat parâmetro. Nos comandos programáticos do objeto, utilize o ResultFormat parâmetro.

Para Azure CLI, utilize o --result-format parâmetro.

Os seguintes resultados mostram os dois formatos de saída diferentes:

  • Cargas completas de recursos

    Resource and property changes are indicated with these symbols:
      - Delete
      + Create
      ~ Modify
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/./resourceGroups/ExampleGroup
    
      ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
        - tags.Owner: "Team A"
        ~ properties.addressSpace.addressPrefixes: [
          - 0: "10.0.0.0/16"
          + 0: "10.0.0.0/15"
          ]
        ~ properties.subnets: [
          - 0:
    
            name:                     "subnet001"
            properties.addressPrefix: "10.0.0.0/24"
    
          ]
    
    Resource changes: 1 to modify.
    
  • Apenas ID de recursos

    Resource and property changes are indicated with this symbol:
      ! Deploy
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/./resourceGroups/ExampleGroup
    
      ! Microsoft.Network/virtualNetworks/vnet-001
    
    Resource changes: 1 to deploy.
    

Executar o que se operar

Configurar ambiente

Para ver como funciona, vamos fazer alguns testes. Em primeiro lugar, implemente um modelo que cria uma rede virtual. Você vai usar esta rede virtual para testar como as mudanças são reportadas pelo e-se.

New-AzResourceGroup `
  -Name ExampleGroup `
  -Location centralus
New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"

Modificação do teste

Depois da colocação terminar, está pronto para testar a operação "e se". Desta vez implementa um modelo que altera a rede virtual. Falta-lhe uma das etiquetas originais, uma sub-rede foi removida, e o prefixo do endereço mudou.

New-AzResourceGroupDeployment `
  -Whatif `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

O resultado de what-if é semelhante a:

Implementação do modelo do gestor de recursos, se a saída da operação

A saída do texto é:

Resource and property changes are indicated with these symbols:
  - Delete
  + Create
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
    - tags.Owner: "Team A"
    ~ properties.addressSpace.addressPrefixes: [
      - 0: "10.0.0.0/16"
      + 0: "10.0.0.0/15"
      ]
    ~ properties.subnets: [
      - 0:

        name:                     "subnet001"
        properties.addressPrefix: "10.0.0.0/24"

      ]

Resource changes: 1 to modify.

Note na parte superior da saída que as cores são definidas para indicar o tipo de alterações.

Na parte inferior da saída, mostra que a etiqueta Proprietário foi eliminada. O prefixo do endereço passou de 10.0.0.0/16 para 10.0.0.0/15. A sub-rede denominada subnet001 foi eliminada. Lembre-se que estas mudanças não foram implementadas. Você vê uma pré-visualização das alterações que irão acontecer se implementar o modelo.

Algumas das propriedades que estão listadas como eliminadas não vão realmente mudar. As propriedades podem ser incorretamente reportadas como eliminadas quando não estão no modelo, mas são automaticamente definidas durante a implementação como valores predefinidos. Este resultado é considerado "ruído" na resposta "e se". O recurso implantado final terá os valores definidos para as propriedades. À medida que o funcionamento do "e se" amadurecer, estas propriedades serão filtradas do resultado.

Avaliar programáticamente os resultados do que se

Agora, vamos avaliar programáticamente os resultados do "e se", definindo o comando para uma variável.

$results = Get-AzResourceGroupDeploymentWhatIfResult `
  -ResourceGroupName ExampleGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"

Pode ver um resumo de cada mudança.

foreach ($change in $results.Changes)
{
  $change.Delta
}

Confirmar eliminação

O e-se funcionamento suporta o modo de implantação. Quando definido para o modo completo, os recursos que não estão no modelo são eliminados. O exemplo a seguir implementa um modelo que não tem recursos definidos em modo completo.

Para pré-visualizar as alterações antes de implementar um modelo, utilize o parâmetro confirm switch com o comando de implementação. Se as alterações forem como esperava, responda que deseja que a implementação esteja concluída.

New-AzResourceGroupDeployment `
  -ResourceGroupName ExampleGroup `
  -Mode Complete `
  -Confirm `
  -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"

Como nenhum dos recursos é definido no modelo e o modo de implementação está definido para ser concluído, a rede virtual será eliminada.

Implementação do modelo do gestor de recursos se o modo de implementação da saída de operação estiver concluído

A saída do texto é:

Resource and property changes are indicated with this symbol:
  - Delete

The deployment will update the following scope:

Scope: /subscriptions/./resourceGroups/ExampleGroup

  - Microsoft.Network/virtualNetworks/vnet-001

      id:
"/subscriptions/./resourceGroups/ExampleGroup/providers/Microsoft.Network/virtualNet
works/vnet-001"
      location:        "centralus"
      name:            "vnet-001"
      tags.CostCenter: "12345"
      tags.Owner:      "Team A"
      type:            "Microsoft.Network/virtualNetworks"

Resource changes: 1 to delete.

Are you sure you want to execute the deployment?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Vê as alterações esperadas e pode confirmar que pretende que a implementação seja executada.

SDKs

Pode utilizar a operação "e se" através dos Azure SDKs.

Passos seguintes