Упражнение. Создание и использование модуля
Вам поручили добавить сеть доставки содержимого (CDN) на веб-сайт компании, посвященный выпуску игрушечного вомбата. Однако другие отделы вашей компании сообщили, что им не нужна такая сеть. В этом упражнении вы будете создавать модули для веб-сайта и CDN, а также добавлять модули в шаблон.
В процессе вы:
- Добавьте модуль для приложения.
- Создайте шаблон Bicep, который использует модуль.
- Добавьте еще один модуль для CDN.
- Добавьте модуль CDN в шаблон, настроив его как необязательный.
- Разверните шаблон в Azure.
- Проверьте журнал развертывания.
В этом упражнении используется расширение Bicep для Visual Studio Code. Убедитесь, что это расширение установлено в Visual Studio Code.
Создание пустого файла Bicep
Откройте Visual Studio Code.
Создайте файл с именем main.bicep.
Сохраните пустой файл, куда Visual Studio Code загрузит средства Bicep.
Можно выбрать команду Файл>Сохранить как или нажать клавиши CTRL+S в Windows (⌘+S в macOS). Запомните расположение, в котором вы сохранили файл. Например, можно создать папку templates, куда будет сохранен файл.
Создайте модуль приложения
Создайте новую папку с именем модули в той же папке, где вы создали файл main.bicep. В папке modules создайте файл с именем app.bicep. Сохраните файл.
Добавьте в файл app.bicep следующее содержимое:
@description('The Azure region into which the resources should be deployed.') param location string @description('The name of the App Service app.') param appServiceAppName string @description('The name of the App Service plan.') param appServicePlanName string @description('The name of the App Service plan SKU.') param appServicePlanSkuName string 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 } } @description('The default host name of the App Service app.') output appServiceAppHostName string = appServiceApp.properties.defaultHostName
Этот файл выполняет развертывание плана службы приложений Azure и приложения. Обратите внимание, что модуль является универсальным. Он не содержит никаких предположений относительно имен ресурсов или SKU плана службы приложений. Это упрощает повторное использование модуля для различных развертываний.
Сохраните изменения в файле.
Добавление модуля в шаблон Bicel
Здесь вы добавляете в шаблон Bicep модуль приложения как отправную точку.
Откройте файл main.bicep.
Добавьте в файл следующие параметры и переменную:
@description('The Azure region into which the resources should be deployed.') param location string = 'westus3' @description('The name of the App Service app.') param appServiceAppName string = 'toy-${uniqueString(resourceGroup().id)}' @description('The name of the App Service plan SKU.') param appServicePlanSkuName string = 'F1' var appServicePlanName = 'toy-product-launch-plan'
Поскольку это шаблон, который вы планируете развернуть для веб-сайтов игрушек, он будет немного более специфическим. Имя плана службы приложений определяется как переменная. Параметр SKU имеет значение по умолчанию, которое имеет смысл для веб-сайта, посвященного выпуску игрушки.
Совет
Вы указываете, что параметру
location
должно быть присвоено значениеwestus3
. Обычно ресурсы создаются в том же расположении, что и группа ресурсов, с помощью свойстваresourceGroup().location
. Но при работе с песочницей Microsoft Learn необходимо использовать определенные регионы Azure, которые не совпадают с расположением группы ресурсов.Под параметрами создайте пустую строку. Теперь введите первую строку определения модуля приложения:
module app 'modules/app.bicep' = {
В процессе ввода обратите внимание, что расширение Bicep для Visual Studio Code помогает сформировать шаблон объявления модуля. При вводе пути к модулю и вводе символа равенства (
=
) всплывающее меню отображается с несколькими параметрами.Выберите обязательные свойства во всплывающем меню:
Завершите объявление модуля:
module app 'modules/app.bicep' = { name: 'toy-launch-app' params: { appServiceAppName: appServiceAppName appServicePlanName: appServicePlanName appServicePlanSkuName: appServicePlanSkuName location: location } }
В нижней части файла определите выходные данные:
@description('The host name to use to access the website.') output websiteHostName string = app.outputs.appServiceAppHostName
Сохраните изменения в файле.
Создание модуля для сети доставки содержимого
В папке modules создайте файл с именем cdn.bicep. Сохраните файл.
Добавьте в файл cdn.bicep следующее содержимое:
@description('The host name (address) of the origin server.') param originHostName string @description('The name of the CDN profile.') param profileName string = 'cdn-${uniqueString(resourceGroup().id)}' @description('The name of the CDN endpoint') param endpointName string = 'endpoint-${uniqueString(resourceGroup().id)}' @description('Indicates whether the CDN endpoint requires HTTPS connections.') param httpsOnly bool var originName = 'my-origin' resource cdnProfile 'Microsoft.Cdn/profiles@2024-09-01' = { name: profileName location: 'global' sku: { name: 'Standard_Microsoft' } } resource endpoint 'Microsoft.Cdn/profiles/endpoints@2024-09-01' = { parent: cdnProfile name: endpointName location: 'global' properties: { originHostHeader: originHostName isHttpAllowed: !httpsOnly isHttpsAllowed: true queryStringCachingBehavior: 'IgnoreQueryString' contentTypesToCompress: [ 'text/plain' 'text/html' 'text/css' 'application/x-javascript' 'text/javascript' ] isCompressionEnabled: true origins: [ { name: originName properties: { hostName: originHostName } } ] } } @description('The host name of the CDN endpoint.') output endpointHostName string = endpoint.properties.hostName
Этот файл развертывает два ресурса: профиль CDN и конечную точку CDN.
Сохраните изменения в файле.
Добавление модулей в основной шаблон Bicep
Откройте файл main.bicep.
Под параметром
appServicePlanSkuName
добавьте следующие параметры:@description('Indicates whether a CDN should be deployed.') param deployCdn bool = true
Под определением модуля
app
определите модульcdn
:module cdn 'modules/cdn.bicep' = if (deployCdn) { name: 'toy-launch-cdn' params: { httpsOnly: true originHostName: app.outputs.appServiceAppHostName } }
Обратите внимание, что модуль имеет условие: развертывание модуля выполняется только в том случае, если значение параметра
deployCdn
равноtrue
. Кроме того, обратите внимание, что параметрoriginHostName
модуля имеет значение, равное значению выходных данныхappServiceAppHostName
модуляapp
.Обновите выходные данные имени узла, чтобы обеспечить выбор правильного имени узла. При развертывании CDN необходимо, чтобы имя узла совпадало с именем конечной точки CDN.
output websiteHostName string = deployCdn ? cdn.outputs.endpointHostName : app.outputs.appServiceAppHostName
Сохраните изменения в файле.
Проверьте файл Bicep
После завершения всех предыдущих изменений файл main.bicep должен выглядеть следующим образом:
@description('The Azure region into which the resources should be deployed.')
param location string = 'westus3'
@description('The name of the App Service app.')
param appServiceAppName string = 'toy-${uniqueString(resourceGroup().id)}'
@description('The name of the App Service plan SKU.')
param appServicePlanSkuName string = 'F1'
@description('Indicates whether a CDN should be deployed.')
param deployCdn bool = true
var appServicePlanName = 'toy-product-launch-plan'
module app 'modules/app.bicep' = {
name: 'toy-launch-app'
params: {
appServiceAppName: appServiceAppName
appServicePlanName: appServicePlanName
appServicePlanSkuName: appServicePlanSkuName
location: location
}
}
module cdn 'modules/cdn.bicep' = if (deployCdn) {
name: 'toy-launch-cdn'
params: {
httpsOnly: true
originHostName: app.outputs.appServiceAppHostName
}
}
@description('The host name to use to access the website.')
output websiteHostName string = deployCdn ? cdn.outputs.endpointHostName : app.outputs.appServiceAppHostName
Если это не так, скопируйте пример или измените шаблон в соответствии с примером.
Разверните шаблон Bicep в Azure
Чтобы развернуть этот шаблон в Azure, необходимо войти в свою учетную запись Azure из терминала Visual Studio Code. У вас также должен быть установлен интерфейс Azure CLI, и необходимо войти под той же учетной записью, с которой вы активировали песочницу.
В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.
Если окно терминала отображает bash справа , это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки Bash справа, его можно выбрать для запуска оболочки.
Если появится оболочка, отличной от bash , выберите стрелку раскрывающегося списка оболочки и выберите Git Bash.
Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:
cd templates
Установка Bicep
Выполните следующую команду, чтобы убедиться, что у вас установлена последняя версия Bicep:
az bicep install && az bicep upgrade
Вход в Azure
В окне терминала Visual Studio Code войдите в Azure, выполнив следующую команду:
az login
В открывшемся браузере войдите в свою учетную запись Azure. Терминал Visual Studio Code отобразит список подписок, связанных с данной учетной записью. Выберите подписку с именем "Подписка Concierge".
Если вы недавно использовали несколько песочниц, в терминале может отображаться несколько экземпляров подписки Concierge. В этом случае для установки подписки по умолчанию выполните указанные ниже два шага.
Получите идентификаторы подписок Concierge.
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
Задайте подписку по умолчанию, используя идентификатор подписки. Замените строку {your subscription ID} на идентификатор последней подписки Concierge.
az account set --subscription {your subscription ID}
Установка группы ресурсов по умолчанию
При использовании Azure CLI можно установить группу ресурсов по умолчанию и опустить параметр в остальных командах Azure CLI в этом упражнении. Установите по умолчанию группу ресурсов, созданную для вас в среде песочницы.
az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"
Развертывание шаблона в Azure
Запустите следующий код из терминала в Visual Studio Code, чтобы развернуть шаблон Bicep в Azure. Этот процесс может занять пару минут. Затем вы увидите, что развертывание успешно выполнено.
az deployment group create --name main --template-file main.bicep
Статус Running...
появится в окне терминала.
Чтобы развернуть этот шаблон в Azure, войдите в свою учетную запись Azure из терминала Visual Studio Code. Убедитесь, что вы установили Azure PowerShell, и войдите в ту же учетную запись, которая активировала песочницу.
В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.
Если окно терминала отображает pwsh или powershell справа, это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки PowerShell справа, его можно выбрать для запуска оболочки.
Если появится оболочка, отличной от pwsh или PowerShell , выберите стрелку раскрывающегося списка оболочки и выберите PowerShell.
Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:
Set-Location -Path templates
Установите Bicep CLI
Чтобы использовать Bicep из Azure PowerShell, установите Bicep CLI.
Вход в Azure с помощью Azure PowerShell
В окне терминала Visual Studio Code выполните следующую команду:
Connect-AzAccount
Откроется браузер, в котором вы можете выполнить вход в учетную запись Azure. Браузер может быть открыт в фоновом режиме.
После входа в Azure в окне терминала появится список подписок, связанных с этой учетной записью. Если вы активировали песочницу, отобразится подписка с именем Подписка Concierge. Выберите его для остальной части упражнения.
Если вы недавно использовали несколько песочниц, в терминале может отображаться несколько экземпляров подписки Concierge. В этом случае для установки подписки по умолчанию выполните указанные ниже два шага.
Получите идентификатор подписки. Следующая команда выдаст список ваших подписок с идентификаторами. Найдите
Concierge Subscription
, а затем скопируйте идентификатор из второго столбца. Оно будет выглядеть примерно так —aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.Get-AzSubscription
Измените активную подписку на подписку Concierge. Обязательно замените заполнитель {Your subscription ID} (Ваш идентификатор подписки) идентификатором, который вы скопировали.
$context = Get-AzSubscription -SubscriptionId {Your subscription ID} Set-AzContext $context
Установка группы ресурсов по умолчанию
Вы можете установить группу ресурсов по умолчанию и опустить параметр в остальных командах Azure PowerShell в этом упражнении. Установите по умолчанию группу ресурсов, созданную для вас в окружении песочницы.
Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>
Развертывание шаблона в Azure
Разверните шаблон в Azure, выполнив следующие команды Azure PowerShell в терминале. Это может занять пару минут. Затем вы увидите, что развертывание успешно выполнено.
New-AzResourceGroupDeployment -Name main -TemplateFile main.bicep
Проверьте журнал развертывания.
Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы:
- Выберите свой аватар в правом верхнем углу страницы.
- Выберите Переключить каталог. В списке выберите каталог Песочница Microsoft Learn.
На левой панели выберите Группы ресурсов.
Выберите "
[имя группы ресурсов песочницы] "В меню слева выберите Развертывания.
В списке перечислены три развертывания.
Выберите главное развертывание и разверните узел Сведения о развертывании.
Обратите внимание, что указаны оба модуля, и их типы отображаются как
Microsoft.Resources/deployments
. Модули включены в список дважды, так как в шаблоне также имеется ссылка на их выходные данные.Выберите развертывания toy-launch-cdn и toy-launch-app и просмотрите ресурсы, которые были развернуты в рамках каждого из них. Обратите внимание, что они соответствуют ресурсам, определенным в соответствующем модуле.
Тестирование веб-сайта
Выберите развертывание toy-launch-app.
Выберите Выходные данные.
Нажмите кнопку копирования для выходных данных
appServiceAppHostName
.В новой вкладке браузера попробуйте перейти по адресу, скопированному в предыдущем шаге. Адрес должен начинаться с
https://
.Откроется страница приветствия службы приложений, где показано, что вы успешно развернули приложение.
Перейдите к главному развертыванию и выберите Выходные данные.
Скопируйте значение выходных данных
websiteHostName
. Обратите внимание, что это имя узла отличается, так как это имя узла для сети доставки содержимого Azure.В новой вкладке браузера попробуйте перейти к имени узла, скопированному в предыдущем шаге. Добавьте
https://
в начало адреса.Конечные точки CDN станут активными через несколько минут. Если вы не нашли ошибку страницы, подождите несколько минут и повторите попытку вставки ссылки. Кроме того, убедитесь, в том что вы добавили
https://
в начало URL-адреса, чтобы использовать HTTPS.Когда конечная точка CDN активна, вы увидите ту же страницу приветствия службы приложений. На этот раз она обслуживается службой сети доставки содержимого Azure, что позволяет повысить производительность веб-сайта.