Hızlı Başlangıç: Bicep kullanarak azd Python web şablonlarıyla dağıtılan hizmetleri ölçeklendirme
Python web azd
şablonları hızlı bir şekilde yeni bir web uygulaması oluşturmanıza ve bunu Azure'a dağıtmanıza olanak sağlar. Şablonlar azd
, düşük maliyetli Azure hizmet seçeneklerini kullanacak şekilde tasarlanmıştır. Kuşkusuz, senaryonuz için şablonda tanımlanan hizmetlerin her biri için hizmet düzeylerini (veya sku'ları) ayarlamak isteyeceksiniz.
Bu Hızlı Başlangıçta, mevcut hizmetlerin ölçeğini genişletmek ve dağıtımınıza yeni hizmetler eklemek için uygun bicep şablon dosyalarını güncelleştireceksiniz. Ardından komutunu çalıştıracak azd provision
ve Azure dağıtımında yaptığınız değişikliği görüntüleyebilirsiniz.
Önkoşullar
Azure aboneliği - Ücretsiz bir abonelik oluşturun
Yerel bilgisayarınızda aşağıdakilerin yüklü olması gerekir:
- Azure Geliştirici CLI'sı
- Docker Desktop
- Visual Studio Code
- Dev Kapsayıcı Uzantısı
- Visual Studio Code Bicep Bu uzantı, Bicep söz dizimi yazmanıza yardımcı olur.
Şablon dağıtma
Başlamak için çalışan azd
bir dağıtıma ihtiyacınız vardır. Bunu yaptıktan sonra şablon tarafından azd
oluşturulan Bicep dosyalarını değiştirebilirsiniz.
Hızlı Başlangıç makalesindeki 1 ile 7 arasında adımları izleyin. 2. adımda şablonu kullanın
azure-django-postgres-flexible-appservice
. Kolaylık olması için, komut satırından verilen tüm komut dizisi aşağıda verilmiştir:mkdir azdtest cd azdtest azd init --template azure-django-postgres-flexible-appservice azd auth login azd up
İşlem tamamlandıktan sonra
azd up
Azure portalını açın, yeni Kaynak Grubunuzda dağıtılan Azure Uygulaması Hizmeti'ne gidin ve App Service fiyatlandırma planını not alın (App Service planının Genel Bakış sayfası, Temel Parçalar bölümüne bakın, "Fiyatlandırma planı" değeri).Hızlı Başlangıç makalesinin 1. adımında azdtest klasörünü oluşturmanız istenir. Bu klasörü Visual Studio Code'da açın.
Gezgin bölmesinde infra klasörüne gidin. infra klasöründeki alt klasörleri ve dosyaları gözlemleyin.
main.bicep dosyası, veya
azd provision
gerçekleştirirken dağıtılan tüm hizmetlerin oluşturulmasınıazd up
düzenler. Db.bicep ve web.bicep gibi diğer dosyaları çağırır ve bu da \core alt klasöründe bulunan dosyalara çağrır.\core alt klasörü, birçok Azure hizmeti için bicep şablonları içeren derin iç içe yerleştirilmiş bir klasör yapısıdır. \core alt klasöründeki dosyalardan bazıları üç üst düzey bicep dosyası (main.bicep, db.bicep ve web.bicep) tarafından başvurulur ve bazıları bu projede hiç kullanılmaz.
Bicep özelliklerini değiştirerek hizmeti ölçeklendirme
Dağıtımınızdaki mevcut bir kaynağı SKU'sunu değiştirerek ölçeklendikleyebilirsiniz. Bunu göstermek için App Service planını "Temel Hizmet planı" (daha düşük trafik gereksinimlerine sahip uygulamalar için tasarlanmıştır ve gelişmiş otomatik ölçeklendirme ve trafik yönetimi özelliklerine ihtiyaç duymayan uygulamalar için tasarlanmıştır) yerine üretim iş yüklerini çalıştırmak için tasarlanmış olan "Standart Hizmet planı" olarak değiştireceksiniz.
Not
Bu olgudan sonra tüm SKU değişiklikleri yapılamaz. Ölçeklendirme seçeneklerinizi daha iyi anlamak için bazı araştırmalar gerekebilir.
web.bicep dosyasını açın ve modül tanımını bulun
appService
. Özellikle özellik ayarını arayın:sku: { name: 'B1' }
değerini
B1
S1
şu şekilde değiştirin:sku: { name: 'S1' }
Önemli
Bu değişikliğin sonucunda saat başına fiyat biraz artacaktır. Farklı hizmet planları ve bunların ilişkili maliyetleri hakkındaki ayrıntılar App Service fiyatlandırma sayfasında bulunabilir.
Uygulamayı Azure'da zaten dağıttığınızı varsayarsak, uygulama kodunun kendisini yeniden dağıtmadan altyapıya değişiklikleri dağıtmak için aşağıdaki komutu kullanın.
azd provision
Konum ve abonelik istenmemelidir. Bu değerler .azure<environment-name.env> dosyasına kaydedilir; burada
<environment-name>
sırasındaazd init
sağladığınız ortam adıdır.azd provision
Tamamlandığında web uygulamanızın çalışmaya devam ettiğinden emin olun. Ayrıca Kaynak Grubunuz için App Service Planı'nı bulun ve Fiyatlandırma Planının Standart Hizmet Planı (S1) olarak ayarlandığını onaylayın.
Bicep ile yeni hizmet tanımı ekleme
Projedeki Bicep'te daha büyük değişiklikler yaparak dağıtımınıza yeni bir kaynak ekleyebilirsiniz. Bunu göstermek için, gelecekteki bir tarihte eklemeyi planladığınız kurgusal yeni bir özelliğe hazırlanmak için mevcut dağıtımınıza bir Redis için Azure Cache örneği ekleyeceksiniz.
Önemli
Bu değişikliğin bir sonucu olarak, Azure portalında veya kullanarak azd down
kaynağı silene kadar bir Redis için Azure Cache örneği için ödeme yapacaksınız. Farklı hizmet planları ve bunların ilişkili maliyetleri hakkındaki ayrıntılar Redis için Azure Cache fiyatlandırma sayfasında bulunabilir.
infra klasöründe redis.bicep adlı yeni bir dosya oluşturun. Aşağıdaki kodu kopyalayıp yeni dosyaya yapıştırın:
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 dosyasını değiştirerek "redis" kaynağının bir örneğini oluşturun.
main.bicep dosyasında, Web ön uç bölümüyle ilişkili son küme ayraçlarının altına ve gizli diziler bölümünün üstüne aşağıdaki kodu ekleyin.
// 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 } }
Dosyanın en altına çıkış değerleri ekleyin:
output REDIS_ID string = redis.outputs.REDIS_ID output REDIS_HOST string = redis.outputs.REDIS_HOST
Main.bicep dosyasının tamamının aşağıdaki kodla aynı olduğunu onaylayın:
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
Tüm değişikliklerinizin kaydedildiğinden emin olun, ardından Azure'da sağlanan kaynaklarınızı güncelleştirmek için aşağıdaki komutu kullanın:
azd provision
Not
Birçok faktöre bağlı olarak, mevcut dağıtıma bir Redis için Azure Cache örneği eklemek uzun sürebilir. Testte yürütme sürelerinin 20 dakikadan fazla olduğunu belirledik. Herhangi bir hata görmediğiniz sürece, işlemin tamamlanana kadar devam etmesine izin verin.
İşlem
azd provision
tamamlandığında Azure portalını açın, dağıtımınız için Kaynak Grubu'na gidin ve hizmetler listesinde artık bir Redis için Azure Cache örneğine sahip olduğunuzu onaylayın.
Bu, Hızlı Başlangıç'ı sona erdirir, ancak daha ölçeklenebilir ve üretime hazır uygulamalar oluşturmanıza yardımcı olabilecek birçok Azure hizmeti vardır. Başlangıç olarak Azure API Management, Azure Front Door, Azure CDN ve Azure Sanal Ağ hakkında bilgi edinmek iyi bir başlangıç olabilir.
Kaynakları temizleme
azd down komutunu çalıştırarak şablon tarafından oluşturulan kaynakları temizleyin.
azd down
komutu Azure azd down
kaynaklarını ve GitHub Actions iş akışını siler. İstendiğinde, kaynak grubuyla ilişkili tüm kaynakları silmeyi kabul edin.
Ayrıca azdtest klasörünü silebilir veya projenin dosyalarını değiştirerek kendi uygulamanızın temeli olarak kullanabilirsiniz.
İlgili İçerik
- Python web
azd
şablonları hakkında daha fazla bilgi edinin - Komutlar
azd
hakkında daha fazla bilgi edinin. - Projedeki klasörlerin ve dosyaların her birinin ne yaptığını ve neleri düzenleyebileceğinizi veya silebileceğinizi öğrenin.
- Azure hizmetlerini eklemek veya kaldırmak için Bicep şablonlarını güncelleştirin. Bicep'i bilmiyor musun? Bu Öğrenme Yolunu Deneyin: Bicep'in Temelleri
- GitHub Actions CI/CD işlem hattını ana dala birleştirmede yeniden dağıtacak şekilde ayarlamak için kullanın
azd
- Azure Geliştirici CLI'sını kullanarak uygulamanızı izleyebilebilmeniz için izlemeyi ayarlama