Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak nasadit webovou aplikaci Django Python řízenou daty pro Azure App Service a pomocí konektoru Service Connector ji připojit k dalším Azure službám. Ukázková webová aplikace ukládá informace o restauracích a recenzích v databázi Azure Database for PostgreSQL a ukládá fotky do kontejneru Azure Storage.
K provedení následujících úloh použijete Azure CLI:
- Vytvořte webovou aplikaci Python Django a nasaďte ji do Azure App Service.
- Vytvořte flexibilní server a databázi Azure Database for PostgreSQL.
- Vytvořte účet a kontejner Azure Storage.
- Připojte webovou aplikaci k databázi a kontejneru úložiště pomocí konektoru Service Connector s ověřováním spravovaných identit .
- Interakce s webovou aplikací
Poznámka:
Tento kurz se podobá kurzu App Service Nasazení Python Django webové aplikace s PostgreSQL v Azure, ale používá systémem přiřazenou bezheslovou spravovanou identitu s Azure řízením přístupu na základě role (RBAC) pro přístup k dalším prostředkům Azure. Část Vytvoření připojení služby bez hesla v tomto článku ukazuje, jak konektor service connector zjednodušuje proces připojení.
Webová aplikace používá třídu DefaultAzureCredential klientské knihovny Python Azure Identity k automatickému zjištění, kdy existuje spravovaná identita a používá ji pro přístup k ostatním prostředkům.
Předpoklady
Předplatné Azure s oprávněními k zápisu a přiřazení rolí pro prostředky kurzu v oblasti Azure, která podporuje Service Connector a má dostatečnou podporu a kvótu App Service.
Azure Cloud Shell pro spuštění kroků tutoriálu, nebo pokud chcete spustit místně:
- Nainstalujte Azure CLI 2.30.0 nebo novější. Pokud chcete zkontrolovat verzi, spusťte
az --versionpříkaz . Upgrade provedete spuštěnímaz upgrade. - Přihlaste se k Azure pomocí příkazu
az logina podle pokynů.
- Nainstalujte Azure CLI 2.30.0 nebo novější. Pokud chcete zkontrolovat verzi, spusťte
Nastavení prostředí
Ujistěte se, že je vaše předplatné registrované k používání zdrojových poskytovatelů
Microsoft.ServiceLinkeraMicrosoft.DBforPostgreSQL. Pokud ne, spusťteaz provider register -n Microsoft.[name of service]a zaregistrujte poskytovatele.Nainstalujte následující rozšíření Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Klonování ukázkové aplikace
Naklonujte úložiště ukázkové aplikace.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitPřípadně můžete aplikaci stáhnout z https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless a rozbalit ji do složky s názvem serviceconnector-webapp-postgresql-django-passwordless.
Přejděte do složky úložiště
cd serviceconnector-webapp-postgresql-django-passwordlessa z této složky spusťte všechny zbývající příkazy.
V ukázkové aplikaci jsou produkční nastavení webové aplikace v souboru azuresite/production.py . Nastavení vývoje jsou v azuresite/settings.py. Nastavení produkčního prostředí konfiguruje Django tak, aby běžela v libovolném produkčním prostředí a nejsou specifická pro Službu App Service.
Když je proměnná prostředí WEBSITE_HOSTNAME nastavená, aplikace používá produkční nastavení. Pro Azure připojovací řetězce Postgres služba App Service automaticky nastaví tuto proměnnou na adresu URL webové aplikace, například https://msdocs-django.azurewebsites.net.
Další informace najdete v kontrolním seznamu nasazení Django. Viz také nastavení Production pro Django na Azure.
Definování počátečních proměnných prostředí
Následující kód definuje nezbytné proměnné prostředí pro účely tohoto kurzu.
-
LOCATIONmusí být Azure oblast, kde má vaše předplatné dostatečnou kvótu pro vytvoření prostředků a kde není Azure Database for PostgreSQL pro vaše předplatné omezená. - Musí
ADMIN_PWobsahovat 8 až 128 znaků alespoň ve třech z těchto čtyř kategorií velká písmena, malá písmena, číslice a neosamocené znaky, s výjimkou$.
Nastavte následující proměnné prostředí a nahraďte zástupné znaky
<region>a<database password>platnými hodnotami.LOCATION="<region>" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="<database password>"Vytvořte skupinu prostředků , která bude obsahovat všechny zdroje projektu. Název skupiny prostředků se ukládá do mezipaměti a automaticky se použije na následné příkazy.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Nasazení kódu aplikace do služby App Service
Vytvořte hostitele aplikace ve službě App Service a nasaďte do daného hostitele ukázkový kód aplikace. Příkaz az webapp up provede následující akce:
- Vytvoří plán služby App Service v cenové úrovni Basic (B1).
- Vytvoří aplikaci App Service.
- Povolí pro aplikaci výchozí protokolování.
- Nahraje úložiště pomocí nasazení ve formátu ZIP s aktivovanou automatizací sestavení.
- Sestaví aplikaci.
V kódu sku definuje procesor, paměť a náklady na plán služby App Service. Ve službě Basic (B1) ve vašem předplatném Azure vznikají malé náklady. Parametr můžete vynechat --sku tak, aby používal výchozí skladovou položku, obvykle P1v3 (Premium v3). Úplný seznam plánů služby App Service najdete v tématu Ceny služby App Service.
Ve složce úložiště serviceconnector-webapp-postgresql-django-passwordless spusťte následující
az webapp uppříkaz:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Poznámka:
Nasazení trvá několik minut a příkaz může přestat reagovat, nebo může dojít k vypršení časového limitu, zejména u Basic SKU. Jakmile se aplikace úspěšně sestaví a výstup se zobrazí
Starting the site, můžete příkaz ukončit výběrem ctrl+C.Nakonfigurujte aplikaci tak, aby používala soubor úložiště start.sh spuštěním příkazu az webapp config set .
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Vytvoření databáze Postgres v Azure
Vytvořte databázi Azure Database for PostgreSQL pro ukládání informací o aplikaci. Příkaz az postgres flexible-server create vytvoří Azure Database for PostgreSQL flexibilní server v zadané skupině prostředků, která má:
- Název serveru zadaný v parametru
--name. Název musí být jedinečný ve všech Azure. - Skladová položka zadaná v parametru
--sku-name. - Uživatelské jméno a heslo účtu správce zadané v parametrech
--admin-user--admin-password
Vytvořte Azure Database for PostgreSQL server. Pokud se zobrazí výzva k povolení přístupu k aktuální IP adrese klienta, zadejte
yano.az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4 \ --microsoft-entra-auth EnabledPokud se nezobrazí výzva k povolení přístupu k aktuální IP adrese klienta, nakonfigurujte na serveru pravidlo brány firewall pomocí příkazu az postgres flexible-server firewall-rule create . Toto pravidlo umožňuje místnímu prostředí přístup k serveru.
IP_ADDRESS=<your IP address> az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --rule-name AllowMyIP \ --start-ip-address $IP_ADDRESS \ --end-ip-address $IP_ADDRESSNávod
Použijte jakýkoli nástroj nebo web, který zobrazuje vaši IP adresu, abyste nahradili
<your IP address>v příkazu. Můžete například použít Jaká je moje IP adresa?Vytvořte databázi pojmenovanou
restaurantna serveru pomocí příkazu az postgres flexible-server execute .az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Vytvořit připojení ke službě bez hesla
Použijte az webapp connection create postgres-flexible k přidání konektoru služby, který propojí Azure web app s databází Postgres pomocí autentizace spravované identity bez hesla. Následující příkaz nakonfiguruje Azure Database for PostgreSQL pro použití spravované identity a Azure řízení přístupu na základě role. Výstup příkazu zobrazí seznam akcí, které service Connector provede.
Příkaz vytvoří proměnnou prostředí s názvem AZURE_POSTGRESQL_CONNECTIONSTRING , která poskytuje informace o připojení k databázi pro aplikaci. Kód aplikace přistupuje k proměnným prostředí aplikace pomocí příkazů, jako je os.environ.get('AZURE_POSTGRESQL_HOST'). Další informace najdete v tématu Proměnné prostředí Accessu.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--target-resource-group $RESOURCE_GROUP_NAME \
--server $DB_SERVER_NAME \
--database restaurant \
--client-type python \
--system-identity
Vytvoření účtu úložiště a připojení k němu
Pomocí příkazu az webapp connection create storage-blob vytvořte účet úložiště Azure a konektor služby. Příkaz provede následující akce:
- Povolí spravovanou identitu přiřazenou systémem ve webové aplikaci.
- Přidá webovou aplikaci s rolí Přispěvatel dat objektů Blob Storage do nového účtu úložiště.
- Nakonfiguruje síť účtu úložiště tak, aby přijímala přístup z webové aplikace.
- Proměnnou prostředí s názvem
AZURE_STORAGEBLOB_RESOURCEENDPOINTvytvoří pro účet služby Azure Storage.
Spuštěním následujícího příkazu vytvořte účet úložiště a připojení:
STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \ --new true \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --client-type python \ --system-identity \ --query configurations[].value \ --output tsv) STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))Aktualizujte účet úložiště a povolte uživatelům aplikace veřejný přístup k blobům pro získání přístupu k fotografiím.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessPomocí příkazu az storage container create vytvořte kontejner volaný
photosv účtu úložiště a povolte anonymní veřejný přístup pro čtení k objektům blob v novém kontejneru.# Set the BLOB_ENDPOINT variable BLOB_ENDPOINT=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "primaryEndpoints.blob" | sed 's/"//g') echo $BLOB_ENDPOINT # Create the storage container using the BLOB_ENDPOINT variable az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --auth-mode login \ --blob-endpoint $BLOB_ENDPOINT
Testování webové aplikace Python v Azure
Otevřete a otestujte webovou aplikaci Azure Restaurant Review. Aplikace používá balíček azure.identity a její DefaultAzureCredential třídu. Když je aplikace spuštěná v Azure, DefaultAzureCredential automaticky zjistí, kdy pro službu App Service existuje spravovaná identita, a použije ji pro přístup k Azure Storage a Azure Database for PostgreSQL prostředkům. Aplikace pro přístup k těmto prostředkům nemusí poskytovat klíče úložiště, certifikáty ani přihlašovací údaje.
Pro místní instalaci Azure CLI můžete aplikaci otevřít ve výchozím prohlížeči pomocí
az webapp browse:az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell nemůže otevřít místní prohlížeč, takže nepodporuje příkaz
az webapp browse. V Cloud Shell je nejjednodušší způsob, jak otevřít webovou aplikaci, vybrat odkaz na výchozí doménu vpravo nahoře na stránce Azure portálu aplikace.
Spuštění aplikace může trvat minutu nebo dvě. Pokud se zobrazí výchozí stránka aplikace, která není ukázkovou aplikací, počkejte minutu a aktualizujte prohlížeč.
Otestujte funkčnost ukázkové aplikace přidáním restaurace a několika recenzemi s fotkami. Aplikace by měla vypadat podobně jako na následujícím snímku obrazovky:
Vyčištění prostředků
Pokud se chcete vyhnout průběžným poplatkům, můžete odstranit prostředky, které jste pro tento kurz vytvořili, odstraněním skupiny prostředků, která je obsahuje. Před spuštěním příkazu se ujistěte, že už aplikaci nebo prostředky nepotřebujete.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Smazání všech prostředků může zabrat nějaký čas. Argument --no-wait umožňuje, aby se příkaz okamžitě vrátil.
Troubleshooting
Pokud máte problémy se spuštěním tohoto kurzu, projděte si následující zdroje informací: