Прогнозирование результата развертывания с помощью операции "что если"
Любой, кто развертывает или изменяет ресурсы в среде, имеет такие вопросы, как на их основе:
- Не нарушится ли работа каких-либо компонентов?
- Я собираюсь что-то удалить?
- Как развертывание повлияет на существующие ресурсы?
- Можно ли проверить, будет ли результат развертывания соответствовать ожидаемому, прежде чем нажимать кнопку "Развернуть"?
Развертывание и надежды на лучшее не является хорошим подходом. Правильнее будет использовать операцию что если. Эта операция помогает предвидеть последствия нового развертывания при попытке.
Azure Resource Manager теперь предоставляет операцию "что если" для выделения изменений при развертывании шаблона. Операция "что если" не вносит изменений в существующие ресурсы. Вместо этого она прогнозирует изменения, которые произойдут при развертывании указанного шаблона на уровне группы ресурсов и подписки.
Примечание.
Операция "что если" иногда показывает, что ресурс изменится, хотя фактически не произойдет никаких изменений. Мы работаем над сокращением числа таких проблем, но нам нужна ваша помощь. Мы просим вас сообщать о таких проблемах.
Операция "что если" сравнивает модель текущего состояния с моделью требуемого состояния. Операция what-if подтверждает, соответствуют ли изменения, внесенные шаблоном , без применения этих изменений к реальным ресурсам или состоянию этих ресурсов.
Управление форматом результатов операции "что если"
Командлет Azure PowerShell New-AzResourceGroupDeployment
создает новое развертывание в группе ресурсов. Если добавить к этой команде параметр -Whatif
, вместо развертывания она просто сообщит, что произойдет в случае развертывания.
Команда az deployment group what-if
предоставляет предварительный просмотр того, что произойдет, если выполнить развертывание.
При необходимости можно настроить объем текстовых данных, выводимых операцией "что если", с помощью одного из следующих форматов результата.
FullResourcePayloads
. Включив этот параметр, вы получаете подробные выходные данные, состоящие из списка ресурсов, которые будут изменены. В выходных данных также отображаются сведения обо всех свойствах, которые изменятся в соответствии с шаблоном.ResourceIdOnly
. В этом режиме возвращается только список ресурсов, которые изменятся, но не полные сведения.
Например, рассмотрим ситуацию, когда в шаблоне, который развертывает одну учетную запись хранения в существующей среде, изменяется тип хранилища.
Можно запустить следующий код PowerShell и запросить в Resource Manager все полезные данные ресурсов:
New-AzResourceGroupDeployment `
-ResourceGroupName ToyStorage `
-TemplateFile $templateFileName `
-WhatIf `
-WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
--resource-group ToyStorage \
--template-file $templateFile \
--result-format FullResourcePayloads
Приведенная выше команда выдает следующие результаты.
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.
Затем можно повторно выполнить команду, но запросить только идентификаторы ресурсов:
New-AzResourceGroupDeployment `
-ResourceGroupName ToyStorage `
-TemplateFile $templateFileName `
-WhatIf `
-WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
--resource-group ToyStorage \
--template-file $templateFile \
--result-format ResourceIdOnly
Приведенная выше команда выдает следующие результаты.
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.
Типы изменений, которые обнаруживает операция "что если"
При использовании операции "что если" предоставляются списки шести типов изменений:
Тип | Описание | Действие |
---|---|---|
Создание | Ресурс в настоящее время не существует, но определен в шаблоне. | Он будет создан. |
Удаление | Этот тип изменения возможен только при использовании полного режима развертывания. Ресурс существует, но не определен в шаблоне. | При развертывании с помощью добавочного режима ресурс не удаляется. При развертывании с помощью полного режима ресурс удаляется. Этот тип изменения возвращается только для ресурсов, поддерживающих удаление через полный режим. |
Пропустить | Ресурс существует, но не определен в шаблоне. | При использовании добавочного режима, который является режимом развертывания по умолчанию, ресурс не развертывается или не изменяется. При развертывании с использованием полного режима ресурс будет удален. |
NoChange | Ресурс существует и определен в шаблоне. | Он будет развернут повторно, но его свойства не изменятся. Этот тип изменения возвращается, если для формата результата задано значение FullResourcePayloads , которое является форматом результата по умолчанию. |
Изменить | Ресурс существует и определен в шаблоне. | Он будет развернут повторно, и его свойства изменятся. Этот тип изменения возвращается, если для формата результата задано значение FullResourcePayloads , которое является форматом результата по умолчанию. |
Развернуть | Ресурс существует и определен в шаблоне. | Он будет развернут повторно. Свойства ресурса могут измениться или остаться без изменений. Операция возвращает этот тип изменения в случае, когда недостаточно сведений, чтобы определить, изменятся ли какие-либо свойства. Это условие отображается только в том случае, если для формата результата задано значение ResourceIdOnly . |
Если вам не нужно знать все типы изменений, можно использовать аргумент -WhatIfExcludeChangeType
, чтобы опустить ненужные типы.
Если вам не нужно знать все типы изменений, можно использовать аргумент --what-if-exclude-change-types
, чтобы опустить ненужные типы.
Использование результатов операции "что если" в скрипте
Может потребоваться использовать выходные данные операции "что если" в скрипте или в рамках автоматизированного процесса развертывания.
Результаты можно получить с помощью командлета Get-AzResourceGroupDeploymentWhatIfResult
. Затем вы можете в скрипте проанализировать результаты и реализовать необходимую пользовательскую логику.
Можно получить необработанные результаты JSON, добавив аргумент --no-pretty-print
в команду CLI. Затем вы можете в скрипте проанализировать результаты и реализовать необходимую пользовательскую логику.
Режимы развертывания и удаление ресурсов
Иногда требуется подтвердить удаление ресурсов при развертывании шаблона. Для этого операция "что если" учитывает используемый режим развертывания. Если вы используете полный режим развертывания, Resource Manager сообщает о ресурсах, которые будут удалены, так как они не определены в развертывании.
Рассмотрим пример шаблона, который обновляет существующий ресурс и развертывается в полном режиме:
Ниже приведено объяснение того, что происходит в этом примере:
- Шаблон обновляет уже развернутую учетную запись хранения с именем
storage-1
. Номер SKU изменяется с LRS на GRS, аowner
тег изменяется на Team A. В выходных данных what-if отображается тип изменения для этого ресурса. - Шаблон создает новую учетную запись Azure Cosmos DB с именем
cosmos-db-1
, которая пока отсутствует в группе ресурсов. В выходных данных what-if отображается тип "Создать изменение" для этого ресурса. - Шаблон не содержит логический сервер Azure SQL, который уже существует в группе ресурсов. Так как в развертывании используется полный режим, выходные данные what-if отображают тип изменения delete для этого ресурса. Если бы при развертывании использовался добавочный режим вместо полного, то тип изменения был бы Ignore.
Подтверждение развертываний
Для предварительного просмотра изменений перед развертыванием шаблона используйте параметр -Confirm
в команде развертывания. Если изменения соответствуют ожидаемым, подтвердите выполнение развертывания.
Совет
Рекомендуется выполнять команды развертывания с параметром -Confirm
, особенно при развертывании в полном режиме. При использовании параметра -Confirm
у вас будет возможность прервать операцию, если предлагаемые изменения вас не устраивают.
Для предварительного просмотра изменений перед развертыванием шаблона используйте аргумент --confirm-with-what-if
в команде развертывания. Если изменения соответствуют ожидаемым, подтвердите выполнение развертывания.
Совет
Рекомендуется выполнять команды развертывания с аргументом --confirm-with-what-if
, особенно при развертывании в полном режиме. При использовании параметра --confirm-with-what-if
у вас будет возможность прервать операцию, если предлагаемые изменения вас не устраивают.