Упражнение. Добавьте параметры и переменные в свой шаблон Bicep
В этом упражнении вы обновите ранее созданный шаблон Bicep, чтобы он:\
- Принимал параметры для расположения и имен ресурсов.
- Использовал ваши бизнес-правила для выбора правильных SKU для развертываемых ресурсов.
В процессе вы:
- Обновите шаблон, чтобы включить параметр
location
. - Обновите шаблон, чтобы включить параметры и переменные для имен ресурсов.
- Используйте выражения для установки значений параметров по умолчанию.
- Обновите шаблон, чтобы включить переменные для SKU каждого ресурса.
- Протестируйте развертывание, чтобы убедиться, что шаблон действителен.
Добавьте параметры местоположения и имени ресурса
В файле main.bicep в Visual Studio Code добавьте следующий код в начало файла:
param location string = 'eastus' param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}' param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}' var appServicePlanName = 'toy-product-launch-plan'
Bicep linter добавляет желтые волнистые линии под каждым параметром и именем переменной, чтобы указать, что они не используются в шаблоне. Эта проблема будет устранена в ближайшее время.
Обратите внимание, что вы используете выражения, которые включают интерполяцию строк и функцию
uniqueString()
для определения значений параметров по умолчанию. Кто-то, развертывающий этот шаблон, может переопределить значения параметров по умолчанию, указав значения во время развертывания, но они не могут переопределить значения переменных.Кроме того, обратите внимание, что вы используете переменную для имени плана службы приложение Azure, но используете параметры для других имен. У учетных записей хранения и приложений Службы приложений должны быть глобально уникальные имена, а имена планов службы приложений должны уникальными только в пределах своей группы ресурсов. Это различие означает, что не стоит использовать одно и то же имя плана службы приложений в разных развертываниях, если все развертывания относятся к разным группам ресурсов.
Совет
Вы указываете, что параметру
location
должно быть присвоено значениеwestus3
. Обычно ресурсы создаются в том же расположении, что и группа ресурсов, с помощью свойстваresourceGroup().location
. Но при работе с песочницей Microsoft Learn необходимо использовать определенные регионы Azure, которые не совпадают с расположением группы ресурсов.Найдите места в определениях ресурсов, где установлены свойства
location
иname
, и обновите их, чтобы использовать значения параметров. По завершении определения ресурсов в файле Bicep должны выглядеть следующим образом:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: 'Standard_LRS' } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = { name: appServicePlanName location: location sku: { name: 'F1' } } resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Сохраните изменения в файле.
Автоматически устанавливать SKU для каждого типа среды
В файле main.bicep в Visual Studio Code добавьте следующий параметр Bicep под параметрами, которые вы создали в предыдущей задаче:
@allowed([ 'nonprod' 'prod' ]) param environmentType string
Обратите внимание, что вы определяете параметр с набором допустимых значений, но не указываете значение по умолчанию для этого параметра.
Под строкой, в которой объявляется переменная
appServicePlanName
, добавьте следующие определения переменных:var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
Обратите внимание, что эти значения переменных задаются с помощью тернарного оператора, чтобы выразить некоторую
if/then/else
логику.Найдите места в определениях ресурсов, где установлены свойства
sku
, и обновите их, чтобы использовать значения параметров. По завершении определения ресурсов в файле Bicep должны выглядеть следующим образом:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Обратите внимание, что вы не все параметризовали. Вы установили некоторые свойства в определениях ресурсов, где вы знаете, что эти значения не будут меняться между развертываниями.
Сохраните изменения в файле.
Проверка файла Bicep
После выполнения всех описанных выше изменений файл main.bicep должен выглядеть, как в следующем примере:
param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
Если файл не соответствует, скопируйте пример или измените файл в соответствии с примером.
Разверните обновленный шаблон Bicep
В терминале выполните следующую команду Azure CLI.
az deployment group create \
--name main \
--template-file main.bicep \
--parameters environmentType=nonprod
В терминале выполните следующую команду Azure PowerShell.
New-AzResourceGroupDeployment `
-Name main `
-TemplateFile main.bicep `
-environmentType nonprod
Обратите внимание, что вы явно указываете значение параметра environmentType
при выполнении развертывания. Вам не нужно указывать другие значения параметров, так как они имеют допустимые значения по умолчанию.
Проверка развертывания
В браузере вернитесь в портал Azure и перейдите в группу ресурсов. Вы увидите одно успешное развертывание, как и прежде, так как для этого развертывания использовалось то же имя, что и для первого.
Выберите ссылку 1 Выполнено.
Выберите развертывание с именем main, а затем нажмите Сведения о развертывании, чтобы развернуть список развернутых ресурсов.
Обратите внимание, что были развернуты новое приложение Службы приложений и учетная запись хранения со случайно созданными именами.