Szybki start: skalowanie usług wdrożonych przy użyciu szablonów internetowych języka Python azd przy użyciu aplikacji Bicep
Szablony internetowe azd
języka Python umożliwiają szybkie tworzenie nowej aplikacji internetowej i wdrażanie jej na platformie Azure. Szablony azd
zostały zaprojektowane tak, aby korzystały z tanich opcji usługi platformy Azure. Bez wątpienia należy dostosować poziomy usług (lub jednostki SKU) dla każdego z usług zdefiniowanych w szablonie dla danego scenariusza.
W tym przewodniku Szybki start zaktualizujesz odpowiednie pliki szablonów bicep, aby skalować istniejące usługi i dodawać nowe usługi do wdrożenia. Następnie uruchomisz azd provision
polecenie i wyświetlisz zmiany wprowadzone we wdrożeniu platformy Azure.
Wymagania wstępne
Subskrypcja platformy Azure — utwórz bezpłatnie
Na komputerze lokalnym muszą być zainstalowane następujące elementy:
- Interfejs wiersza polecenia dla deweloperów platformy Azure
- Docker Desktop
- Visual Studio Code
- Rozszerzenie kontenera deweloperskiego
- Visual Studio Code Bicep To rozszerzenie ułatwia tworzenie składni Bicep .
Wdrażanie szablonu
Aby rozpocząć, potrzebujesz działającego azd
wdrożenia. Gdy już to nastąpi, możesz zmodyfikować pliki Bicep wygenerowane przez azd
szablon.
Wykonaj kroki od 1 do 7 w artykule Szybki start. W kroku 2 użyj szablonu
azure-django-postgres-flexible-appservice
. Dla wygody oto cała sekwencja poleceń do wydania z wiersza polecenia:mkdir azdtest cd azdtest azd init --template azure-django-postgres-flexible-appservice azd auth login azd up
Po
azd up
zakończeniu otwórz witrynę Azure Portal, przejdź do usługi aplikacja systemu Azure, która została wdrożona w nowej grupie zasobów, i zanotuj plan cenowy usługi App Service (zobacz stronę Przegląd planu usługi App Service, sekcję Podstawy, wartość "Plan cenowy").W kroku 1 artykułu Szybki start został wyświetlony monit o utworzenie folderu azdtest . Otwórz ten folder w programie Visual Studio Code.
W okienku Eksplorator przejdź do folderu infra . Obserwuj podfoldery i pliki w folderze infra .
Plik main.bicep organizuje tworzenie wszystkich usług wdrożonych podczas wykonywania elementu
azd up
lubazd provision
. Wywołuje on inne pliki, takie jak db.bicep i web.bicep, co z kolei wywołuje pliki zawarte w podfolderze \core.Podfolder \core to głęboko zagnieżdżona struktura folderów zawierająca szablony bicep dla wielu usług platformy Azure. Niektóre pliki w podfolderze \core odwołują się do trzech plików bicep najwyższego poziomu (main.bicep, db.bicep i web.bicep), a niektóre nie są używane w ogóle w tym projekcie.
Skalowanie usługi przez zmodyfikowanie jej właściwości Bicep
Istniejący zasób można skalować we wdrożeniu, zmieniając jego jednostkę SKU. Aby to zademonstrować, zmienisz plan usługi App Service z planu "Podstawowa usługa" (który jest przeznaczony dla aplikacji o niższych wymaganiach dotyczących ruchu i nie wymaga zaawansowanych funkcji automatycznego skalowania i zarządzania ruchem) na "Plan usługi Standardowa", który jest przeznaczony do uruchamiania obciążeń produkcyjnych.
Uwaga
Nie wszystkie zmiany jednostki SKU można wprowadzić po fakcie. Niektóre badania mogą być konieczne, aby lepiej zrozumieć opcje skalowania.
Otwórz plik web.bicep i znajdź definicję modułu
appService
. W szczególności poszukaj ustawienia właściwości:sku: { name: 'B1' }
Zmień wartość z
B1
naS1
w następujący sposób:sku: { name: 'S1' }
Ważne
W wyniku tej zmiany cena za godzinę nieznacznie wzrośnie. Szczegółowe informacje o różnych planach usług i skojarzonych z nimi kosztach można znaleźć na stronie cennika usługi App Service.
Zakładając, że aplikacja została już wdrożona na platformie Azure, użyj następującego polecenia, aby wdrożyć zmiany w infrastrukturze, nie wdrażając samego kodu aplikacji.
azd provision
Nie należy monitować o lokalizację i subskrypcję. Te wartości są zapisywane w pliku .azure<environment-name.env>, gdzie
<environment-name>
jest nazwą środowiska podaną podczasazd init
.Po
azd provision
zakończeniu upewnij się, że aplikacja internetowa nadal działa. Znajdź również plan usługi App Service dla grupy zasobów i upewnij się, że plan cenowy jest ustawiony na plan usługi Standardowa (S1).
Dodawanie nowej definicji usługi za pomocą Bicep
Możesz dodać nowy zasób do wdrożenia, wprowadzając większe zmiany w projekcie Bicep. Aby to zademonstrować, dodasz wystąpienie usługi Azure Cache for Redis do istniejącego wdrożenia w ramach przygotowań do fikcyjnej nowej funkcji, którą planujesz dodać w przyszłości.
Ważne
W wyniku tej zmiany płacisz za wystąpienie usługi Azure Cache for Redis do momentu usunięcia zasobu w witrynie Azure Portal lub przy użyciu polecenia azd down
. Szczegółowe informacje o różnych planach usług i skojarzonych z nimi kosztach można znaleźć na stronie cennika usługi Azure Cache for Redis.
Utwórz nowy plik w folderze infra o nazwie redis.bicep. Skopiuj i wklej następujący kod do nowego pliku:
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
Zmodyfikuj plik main.bicep , aby utworzyć wystąpienie zasobu "redis".
W pliku main.bicep dodaj następujący kod poniżej końcowych nawiasów klamrowych skojarzonych z sekcją frontonu sieci Web i powyżej sekcji wpisy tajne.
// 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 } }
Dodaj wartości wyjściowe w dolnej części pliku:
output REDIS_ID string = redis.outputs.REDIS_ID output REDIS_HOST string = redis.outputs.REDIS_HOST
Upewnij się, że cały plik main.bicep jest identyczny z następującym kodem:
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
Upewnij się, że wszystkie zmiany zostały zapisane, a następnie zaktualizuj aprowizowane zasoby na platformie Azure za pomocą następującego polecenia:
azd provision
Uwaga
W zależności od wielu czynników dodanie wystąpienia usługi Azure Cache for Redis do istniejącego wdrożenia może zająć dużo czasu. Podczas testowania wystąpiły czasy wykonywania przekraczające 20 minut. Jeśli nie widzisz żadnych błędów, zezwól na kontynuowanie procesu do momentu ukończenia.
Po
azd provision
zakończeniu otwórz witrynę Azure Portal, przejdź do grupy zasobów dla wdrożenia, a na liście usług upewnij się, że masz teraz wystąpienie usługi Azure Cache for Redis.
Ten przewodnik Szybki start kończy się jednak wieloma usługami platformy Azure, które mogą pomóc w tworzeniu bardziej skalowalnych i gotowych do produkcji aplikacji. Doskonałym miejscem do rozpoczęcia jest zapoznanie się z usługami Azure API Management, Azure Front Door, Azure CDN i Azure Virtual Network, aby wymienić kilka.
Czyszczenie zasobów
Wyczyść zasoby utworzone przez szablon, uruchamiając polecenie azd down .
azd down
Polecenie azd down
usuwa zasoby platformy Azure i przepływ pracy funkcji GitHub Actions. Po wyświetleniu monitu zaakceptuj usunięcie wszystkich zasobów skojarzonych z grupą zasobów.
Możesz również usunąć folder azdtest lub użyć go jako podstawy dla własnej aplikacji, modyfikując pliki projektu.
Powiązana zawartość
- Dowiedz się więcej o szablonach internetowych
azd
języka Python - Dowiedz się więcej o
azd
poleceniach. - Dowiedz się, co każdy z folderów i plików w projekcie robi i co można edytować lub usunąć?
- Zaktualizuj szablony Bicep, aby dodać lub usunąć usługi platformy Azure. Nie znam Bicep? Wypróbuj tę ścieżkę Edukacja: podstawy Bicep
- Służy
azd
do konfigurowania potoku ciągłej integracji/ciągłego wdrażania funkcji GitHub Actions w celu ponownego wdrożenia w scalaniu z gałęzią główną - Konfigurowanie monitorowania w celu monitorowania aplikacji przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure