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