Rychlý start: Škálování služeb nasazených pomocí webových šablon Pythonu azd pomocí Bicep
Webové azd
šablony Pythonu umožňují rychle vytvořit novou webovou aplikaci a nasadit ji do Azure. Šablony azd
byly navrženy tak, aby používaly nízkonákladové možnosti služeb Azure. Nepochybně budete chtít upravit úrovně služeb (nebo skladové položky) pro každou službu definovanou v šabloně pro váš scénář.
V tomto rychlém startu aktualizujete příslušné soubory šablon bicep, abyste vertikálně navýšit kapacitu stávajících služeb a přidali do nasazení nové služby. Pak spustíte azd provision
příkaz a zobrazíte změnu, kterou jste provedli v nasazení Azure.
Požadavky
Předplatné Azure – Vytvoření předplatného zdarma
V místním počítači musíte mít nainstalovanou následující:
- Azure Developer CLI
- Docker Desktop
- Visual Studio Code
- Rozšíření vývojového kontejneru
- Visual Studio Code Bicep Toto rozšíření vám pomůže vytvořit syntaxi Bicep.
Nasazení šablony
Abyste mohli začít, potřebujete funkční azd
nasazení. Jakmile ho budete mít, budete moct upravit soubory Bicep vygenerované šablonou azd
.
Postupujte podle kroků 1 až 7 v článku Rychlý start. V kroku 2 použijte
azure-django-postgres-flexible-appservice
šablonu. Pro usnadnění vašeho pohodlí tady je celá posloupnost příkazů, které se mají vydat z příkazového řádku:mkdir azdtest cd azdtest azd init --template azure-django-postgres-flexible-appservice azd auth login azd up
Po
azd up
dokončení otevřete Azure Portal, přejděte na službu Aplikace Azure, která byla nasazena ve vaší nové skupině prostředků, a poznamenejte si cenový plán služby App Service (viz stránka Přehled plánu služby App Service, část Základy, hodnota Cenový plán).V kroku 1 článku Rychlý start jste dostali pokyn, abyste vytvořili složku azdtest . Otevřete složku v editoru Visual Studio Code.
V podokně Průzkumník přejděte do složky infra . Sledujte podsložky a soubory ve složce infra .
Soubor main.bicep orchestruje vytvoření všech služeb nasazených při provádění nebo
azd up
azd provision
. Volá do jiných souborů, jako je db.bicep a web.bicep, které pak volají soubory obsažené v podsložce \core .Podsložka \core je hluboce vnořená struktura složek obsahující šablony bicep pro mnoho služeb Azure. Na některé soubory v podsložce \core se odkazují tři soubory bicep nejvyšší úrovně (main.bicep, db.bicep a web.bicep) a některé se v tomto projektu vůbec nepoužívají.
Škálování služby úpravou vlastností Bicep
Existující prostředek v nasazení můžete škálovat změnou jeho skladové položky. Abyste to mohli předvést, změníte plán služby App Service z plánu Služby Basic (který je navržený pro aplikace s nižšími požadavky na provoz a nepotřebujete pokročilé funkce automatického škálování a správy provozu) na plán služby Standard, který je navržený pro spouštění produkčních úloh.
Poznámka:
Ne všechny změny skladové položky se dají provést po faktu. Některé výzkumy můžou být nezbytné k lepšímu pochopení možností škálování.
Otevřete soubor web.bicep a vyhledejte definici
appService
modulu. Konkrétně vyhledejte nastavení vlastnosti:sku: { name: 'B1' }
Změňte hodnotu z
B1
naS1
následující:sku: { name: 'S1' }
Důležité
V důsledku této změny se cena za hodinu mírně zvýší. Podrobnosti o různých plánech služeb a souvisejících nákladech najdete na stránce s cenami služby App Service.
Za předpokladu, že už máte aplikaci nasazenou v Azure, pomocí následujícího příkazu nasaďte změny v infrastruktuře, aniž byste znovu nasadili samotný kód aplikace.
azd provision
Neměli byste být vyzváni k zadání umístění a předplatného. Tyto hodnoty jsou uloženy v souboru .azure<environment-name.env>, kde
<environment-name>
je název prostředí, který jste zadali běhemazd init
.Po
azd provision
dokončení potvrďte, že vaše webová aplikace stále funguje. Vyhledejte také plán služby App Service pro vaši skupinu prostředků a ověřte, že je cenový plán nastavený na plán služby Standard (S1).
Přidání nové definice služby pomocí Bicep
Do nasazení můžete přidat nový prostředek provedením větších změn bicep v projektu. Abyste to mohli předvést, přidáte do stávajícího nasazení instanci Azure Cache for Redis v rámci přípravy na fiktivní novou funkci, kterou plánujete přidat k určitému budoucímu datu.
Důležité
V důsledku této změny budete platit za instanci Azure Cache for Redis, dokud prostředek neodstraníte na webu Azure Portal nebo pomocí azd down
. Podrobnosti o různých plánech služeb a souvisejících nákladech najdete na stránce s cenami služby Azure Cache for Redis.
Ve složce infra vytvořte nový soubor s názvem redis.bicep. Zkopírujte a vložte do nového souboru následující kód:
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
Upravte soubor main.bicep tak, aby vytvořil instanci prostředku "redis".
Do souboru main.bicep přidejte následující kód pod koncovou složenou závorku přidruženou k části Webový front-end a nad oddíl tajných kódů.
// 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 } }
Přidejte výstupní hodnoty do dolní části souboru:
output REDIS_ID string = redis.outputs.REDIS_ID output REDIS_HOST string = redis.outputs.REDIS_HOST
Ověřte, že celý soubor main.bicep je shodný s následujícím kódem:
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
Ujistěte se, že jsou všechny vaše změny uložené, a pak pomocí následujícího příkazu aktualizujte zřízené prostředky v Azure:
azd provision
Poznámka:
V závislosti na mnoha faktorech může přidání instance Azure Cache for Redis do stávajícího nasazení trvat dlouhou dobu. Při testování jsme zaznamenali dobu provádění přesahující 20 minut. Pokud se nezobrazí žádné chyby, povolte, aby proces pokračoval až do dokončení.
Po
azd provision
dokončení otevřete Azure Portal, přejděte do skupiny prostředků pro vaše nasazení a v seznamu služeb potvrďte, že teď máte instanci Azure Cache for Redis.
Tím dojde k závěru rychlého startu, ale existuje mnoho služeb Azure, které vám můžou pomoct sestavovat škálovatelné a připravené aplikace pro produkční prostředí. Skvělým místem, kde začít, by bylo seznámit se se službou Azure API Management, Azure Front Door, Azure CDN a službou Azure Virtual Network a pojmenovat několik z nich.
Vyčištění prostředků
Vyčistěte prostředky vytvořené šablonou spuštěním příkazu azd down .
azd down
Příkaz azd down
odstraní prostředky Azure a pracovní postup GitHub Actions. Po zobrazení výzvy přijměte souhlas s odstraněním všech prostředků přidružených ke skupině prostředků.
Složku azdtest můžete také odstranit nebo ji použít jako základ pro vlastní aplikaci úpravou souborů projektu.
Související obsah
- Další informace o webových
azd
šablonách Pythonu - Přečtěte si další informace o
azd
příkazech. - Zjistěte, co jednotlivé složky a soubory v projektu dělají a co můžete upravovat nebo odstraňovat?
- Aktualizujte šablony Bicep a přidejte nebo odeberte služby Azure. Neznáte Bicep? Vyzkoušejte tuto Učení cestu: Základy Bicep
- Slouží
azd
k nastavení kanálu CI/CD GitHub Actions k opětovnému nasazení při sloučení do hlavní větve. - Nastavení monitorování, abyste mohli monitorovat aplikaci pomocí Azure Developer CLI