Упражнение. Применение рекомендаций к шаблону с помощью набора средств для тестирования шаблонов ARM
Вы входите в группу разработчиков в компании Tailwind Traders. В ваши обязанности входит разработка шаблонов Resource Manager для развертывания ресурсов и управления ими в облаке. Перед развертыванием шаблонов необходимо убедиться, что они соответствуют ряду рекомендаций. Вы решили использовать набор средств для тестирования шаблонов ARM с целью анализа шаблонов и устранения всех проблем.
Настройка тестовой среды
Средство представляет собой модуль PowerShell. Чтобы иметь возможность запустить скрипт, выполните следующие действия.
- Установка модуля PowerShell. Эта задача выполняется по-разному в зависимости от того, используете вы Linux, Mac или Windows.
-
Скачивание модуля. Модуль находится в репозитории GitHub. Его можно скачать из репозитория или получить с помощью команды
git clone
. - Импорт модуля. Это действие представляет собой однострочную инструкцию, которая вводится в сеанс PowerShell, после чего становятся доступными команды ARM-TTK.
Установка PowerShell
Чтобы установить PowerShell, следуйте инструкциям в разделе Установка PowerShell в Linux.
Чтобы проверить установку, выполните в терминале команду
pwsh
:pwsh
Результат будет примерно таким:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Скачивание набора средств для тестирования
Набор средств для тестирования находится в репозитории GitHub. Выберите один из следующих вариантов.
Выполните команду
git clone
, чтобы клонировать репозиторий:git clone https://github.com/Azure/arm-ttk.git
В браузере скачайте репозиторий в виде ZIP-файла.
Ознакомление с набором средств для тестирования
Вы только что скачали набор средств для тестирования в выбранный вами каталог. Рассмотрим структуру каталогов. (Убедитесь, что вы распакуировали файл, если вы решили скачать файл .zip вместо выполнения git clone
команды.) У вас должна быть структура каталогов, которая выглядит следующим образом, если перейти к каталогу набора средств тестирования ARM:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Средство тестирования находится в подкаталоге \arm-ttk.
Создание файла шаблона
Выберите каталог и создайте файл с именем azuredeploy.json.
Предупреждение
Выбранный каталог должен быть пустым. В нем не должно быть подкаталогов.
Добавьте в файл следующее содержимое:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
}
},
"resources": [{
"location": "westus"
}]
}
Запомните расположение файла шаблона. Чтобы вывести путь, можно выполнить в терминале команду pwd
. Этот путь будет использоваться позже в качестве параметра при запуске набора средств для тестирования.
Обнаружение и устранение проблем в шаблоне с помощью набора средств для тестирования
Рекомендуется запустить Visual Studio Code и встроенный терминал.
Вы запустите набор средств для тестирования, чтобы проверить путь, по которому находится шаблон развертывания, и исправите обнаруженные ошибки, изменив шаблон.
Предупреждение
В этом упражнении вы проверяете один файл шаблона. Набор средств для тестирования сканирует все файлы в указанном каталоге и его подкаталогах. Это происходит потому, что развертывание может состоять из нескольких файлов. В каталоге, в котором находится файл azuredeploy.json, и его подкаталогах не должно быть файлов JSON.
В терминале перейдите по пути, где находится файл azuredeploy.json. Выполните следующую команду, чтобы запустить Visual Studio Code:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог шаблона вручную.
В Visual Studio Code откройте встроенный терминал, выбрав в верхнем меню пункты Терминал>Новый терминал. Выполните в терминале следующую команду, чтобы запустить оболочку PowerShell:
pwsh
Результат должен выглядеть примерно так:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Анализ шаблона
Выполните команду
Import-Module
, чтобы тесты можно было запускать из любого места.Примечание.
Перед импортом модуля замените path\to\arm-ttk\arm-ttk.psd1 на путь к скачанному набору средств для тестирования.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Совет
Если вы скачали или клонировали средство в каталог Downloads, путь будет выглядеть примерно так: \Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Теперь средство готово к использованию. Пока вы продолжаете работу в рамках того же сеанса PowerShell, выполнять команду импорта еще раз не нужно.
Выполните команду
Test-AzTemplate
с параметром-TemplatePath
, указывающим на путь к файлу шаблона (без имени файла):Test-AzTemplate -TemplatePath .
В терминале должен отобразиться результат наподобие следующего:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)
Обратите внимание на то, что два теста завершаются неудачно: Resources Should have Location (У ресурсов должно быть расположение) и Parameters Must Be Referenced (На параметры необходимо ссылаться). Непройденный тест обозначается префиксом
[-]
.Чтобы понять причину, откройте файл azuredeploy.json. Он должен выглядеть так:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for the resources." } } }, "resources": [{ "location": "westus" }] }
Тесты завершаются неудачно по двум причинам:
- Параметр расположения не используется. Это сообщение об ошибке может означать, например, что параметр использовался в прошлом, а затем не был очищен. Или что его следует использовать, но код не был обновлен.
- Для свойства расположения жестко задана строка westus. Такой вариант не рекомендуется, так как во время развертывания желательно управлять расположением ресурса с помощью входных параметров.
Применение исправления к шаблону
Как исправить незавершенные тесты?
Как сообщает средство тестирования, можно попробовать заменить westus на текст global. Однако это позволит устранить только одну из проблем. Скорее всего, необходимо использовать параметр location и задать в качестве его значения расположение ресурсов.
Причин этому две: Во-первых, параметр location может быть задан в качестве параметра во время развертывания, а во-вторых, resourceGroup().location может принять значение defaultValue, если параметр location не будет задан при развертывании.
Найдите первый элемент ресурса в массиве resources и замените следующее содержимое:
"resources": [{ "location": "westus" }]
на такое содержимое:
"resources": [{ "location": "[parameters('location')]" }]
Снова запустите средство тестирования во встроенном терминале, чтобы проверить исправление:
Test-AzTemplate -TemplatePath .
Теперь в выходных данных все тесты пройдены:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (6 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (1 ms) [+] Deployment Resources Must Not Be Debug (1 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (4 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (1 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (1 ms) [+] Parameters Must Be Referenced (1 ms) [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [+] Resources Should Have Location (1 ms) [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (4 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (4 ms)
Готово! Вы запустили средство тестирования, нашли ошибки и устранили их.
Следуйте инструкциям в разделе Установка PowerShell в macOS.
Чтобы проверить установку, выполните в терминале команду
pwsh
:pwsh
Результат будет примерно таким:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Скачивание набора средств для тестирования
Набор средств для тестирования находится в репозитории GitHub. Выберите один из следующих вариантов.
Выполните команду
git clone
, чтобы клонировать репозиторий:git clone https://github.com/Azure/arm-ttk.git
В браузере скачайте репозиторий в виде ZIP-файла.
Ознакомление с набором средств для тестирования
Вы только что скачали набор средств для тестирования в выбранный вами каталог. Рассмотрим структуру каталогов. (Убедитесь, что вы распакуировали файл, если вы решили скачать файл .zip вместо выполнения git clone
команды.) У вас должна быть структура каталогов, которая выглядит следующим образом, если перейти к каталогу набора средств тестирования ARM:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Средство тестирования находится в подкаталоге \arm-ttk.
Создание файла шаблона
Выберите каталог и создайте файл с именем azuredeploy.json.
Предупреждение
Выбранный каталог должен быть пустым. В нем не должно быть подкаталогов.
Добавьте в файл следующее содержимое:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
}
},
"resources": [{
"location": "westus"
}]
}
Запомните расположение файла шаблона. Чтобы вывести путь, можно выполнить в терминале команду pwd
. Этот путь будет использоваться позже в качестве параметра при запуске набора средств для тестирования.
Обнаружение и устранение проблем в шаблоне с помощью набора средств для тестирования
Рекомендуется запустить Visual Studio Code и встроенный терминал.
Вы запустите набор средств для тестирования, чтобы проверить путь, по которому находится шаблон развертывания, и исправите обнаруженные ошибки, изменив шаблон.
Предупреждение
В этом упражнении вы проверяете один файл шаблона. Набор средств для тестирования сканирует все файлы в указанном каталоге и его подкаталогах. Это происходит потому, что развертывание может состоять из нескольких файлов. В каталоге, в котором находится файл azuredeploy.json, и его подкаталогах не должно быть файлов JSON.
В терминале перейдите по пути, где находится файл azuredeploy.json. Выполните следующую команду, чтобы запустить Visual Studio Code:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог шаблона вручную.
В Visual Studio Code откройте встроенный терминал, выбрав в верхнем меню пункты Терминал>Новый терминал. Выполните в терминале следующую команду, чтобы запустить оболочку PowerShell:
pwsh
Результат должен выглядеть примерно так:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Анализ шаблона
Выполните команду
Import-Module
, чтобы тесты можно было запускать из любого места.Примечание.
Перед импортом модуля замените path\to\arm-ttk\arm-ttk.psd1 на путь к скачанному набору средств для тестирования.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Совет
Если вы скачали или клонировали средство в каталог Downloads, путь будет выглядеть примерно так: \Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Теперь средство готово к использованию. Пока вы продолжаете работу в рамках того же сеанса PowerShell, выполнять команду импорта еще раз не нужно.
Выполните команду
Test-AzTemplate
с параметром-TemplatePath
, указывающим на путь к файлу шаблона (без имени файла):Test-AzTemplate -TemplatePath .
В терминале должен отобразиться результат наподобие следующего:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)
В приведенных выше выходных данных показано, как происходит сбой двух тестов: Resources Should have Location (У ресурсов должно быть расположение) и Parameters Must Be Referenced (На параметры необходимо ссылаться). Непройденный тест обозначается префиксом
[-]
.Чтобы понять причину, откройте файл azuredeploy.json. Он должен выглядеть так:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for the resources." } } }, "resources": [{ "location": "westus" }] }
Тесты завершаются неудачно по двум причинам:
- Параметр расположения не используется. Это сообщение об ошибке может означать, например, что параметр использовался в прошлом, а затем не был очищен. Или что его следует использовать, но код не был обновлен.
- Для свойства расположения жестко задана строка westus. Такой вариант не рекомендуется, так как во время развертывания желательно управлять расположением ресурса с помощью входных параметров.
Применение исправления к шаблону
Как исправить незавершенные тесты?
Как сообщает средство тестирования, можно попробовать заменить westus на текст global. Однако это позволит устранить только одну из проблем. Скорее всего, необходимо использовать параметр location и задать в качестве его значения расположение ресурсов.
Причин этому две: Во-первых, параметр location может быть задан в качестве параметра во время развертывания, а во-вторых, resourceGroup().location может принять значение defaultValue, если параметр location не будет задан при развертывании.
Найдите первый элемент ресурса в массиве resources и замените следующее содержимое:
"resources": [{ "location": "westus" }]
на такое содержимое:
"resources": [{ "location": "[parameters('location')]" }]
Снова запустите средство тестирования во встроенном терминале, чтобы проверить исправление:
Test-AzTemplate -TemplatePath .
Теперь в выходных данных все тесты пройдены:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (6 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (1 ms) [+] Deployment Resources Must Not Be Debug (1 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (4 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (1 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (1 ms) [+] Parameters Must Be Referenced (1 ms) [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [+] Resources Should Have Location (1 ms) [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (4 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (4 ms)
Готово! Вы запустили средство тестирования, нашли ошибки и устранили их.
- Следуйте инструкциям в разделе Установка PowerShell в Windows.
- В Visual Studio Code установите расширение PowerShell.
Скачивание набора средств для тестирования
Набор средств для тестирования находится в репозитории GitHub. Выберите один из следующих вариантов.
Выполните команду
git clone
, чтобы клонировать репозиторий:git clone https://github.com/Azure/arm-ttk.git
В браузере скачайте репозиторий в виде ZIP-файла.
Ознакомление с набором средств для тестирования
Вы только что скачали набор средств для тестирования в выбранный вами каталог. Рассмотрим структуру каталогов. (Убедитесь, что вы распакуировали файл, если вы решили скачать файл .zip вместо выполнения git clone
команды.) У вас должна быть структура каталогов, которая выглядит следующим образом, если перейти к каталогу набора средств тестирования ARM:
-| arm-ttk\
-| unit-tests\
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Средство тестирования находится в подкаталоге \arm-ttk.
Создание файла шаблона
Создайте файл с именем azuredeploy.json в выбранном каталоге, например C:\Temp.
Предупреждение
Выбранный каталог должен быть пустым. В нем не должно быть подкаталогов.
Добавьте в файл следующее содержимое:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
}
},
"resources": [{
"location": "westus"
}]
}
Запомните расположение файла шаблона. Этот путь к каталогу, например C:\Temp, будет использоваться позже в качестве параметра при запуске набора средств для тестирования.
Обнаружение и устранение проблем в шаблоне с помощью набора средств для тестирования
Рекомендуется запустить Visual Studio Code и встроенный терминал.
Вы запустите набор средств для тестирования, чтобы проверить путь, по которому находится шаблон развертывания, и исправите обнаруженные ошибки, изменив шаблон.
Предупреждение
В этом упражнении вы проверяете один файл шаблона. Набор средств для тестирования сканирует все файлы в указанном каталоге и его подкаталогах. Это происходит потому, что развертывание может состоять из нескольких файлов. В каталоге, в котором находится файл azuredeploy.json, и его подкаталогах не должно быть файлов JSON.
В терминале перейдите по пути, где находится файл azuredeploy.json. Выполните следующую команду, чтобы запустить Visual Studio Code:
code .
Примечание.
Если в Visual Studio Code не открыт соответствующий путь, откройте каталог шаблона вручную.
В Visual Studio Code откройте палитру команд и выберите команду PowerShell: показать интегрированную консоль.
Анализ шаблона
В терминале PowerShell выполните команду
Import-Module
:Примечание.
Перед импортом модуля замените path\to\arm-ttk\arm-ttk.psd1 на путь к скачанному набору средств для тестирования.
Import-Module path\to\arm-ttk\arm-ttk.psd1
Указанная выше команда укажет положение модуля с набором средств для тестирования.
Совет
Если вы скачали или клонировали средство в каталог Downloads, путь будет выглядеть примерно так: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Теперь средство готово к использованию. Пока вы продолжаете работу в рамках того же сеанса PowerShell, выполнять команду импорта еще раз не нужно.
Примечание.
Если вы запускаете новый сеанс PowerShell, вам потребуется снова выполнить команду
Import-Module
.В терминале PowerShell выполните команду
Test-AzTemplate
, чтобы произвести тестовый запуск:Test-AzTemplate -TemplatePath .
В терминале должен отобразиться результат наподобие следующего:
Validating deploy\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (16 ms) Fail : 0 Total : 1 Pass : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (6 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (10 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (7 ms) artifacts parameter [+] artifacts parameter (5 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (7 ms) DependsOn Best Practices [+] DependsOn Best Practices (6 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (5 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (5 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (4 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (4 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (6 ms) deploymentTemplate [-] Location Should Not Be Hardcoded (13 ms) Location value of 'westus' on resource '' must be an expression or 'global'. Line: 14, Column: 9 ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (5 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (5 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (5 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (9 ms) deploymentTemplate [-] Parameters Must Be Referenced (6 ms) Unreferenced parameter: location Line: 5, Column: 9 Password params must be secure [+] Password params must be secure (11 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (5 ms) ResourceIds should not contain [+] ResourceIds should not contain (5 ms) deploymentTemplate [-] Resources Should Have Location (5 ms) Resource Location must be an expression or 'global' Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (7 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (10 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (7 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (5 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (8 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (5 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (8 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (5 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (5 ms) Fail : 3 Total : 31 Pass : 28
В предыдущих выходных данных показано, как три теста завершаются сбоем: Расположение не должно быть жестко закодировано, Параметры должны быть указаны и Ресурсы должны иметь расположение. Непройденный тест обозначается префиксом
[-]
.Чтобы понять причину, откройте файл azuredeploy.json. Он должен выглядеть так:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for the resources." } } }, "resources": [{ "location": "westus" }] }
Тесты завершаются неудачно по двум причинам:
- Параметр расположения не используется. Это сообщение об ошибке может означать, например, что параметр использовался в прошлом, а затем не был очищен. Или что его следует использовать, но код не был обновлен.
- Для свойства расположения жестко задана строка westus. Такой вариант не рекомендуется, так как во время развертывания желательно управлять расположением ресурса с помощью входных параметров.
Применение исправления к шаблону
Как исправить незавершенные тесты?
Как сообщает средство тестирования, можно попробовать заменить westus на текст global. Однако это позволит устранить только одну из проблем. Скорее всего, необходимо использовать параметр location и задать в качестве его значения расположение ресурсов.
Причин этому две: Во-первых, параметр location может быть задан в качестве параметра во время развертывания, а во-вторых, resourceGroup().location может принять значение defaultValue, если параметр location не будет задан при развертывании.
Найдите первый элемент ресурса в массиве resources и замените следующее содержимое:
"resources": [{ "location": "westus" }]
на такое содержимое:
"resources": [{ "location": "[parameters('location')]" }]
Выполните команду
Test-AzTemplate
, чтобы снова запустить средство тестирования:Test-AzTemplate -TemplatePath .
Теперь в выходных данных все тесты пройдены:
Validating deploy\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (83 ms) Fail : 0 Total : 1 Pass : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (36 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (57 ms) piVersions Should Be Recent [+] apiVersions Should Be Recent (67 ms) artifacts parameter [+] artifacts parameter (19 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (93 ms) DependsOn Best Practices [+] DependsOn Best Practices (52 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (77 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (18 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (73 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (72 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (15 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (24 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (143 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (23 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (160 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (13 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (13 ms) Password params must be secure [+] Password params must be secure (12 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (79 ms) ResourceIds should not contain [+] ResourceIds should not contain (12 ms) Resources Should Have Location [+] Resources Should Have Location (17 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (17 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (17 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (16 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (83 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (108 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (111 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (16 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (22 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (133 ms) Fail : 0 Total : 31 Pass : 31
Готово! Вы запустили средство тестирования, нашли ошибки и устранили их.
Теперь можно приступать к тестированию шаблона.