Краткое руководство. Масштабирование служб, развернутых с помощью веб-шаблонов azd Python с помощью Bicep
Веб-шаблоны Python позволяют быстро создавать веб-приложение azd
и развертывать его в Azure. azd
Шаблоны предназначены для использования параметров службы Azure с низкой стоимостью. Несомненно, вы хотите настроить уровни обслуживания (или skus) для каждого из служб, определенных в шаблоне для вашего сценария.
В этом кратком руководстве вы обновите соответствующие файлы шаблонов bicep, чтобы увеличить масштаб существующих служб и добавить новые службы в развертывание. Затем выполните azd provision
команду и просмотрите изменения, внесенные в развертывание Azure.
Необходимые компоненты
подписка Azure — создайте бесплатную учетную запись.
На локальном компьютере должно быть установлено следующее:
- Интерфейс командной строки разработчика Azure
- Docker Desktop
- Visual Studio Code
- Расширение контейнера разработки
- Это расширение Visual Studio Code Bicep помогает создавать синтаксис Bicep .
Развертывание шаблона
Для начала вам потребуется рабочее azd
развертывание. После этого вы сможете изменить файлы Bicep, созданные шаблоном azd
.
Выполните шаги 1–7 в статье "Краткое руководство". На шаге 2 используйте
azure-django-postgres-flexible-appservice
шаблон. Для удобства выполните всю последовательность команд из командной строки:mkdir azdtest cd azdtest azd init --template azure-django-postgres-flexible-appservice azd auth login azd up
После
azd up
завершения откройте портал Azure, перейдите к службе приложение Azure, развернутой в новой группе ресурсов, и запишите план ценообразования Служба приложений (см. страницу обзора плана Служба приложений, раздел "Основные сведения", значение "Ценовый план").На шаге 1 статьи краткого руководства вам было показано, как создать папку azdtest . Откройте папку в Visual Studio Code.
В области Обозреватель перейдите в папку инфра. Просмотрите вложенные папки и файлы в инфраструктуре.
Файл main.bicep управляет созданием всех служб, развернутых при выполнении
azd up
илиazd provision
. Он вызывает другие файлы, такие как db.bicep и web.bicep, которые, в свою очередь, вызывают файлы, содержащиеся в подпапке \core.Вложенная папка \core — это глубоко вложенная структура папок, содержащая шаблоны bicep для многих служб Azure. Некоторые файлы в подпапке \core ссылаются на три файла bicep верхнего уровня (main.bicep, db.bicep и web.bicep) и некоторые из них не используются вообще в этом проекте.
Масштабирование службы путем изменения его свойств Bicep
Вы можете масштабировать существующий ресурс в развертывании, изменив его номер SKU. Чтобы продемонстрировать это, вы измените план Служба приложений с "Базовый план обслуживания" (который предназначен для приложений с более низкими требованиями к трафику и не требует расширенных функций автоматического масштабирования и управления трафиком) на план "Стандартный план обслуживания", который предназначен для выполнения рабочих рабочих нагрузок.
Примечание.
Не все изменения номера SKU можно вносить после факта. Некоторые исследования могут потребоваться для лучшего понимания вариантов масштабирования.
Откройте файл web.bicep и найдите
appService
определение модуля. В частности, найдите параметр свойства:sku: { name: 'B1' }
Измените значение следующим
B1
S1
образом:sku: { name: 'S1' }
Внимание
В результате этого изменения цена за час немного увеличится. Сведения о различных планах обслуживания и связанных с ними затратах можно найти на странице цен на Служба приложений.
Если у вас уже есть приложение, развернутое в Azure, используйте следующую команду, чтобы развернуть изменения в инфраструктуре, не развертывая сам код приложения.
azd provision
Вам не следует запрашивать расположение и подписку. Эти значения сохраняются в файле .azure<environment-name.env>, где
<environment-name>
указано имя среды, предоставленное во времяazd init
.По
azd provision
завершении убедитесь, что веб-приложение по-прежнему работает. Кроме того, найдите план Служба приложений для группы ресурсов и убедитесь, что для плана ценообразования задан стандартный план обслуживания (S1).
Добавление нового определения службы с помощью Bicep
Вы можете добавить новый ресурс в развертывание, внося более крупные изменения в Bicep в проект. Чтобы продемонстрировать это, вы добавите экземпляр Кэш Azure для Redis в существующее развертывание при подготовке к вымышленной новой функции, которую вы планируете добавить в некоторые будущие даты.
Внимание
В результате этого изменения вы будете платить за экземпляр Кэш Azure для Redis, пока не удалите ресурс в портал Azure или используетеazd down
. Сведения о различных планах обслуживания и их связанных затратах можно найти на странице цен Кэш Azure для Redis.
Создайте новый файл в папке с именем redis.bicep. Скопируйте и вставьте следующий код в новый файл:
param name string param location string = resourceGroup().location param tags object = {} param keyVaultName string param connStrKeyName string param passwordKeyName string param primaryKeyKeyName string @allowed([ 'Enabled' 'Disabled' ]) param publicNetworkAccess string = 'Enabled' @allowed([ 'C' 'P' ]) param skuFamily string = 'C' @allowed([ 0 1 2 3 4 5 6 ]) param skuCapacity int = 1 @allowed([ 'Basic' 'Standard' 'Premium' ]) param skuName string = 'Standard' param saveKeysToVault bool = true resource redis 'Microsoft.Cache/redis@2020-12-01' = { name: name location: location properties: { sku: { capacity: skuCapacity family: skuFamily name: skuName } publicNetworkAccess: publicNetworkAccess enableNonSslPort: true } tags: tags } resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { name: keyVaultName } resource redisKey 'Microsoft.KeyVault/vaults/secrets@2022-07-01' = if (saveKeysToVault) { name: primaryKeyKeyName parent: keyVault properties: { value: redis.listKeys().primaryKey } } resource redisConnStr 'Microsoft.KeyVault/vaults/secrets@2018-02-14' = if (saveKeysToVault) { name: connStrKeyName parent: keyVault properties: { value: '${name}.redis.cache.windows.net,abortConnect=false,ssl=true,password=${redis.listKeys().primaryKey}' } } resource redisPassword 'Microsoft.KeyVault/vaults/secrets@2018-02-14' = if (saveKeysToVault) { name: passwordKeyName parent: keyVault properties: { value: redis.listKeys().primaryKey } } output REDIS_ID string = redis.id output REDIS_HOST string = redis.properties.hostName
Измените файл main.bicep , чтобы создать экземпляр ресурса Redis.
В файле main.bicep добавьте следующий код под конечными фигурными скобками, связанными с разделом веб-интерфейса и выше раздела секретов.
// Caching server module redis 'redis.bicep' = { name: 'redis' scope: resourceGroup params: { name: replace('${take(prefix, 19)}-rds', '--', '-') location: location tags: tags keyVaultName: keyVault.outputs.name connStrKeyName: 'RedisConnectionString' passwordKeyName: 'RedisPassword' primaryKeyKeyName: 'RedisPrimaryKey' publicNetworkAccess: 'Enabled' skuFamily: 'C' skuCapacity: 1 skuName: 'Standard' saveKeysToVault: true } }
Добавьте выходные значения в нижней части файла:
output REDIS_ID string = redis.outputs.REDIS_ID output REDIS_HOST string = redis.outputs.REDIS_HOST
Убедитесь, что весь файл main.bicep идентичен следующему коду:
targetScope = 'subscription' @minLength(1) @maxLength(64) @description('Name which is used to generate a short unique hash for each resource') param name string @minLength(1) @description('Primary location for all resources') param location string @secure() @description('DBServer administrator password') param dbserverPassword string @secure() @description('Secret Key') param secretKey string @description('Id of the user or app to assign application roles') param principalId string = '' var resourceToken = toLower(uniqueString(subscription().id, name, location)) var prefix = '${name}-${resourceToken}' var tags = { 'azd-env-name': name } resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { name: '${name}-rg' location: location tags: tags } // Store secrets in a keyvault module keyVault './core/security/keyvault.bicep' = { name: 'keyvault' scope: resourceGroup params: { name: '${take(replace(prefix, '-', ''), 17)}-vault' location: location tags: tags principalId: principalId } } module db 'db.bicep' = { name: 'db' scope: resourceGroup params: { name: 'dbserver' location: location tags: tags prefix: prefix dbserverDatabaseName: 'relecloud' dbserverPassword: dbserverPassword } } // Monitor application with Azure Monitor module monitoring 'core/monitor/monitoring.bicep' = { name: 'monitoring' scope: resourceGroup params: { location: location tags: tags applicationInsightsDashboardName: '${prefix}-appinsights-dashboard' applicationInsightsName: '${prefix}-appinsights' logAnalyticsName: '${take(prefix, 50)}-loganalytics' // Max 63 chars } } // Web frontend module web 'web.bicep' = { name: 'web' scope: resourceGroup params: { name: replace('${take(prefix, 19)}-appsvc', '--', '-') location: location tags: tags applicationInsightsName: monitoring.outputs.applicationInsightsName keyVaultName: keyVault.outputs.name appCommandLine: 'entrypoint.sh' pythonVersion: '3.12' dbserverDomainName: db.outputs.dbserverDomainName dbserverUser: db.outputs.dbserverUser dbserverDatabaseName: db.outputs.dbserverDatabaseName } } // Caching server module redis 'redis.bicep' = { name: 'redis' scope: resourceGroup params: { name: replace('${take(prefix, 19)}-rds', '--', '-') location: location tags: tags keyVaultName: keyVault.outputs.name connStrKeyName: 'RedisConnectionString' passwordKeyName: 'RedisPassword' primaryKeyKeyName: 'RedisPrimaryKey' publicNetworkAccess: 'Enabled' skuFamily: 'C' skuCapacity: 1 skuName: 'Standard' saveKeysToVault: true } } var secrets = [ { name: 'DBSERVERPASSWORD' value: dbserverPassword } { name: 'SECRETKEY' value: secretKey } ] @batchSize(1) module keyVaultSecrets './core/security/keyvault-secret.bicep' = [for secret in secrets: { name: 'keyvault-secret-${secret.name}' scope: resourceGroup params: { keyVaultName: keyVault.outputs.name name: secret.name secretValue: secret.value } }] output AZURE_LOCATION string = location output AZURE_KEY_VAULT_ENDPOINT string = keyVault.outputs.endpoint output AZURE_KEY_VAULT_NAME string = keyVault.outputs.name output APPLICATIONINSIGHTS_NAME string = monitoring.outputs.applicationInsightsName output BACKEND_URI string = web.outputs.uri output REDIS_ID string = redis.outputs.REDIS_ID output REDIS_HOST string = redis.outputs.REDIS_HOST
Убедитесь, что все изменения сохранены, а затем выполните следующую команду, чтобы обновить подготовленные ресурсы в Azure:
azd provision
Примечание.
В зависимости от многих факторов добавление экземпляра Кэш Azure для Redis в существующее развертывание может занять много времени. При тестировании время выполнения превышает 20 минут. Если вы не видите никаких ошибок, разрешите процессу продолжаться до завершения.
По
azd provision
завершении откройте портал Azure, перейдите в группу ресурсов для развертывания и в списке служб убедитесь, что у вас есть экземпляр Кэш Azure для Redis.
В этом кратком руководстве содержится множество служб Azure, которые помогут вам создавать более масштабируемые и готовые к работе приложения. Чтобы начать, вы узнаете о Azure Управление API, Azure Front Door, Azure CDN и Azure виртуальная сеть, чтобы назвать несколько.
Очистка ресурсов
Очистите ресурсы, созданные шаблоном , выполнив команду azd down .
azd down
Команда azd down
удаляет ресурсы Azure и рабочий процесс GitHub Actions. При появлении запроса примите согласие на удаление всех ресурсов, связанных с группой ресурсов.
Вы также можете удалить папку azdtest или использовать ее в качестве основы для собственного приложения, изменив файлы проекта.
См. также
- Дополнительные сведения о веб-шаблонах
azd
Python - Дополнительные сведения о
azd
командах. - Узнайте, какие папки и файлы в проекте можно изменить или удалить?
- Обновите шаблоны Bicep, чтобы добавить или удалить службы Azure. Не знаю Bicep? Попробуйте использовать этот Обучение путь: основы Bicep
- Использование
azd
для настройки конвейера CI/CD GitHub Actions для повторного развертывания при слиянии в основной ветви - Настройка мониторинга, чтобы вы могли отслеживать приложение с помощью Интерфейса командной строки разработчика Azure