Quickstart: Services schalen die zijn geïmplementeerd met de azd Python-websjablonen met bicep
Met de Python-websjablonen azd
kunt u snel een nieuwe webtoepassing maken en deze implementeren in Azure. De azd
sjablonen zijn ontworpen voor het gebruik van goedkope Azure-serviceopties. Ongetwijfeld wilt u de serviceniveaus (of SKU's) aanpassen voor elk van de services die in de sjabloon zijn gedefinieerd voor uw scenario.
In deze quickstart werkt u de juiste bicep-sjabloonbestanden bij om bestaande services op te schalen en nieuwe services toe te voegen aan uw implementatie. Vervolgens voert u de azd provision
opdracht uit en bekijkt u de wijziging die u hebt aangebracht in de Azure-implementatie.
Vereisten
Een Azure-abonnement - Een gratis abonnement maken
U moet het volgende op uw lokale computer hebben geïnstalleerd:
- Azure Developer CLI
- Docker Desktop
- Visual Studio Code
- Dev-containerextensie
- Visual Studio Code Bicep Deze extensie helpt u bij het schrijven van bicep-syntaxis.
Een sjabloon implementeren
Om te beginnen hebt u een werkende azd
implementatie nodig. Zodra u deze hebt ingesteld, kunt u de Bicep-bestanden wijzigen die door de azd
sjabloon zijn gegenereerd.
Volg stap 1 tot en met 7 in het quickstart-artikel. Gebruik in stap 2 de
azure-django-postgres-flexible-appservice
sjabloon. Voor uw gemak vindt u hier de volledige reeks opdrachten die u vanaf de opdrachtregel kunt uitgeven:mkdir azdtest cd azdtest azd init --template azure-django-postgres-flexible-appservice azd auth login azd up
Zodra
azd up
dit is voltooid, opent u Azure Portal, gaat u naar de Azure-app Service die is geïmplementeerd in uw nieuwe resourcegroep en noteert u het App Service-prijsplan (zie de pagina Overzicht van het App Service-plan, de sectie Essentials, de waarde van het prijsplan).In stap 1 van het quickstart-artikel hebt u de opdracht gekregen om de map azdtest te maken. Open die map in Visual Studio Code.
Navigeer in het deelvenster Explorer naar de inframap . Bekijk de submappen en bestanden in de inframap .
Het bestand main.bicep organiseert het maken van alle services die zijn geïmplementeerd bij het uitvoeren van een
azd up
ofazd provision
. Het roept andere bestanden aan, zoals db.bicep en web.bicep, die op hun beurt worden aangeroepen in bestanden die zijn opgenomen in de submap \core .De submap \core is een diep geneste mapstructuur met bicep-sjablonen voor veel Azure-services. Naar sommige bestanden in de submap \core wordt verwezen door de drie bicep-bestanden op het hoogste niveau (main.bicep, db.bicep en web.bicep) en sommige worden helemaal niet gebruikt in dit project.
Een service schalen door de Bicep-eigenschappen te wijzigen
U kunt een bestaande resource in uw implementatie schalen door de bijbehorende SKU te wijzigen. Om dit te laten zien, wijzigt u het App Service-plan van het Basic Service-plan (dat is ontworpen voor apps met lagere verkeersvereisten en hebt u geen geavanceerde functies voor automatisch schalen en verkeersbeheer nodig) in het Standard Service-plan, dat is ontworpen voor het uitvoeren van productieworkloads.
Notitie
Niet alle SKU-wijzigingen kunnen na het feit worden aangebracht. Sommige onderzoeken zijn mogelijk nodig om meer inzicht te krijgen in uw schaalopties.
Open het bestand web.bicep en zoek de
appService
moduledefinitie. Zoek met name naar de instelling van de eigenschap:sku: { name: 'B1' }
Wijzig de waarde als volgt in
B1
S1
:sku: { name: 'S1' }
Belangrijk
Als gevolg van deze wijziging neemt de prijs per uur iets toe. Meer informatie over de verschillende serviceplannen en de bijbehorende kosten vindt u op de pagina met prijzen van App Service.
Als u de toepassing al in Azure hebt geïmplementeerd, gebruikt u de volgende opdracht om wijzigingen in de infrastructuur te implementeren terwijl u de toepassingscode zelf niet opnieuw implementeert.
azd provision
U wordt niet gevraagd om een locatie en abonnement. Deze waarden worden opgeslagen in het .azure<environment-name.env-bestand>, waar
<environment-name>
de omgevingsnaam is die u hebt opgegeven tijdensazd init
.Wanneer
azd provision
dit is voltooid, controleert u of uw webtoepassing nog steeds werkt. Zoek ook het App Service-plan voor uw resourcegroep en controleer of het prijsplan is ingesteld op het Standard Service Plan (S1).
Een nieuwe servicedefinitie toevoegen met Bicep
U kunt een nieuwe resource toevoegen aan uw implementatie door grotere wijzigingen aan te brengen in bicep in het project. Om dit te laten zien, voegt u een exemplaar van Azure Cache voor Redis toe aan uw bestaande implementatie ter voorbereiding op een fictieve nieuwe functie die u op een bepaalde toekomstige datum wilt toevoegen.
Belangrijk
Als gevolg van deze wijziging betaalt u voor een exemplaar van Azure Cache voor Redis totdat u de resource in Azure Portal verwijdert of gebruiktazd down
. Meer informatie over de verschillende serviceplannen en de bijbehorende kosten vindt u op de pagina Azure Cache voor Redis prijzen.
Maak een nieuw bestand in de inframap met de naam redis.bicep. Kopieer en plak de volgende code in het nieuwe bestand:
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
Wijzig het bestand main.bicep om een exemplaar van de redis-resource te maken.
Voeg in het bestand main.bicep de volgende code toe onder de afsluitende accolades die zijn gekoppeld aan de webfront-endsectie en boven de sectie geheimen .
// 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 } }
Uitvoerwaarden toevoegen aan de onderkant van het bestand:
output REDIS_ID string = redis.outputs.REDIS_ID output REDIS_HOST string = redis.outputs.REDIS_HOST
Controleer of het volledige bestand main.bicep identiek is aan de volgende code:
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
Zorg ervoor dat al uw wijzigingen zijn opgeslagen en gebruik vervolgens de volgende opdracht om uw ingerichte resources in Azure bij te werken:
azd provision
Notitie
Afhankelijk van veel factoren kan het toevoegen van een exemplaar van Azure Cache voor Redis aan de bestaande implementatie lang duren. Tijdens het testen hebben we uitvoeringstijden van meer dan 20 minuten ervaren. Zolang u geen fouten ziet, staat u toe dat het proces wordt voortgezet totdat het is voltooid.
Wanneer
azd provision
dit is voltooid, opent u Azure Portal, gaat u naar de resourcegroep voor uw implementatie en controleert u in de lijst met services of u nu een exemplaar van Azure Cache voor Redis hebt.
Hiermee wordt de quickstart afgerond, maar er zijn veel Azure-services waarmee u schaalbare en productieklare toepassingen kunt bouwen. Een goede plek om te beginnen is om meer te weten te komen over Azure API Management, Azure Front Door, Azure CDN en Azure Virtual Network, om er een paar te noemen.
Resources opschonen
Schoon de resources op die door de sjabloon zijn gemaakt door de opdracht azd down uit te voeren.
azd down
Met azd down
de opdracht worden de Azure-resources en de GitHub Actions-werkstroom verwijderd. Wanneer u hierom wordt gevraagd, gaat u akkoord met het verwijderen van alle resources die zijn gekoppeld aan de resourcegroep.
U kunt ook de map azdtest verwijderen of gebruiken als basis voor uw eigen toepassing door de bestanden van het project te wijzigen.
Gerelateerde inhoud
- Meer informatie over de Python-websjablonen
azd
- Meer informatie over de
azd
opdrachten. - Meer informatie over wat alle mappen en bestanden in het project doen en wat u kunt bewerken of verwijderen?
- Werk de Bicep-sjablonen bij om Azure-services toe te voegen of te verwijderen. Ken je Bicep niet? Probeer dit leertraject: Basisprincipes van Bicep
- Gebruiken
azd
om een GitHub Actions CI/CD-pijplijn in te stellen om opnieuw te implementeren bij samenvoegen naar hoofdbranch - Bewaking instellen zodat u uw app kunt bewaken met behulp van de Azure Developer CLI