Упражнение. Выполните рефакторинг вашего шаблона для использования модулей
В этом упражнении вы обновите ранее созданный шаблон Bicep, чтобы он использовал модуль для ресурсов службы приложений Azure. Модули помогают сделать замысел основного шаблона более ясным. При желании вы можете повторно использовать модуль службы приложений в других шаблонах.
В процессе вы:
- Добавите новый модуль и переместите в него ресурсы службы приложений.
- Ссылка на модуль из основного шаблона 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@2023-12-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Обратите внимание, что вы скопировали параметры и переменные из вашего шаблона main.bicep, потому что шаблон appService.bicep должен быть самодостаточным.
Сохраните изменения в файле. Обратите внимание, что в Visual Studio Code не отображаются красные волнистые линии, указывающие на предупреждения об отсутствующих переменных, отсутствующих параметрах или недопустимых ресурсах.
Добавить ссылку на модуль из родительского шаблона
Теперь, когда у вас есть полный модуль для развертывания ресурсов службы приложений, вы можете обратиться к модулю в родительском шаблоне. Поскольку модуль развертывает ресурсы службы приложений, вы можете удалить связанные ресурсы и переменные из родительского шаблона.
В файле main.bicep удалите ресурсы службы приложений и определения переменных
appServicePlanName
иappServicePlanSkuName
. Не удаляйте параметры Служба приложений, так как они по-прежнему нужны. Кроме того, не удаляйте параметры, переменные или ресурсы учетной записи хранения.Внизу файла main.bicep добавьте следующий код Bicep:
module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName environmentType: environmentType } }
Обратите внимание, что вы указываете параметры для своего модуля, ссылаясь на параметры в родительском шаблоне.
Сохраните изменения в файле.
Добавьте имя хоста в качестве выходных данных
Добавьте следующий код Bicep в конец файла appService.bicep:
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Этот код объявляет, что выходные данные для этого модуля, который будет называться
appServiceAppHostName
, будет иметь типstring
. Выходные данные будут принимать значение из свойстваdefaultHostName
приложения службы приложений.Сохраните изменения в файле.
Этот вывод объявлен в файле 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@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Если какой-либо файл не соответствует примеру, скопируйте пример или откорректируйте свой шаблон в соответствии с примером.
Разверните обновленный шаблон Bicep
В терминале выполните следующую команду Azure CLI.
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
В терминале выполните следующую команду Azure PowerShell.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
Проверка развертывания
В своем браузере вернитесь на портал Azure. Перейдите в группу ресурсов; Теперь существует два успешных развертывания.
Выберите ссылку 2 Выполнено. Обратите внимание, что у вас есть развертывание с именем main в списке и новое развертывание с именем appService.
Выберите развертывание с именем main, а затем выберите Сведения о развертывании, чтобы развернуть список развернутых ресурсов.
Обратите внимание, что развертывание нашего модуля отображается в списке.
Выберите вкладку Выходные данные. Обратите внимание, что есть результат appServiceAppHostName с именем хоста вашего приложения службы приложений. Скопируйте имя хоста в буфер обмена.
Откройте новую вкладку браузера и вставьте скопированное имя узла. Вы должны увидеть страницу приветствия службы приложений по умолчанию.
Поздравляем! Вы успешно заложили основу для отличного приложения.