Перед развертыванием шаблона Azure Resource Manager (шаблон ARM) можно просмотреть изменения, которые произойдут. Операция "что если" в Azure Resource Manager позволяет узнать, как изменятся ресурсы при развертывании шаблона. Операция "что если" не вносит изменений в существующие ресурсы. Вместо этого она прогнозирует изменения, которые произойдут при развертывании указанного шаблона.
Операцию "что если" можно использовать с операциями Azure PowerShell, Azure CLI или REST API. "Что если" поддерживается для групп ресурсов, подписок, групп управления и развертываний на уровне клиента.
Для развертывания файла Bicep или шаблона ARM необходим доступ с правом записи для развертываемых ресурсов и доступ ко всем операциям с типом ресурсов Microsoft.Resources/deployments. Например, для развертывания виртуальной машины необходимы разрешения Microsoft.Compute/virtualMachines/write и Microsoft.Resources/deployments/*. Операция what-if имеет те же требования к разрешениям.
Чтобы использовать операцию "что если" в Azure CLI, необходимо иметь Azure CLI версии 2.14.0 или более поздней версии. При необходимости установите последнюю версию Azure CLI.
Просмотр результатов
При использовании функции "что если" в PowerShell или Azure CLI выходные данные включают цветовое кодирование, которое помогает видеть различные типы изменений.
Текстовые выходные данные:
PowerShell
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.
Примечание
Операция "что если" не может разрешить функцию ссылки. Каждый раз, когда свойству задается выражение шаблона, включающее функцию reference, то операция "что если" сообщает, что свойство изменится. Это происходит, потому что операция "что если" сравнивает текущее значение свойства (например, true или false для логического значения) с неразрешенным выражением шаблона. Очевидно, что эти значения не будут совпадать. При развертывании шаблона свойство изменится только в том случае, если выражение шаблона разрешается в другое значение.
Можно использовать параметр-переключатель --confirm-with-what-if (или его короткую форму-c) для предварительного просмотра изменений и получения запроса на продолжение развертывания. Добавьте этот параметр-переключатель в:
Например, используйте az deployment group create --confirm-with-what-if или -c для развертывания групп ресурсов.
Приведенные выше команды возвращают текстовую сводку, которую можно проверить вручную. Чтобы получить объект JSON, который можно программно проверить на наличие изменений, используйте параметр-переключатель --no-pretty-print. Например, используйте az deployment group what-if --no-pretty-print для развертывания групп ресурсов.
Если вы хотите вернуть результаты без цветового кодирования, откройте файл конфигурации Azure CLI. Задайте для параметра no_color значение yes (Да).
Операция "что если" содержит семь различных типов изменений:
Create: ресурс в настоящее время не существует, но определен в шаблоне. Он будет создан.
Delete: этот тип изменения возможен только при использовании полного режима развертывания. Ресурс существует, но не определен в шаблоне. В полном режиме ресурс будет удален. Этот тип изменения применяется только к ресурсам, поддерживающим удаление в полном режиме.
Ignore: ресурс существует, но не определен в шаблоне. Он не будет развернут или изменен. Когда вы достигнете ограничений для расширения вложенных шаблонов, вы столкнетесь с этим типом изменений. См . ограничения "Что если".
NoChange: ресурс существует и определен в шаблоне. Он будет развернут повторно, но его свойства не изменятся. Такой тип изменения возвращается, если для ResultFormat установлено значение FullResourcePayloads, которое используется по умолчанию.
NoEffect: свойство готово только и будет игнорироваться службой. Например, sku.tier свойство всегда должно совпадать sku.name в Microsoft.ServiceBus пространстве имен.
Modify: ресурс существует и определен в шаблоне. Он будет развернут повторно, и его свойства изменятся. Такой тип изменения возвращается, если для ResultFormat установлено значение FullResourcePayloads, которое используется по умолчанию.
Deploy: ресурс существует и определен в шаблоне. Он будет развернут повторно. Свойства ресурса могут измениться или остаться без изменений. Операция возвращает этот тип изменения в случае, когда недостаточно сведений, чтобы определить, изменятся ли какие-либо свойства. Это условие можно увидеть только в том случае, если для ResultFormat задано значение ResourceIdOnly.
Формат результата
Вы управляете уровнем подробностей, которые возвращаются о прогнозируемых изменениях. В этом случае у вас есть два варианта.
FullResourcePayloads — возвращает список ресурсов, которые изменятся, а также сведения о свойствах, которые будут изменены
ResourceIdOnly — возвращает список ресурсов, которые будут изменены
FullResourcePayloads является значением по умолчанию.
Для команд развертывания PowerShell используйте параметр -WhatIfResultFormat. В командах программного объекта используйте параметр ResultFormat.
В Azure CLI используйте параметр --result-format.
Следующие результаты показывают два разных формата выходных данных:
Полные полезные данные ресурсов
PowerShell
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.
Только идентификатор ресурса
PowerShell
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.
Выполнение операции "что если"
Настройка среды
Чтобы узнать, как работает операция "что если", давайте выполним некоторые тесты. Сначала разверните шаблон, который создает виртуальную сеть. Эта виртуальная сеть будет использоваться для тестирования того, как внесенные изменения сообщаются через операцию "что если".
az group create \
--name ExampleGroup \
--location"Central US"az deployment group create \
--resource-group ExampleGroup \
--template-uri"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
Проверка изменений
После завершения развертывания вы можете протестировать операцию "что если". На этот раз разверните шаблон, который изменяет виртуальную сеть. В ней отсутствует один исходный тег, удалена подсеть и был изменен префикс адреса.
az deployment group what-if \
--resource-group ExampleGroup \
--template-uri"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"
Результат операции "что если" выглядит примерно так:
Текстовые выходные данные:
PowerShell
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.
Обратите внимание, что в верхней части выходных данных определены цвета, указывающие на тип изменений.
В нижней части выходных данных видно, что владелец тега был удален. Префикс адреса изменился с 10.0.0.0/16 на 10.0.0.0/15. Подсеть с именем subnet001 удалена. Помните, что эти изменения не были развернуты. Это только предварительный просмотр изменений, которые произойдут при развертывании шаблона.
Некоторые свойства, перечисленные как удаленные, фактически не меняются. Свойства могут быть ошибочно зарегистрированы как удаленные, если они не находятся в шаблоне, но автоматически устанавливаются во время развертывания в качестве значений по умолчанию. Этот результат считается "пропускаемым" в ответе "что если". Окончательный развернутый ресурс будет иметь значения, заданные для свойств. После завершения операции "что если" эти свойства отфильтруются из результата.
Программное вычисление результатов "что если"
Теперь давайте программно оценим результаты "что если", присвоив команде значение переменной.
results=$(az deployment group what-if--resource-group ExampleGroup --template-uri"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-after.json"--no-pretty-print)
Подтверждение удаления
Операция "что если" поддерживает использование режимов развертывания. При выборе полного режима ресурсы, которые не находятся в шаблоне, удаляются. В следующем примере выполняется развертывание шаблона, в котором не определены ресурсы, в полном режиме.
Для предварительного просмотра изменений перед развертыванием шаблона используйте параметр подтверждения с командой развертывания. Если изменения соответствуют ожидаемым, ответьте, что вы хотите, чтобы развертывание было завершено.
az deployment group create \
--resource-group ExampleGroup \
--mode Complete \
--confirm-with-what-if \
--template-uri"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/azuredeploy.json"
Так как в шаблоне не определены ресурсы, а для режима развертывания задано значение "завершено", виртуальная сеть будет удалена.
Текстовые выходные данные:
PowerShell
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"):
Вы увидите ожидаемые изменения и можете подтвердить, что вы хотите выполнить это развертывание.
Пакеты SDK
Вы можете использовать операцию "что если" в пакетах SDK Azure.
Создавайте комплексные решения в Microsoft Azure для создания Функции Azure, реализации веб-приложений и управления ими, разработке решений, использующих службу хранилища Azure, и т. д.
Статья описывает, как развертывать ресурсы в шаблоне Azure Resource Manager. В ней показано, как настроить таргетинг на более чем одну группу ресурсов.