Упражнение — рефакторинг файла Bicep для использования модулей
В этом упражнении вы обновите ранее созданный файл Bicep, чтобы он использовал модуль для ресурсов Службы приложений Azure. Модули помогают сделать намерение основного файла более четким. Вы можете повторно использовать модуль службы приложений в других файлах Bicep, если вы хотите.
Во время процесса вы выполните следующие действия.
- Добавите новый модуль и переместите в него ресурсы службы приложений.
- Ссылка на модуль из основного файла Bicep.
- Добавьте выходные данные для имени узла приложения App Service и извлеките его из развертываний модулей и Bicep-файлов.
- Тестируйте развертывание, чтобы убедиться, что файл Bicep действителен.
Добавить новый файл модуля
В Visual Studio Code создайте новую папку с именем модули в той же папке, где вы создали файл main.bicep. В папке модулей создайте файл с именем appService.bicep. Сохраните файл.
Добавьте в файл appService.bicep следующее содержимое:
param location string param appServiceAppName string @allowed([ 'nonprod' 'prod' ]) param environmentType string var appServicePlanName = 'toy-product-launch-plan' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1' 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 } }
Обратите внимание, что вы скопировали параметры и переменные из файла main.bicep Bicep , так как файл appService.bicep Bicep должен быть автономным.
Сохраните изменения в файле. Обратите внимание, что в Visual Studio Code не отображаются красные волнистые линии, указывающие на предупреждения об отсутствующих переменных, отсутствующих параметрах или недопустимых ресурсах.
Добавление ссылки на модуль из родительского файла Bicep
Теперь, когда у вас есть полный модуль для развертывания ресурсов службы приложений, можно обратиться к модулю в родительском файле Bicep. Так как модуль развертывает ресурсы службы приложений, можно удалить связанные ресурсы и переменные из родительского файла.
В файле main.bicep удалите ресурсы службы приложений и определения переменных
appServicePlanName
иappServicePlanSkuName
. Не удаляйте параметры Служба приложений, так как они по-прежнему нужны. Кроме того, не удаляйте параметры, переменные или ресурсы учетной записи хранения.Внизу файла main.bicep добавьте следующий код Bicep:
module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName environmentType: environmentType } }
Обратите внимание, что вы указываете параметры для модуля, ссылаясь на параметры в родительском файле Bicep.
Сохраните изменения в файле.
Добавьте имя хоста в качестве выходных данных
Добавьте следующий код Bicep в конец файла appService.bicep:
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Этот код объявляет, что выходные данные для этого модуля, который будет называться
appServiceAppHostName
, будет иметь типstring
. Выходные данные будут принимать значение из свойстваdefaultHostName
приложения службы приложений.Сохраните изменения в файле.
Эта выходная информация объявляется в файле Bicep, который мы будем использовать как модуль, поэтому она будет доступна только для родительского файла Bicep. Кроме того, необходимо вернуть выходные данные пользователю, который развернул файл.
Откройте файл main.bicep и добавьте следующий код внизу файла:
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
Обратите внимание, что эти выходные данные объявляются таким же образом, как и выходные данные в модуле. Но на этот раз вы ссылаетесь на выходные данные модуля, а не на свойство ресурса.
Сохраните изменения в файле.
Проверка файлов 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 storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
module appService 'modules/appService.bicep' = {
name: 'appService'
params: {
location: location
appServiceAppName: appServiceAppName
environmentType: environmentType
}
}
output appServiceAppHostName string = appService.outputs.appServiceAppHostName
Файл appService.bicep должен выглядеть, как в следующем примере:
param location string
param appServiceAppName string
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
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
}
}
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Если файл Bicep не соответствует, скопируйте пример или измените файл в соответствии с примером.
Разверните обновленный 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
Проверьте ваше развертывание
В браузере вернитесь на портал Azure. Перейдите в группу ресурсов; Теперь существует два успешных развертывания.
Выберите ссылку 2 Выполнено. Обратите внимание, что у вас есть развертывание с именем main в списке и новое развертывание с именем appService.
Выберите развертывание с именем main, а затем выберите Сведения о развертывании, чтобы развернуть список развернутых ресурсов.
Обратите внимание, что развертывание нашего модуля отображается в списке.
Выберите вкладку Выходные данные. Обратите внимание, что есть результат appServiceAppHostName с именем хоста вашего приложения службы приложений. Скопируйте имя хоста в буфер обмена.
Откройте новую вкладку браузера и вставьте скопированное имя узла. Вы должны увидеть страницу приветствия службы приложений по умолчанию.
Поздравляю! Вы успешно заложили основу для отличного приложения.