Kurz: Použití konektoru služby k sestavení aplikace Django s Postgres ve službě Aplikace Azure Service
Poznámka:
V tomto kurzu použijete service Connector k připojení webové aplikace k databázové službě. Tento kurz je úprava kurzu služby App Service, takže můžete vidět určité podobnosti. Podívejte se do části Vytvoření konektoru bez hesla do databáze Postgres, abyste zjistili, kde přichází konektor služby, a zjednodušuje proces připojení uvedený v kurzu služby App Service.
V tomto kurzu se dozvíte, jak nasadit webovou aplikaci Python Django řízenou daty do služby Aplikace Azure a připojit ji k flexibilní serverové databázi Azure Database for PostgreSQL.
V tomto kurzu pomocí Azure CLI provedete následující úlohy:
- Nastavení počátečního prostředí pomocí Pythonu a Azure CLI
- Vytvoření flexibilní serverové databáze Azure Database for PostgreSQL
- Nasazení kódu do služby Aplikace Azure Service a připojení k flexibilnímu serveru PostgreSQL
- Aktualizace kódu a opětovné nasazení
- Zobrazit diagnostické protokoly
- Správa webové aplikace na webu Azure Portal
Nastavení počátečního prostředí
Spusťte azure Cloud Shell na webu Azure Portal a nainstalujte rozšíření konektoru služby bez hesla pro Azure CLI.
az extension add --name serviceconnector-passwordless --upgrade
Klonování nebo stažení ukázkové aplikace
Naklonujte ukázkové úložiště:
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
Přejděte do následující složky:
cd serviceconnector-webapp-postgresql-django-passwordless
V tomto kurzu nasadíte webovou aplikaci Django do služby Aplikace Azure Service. Webová aplikace používá spravovanou identitu přiřazenou systémem (bez hesla) s řízením přístupu na základě role v Azure pro přístup k prostředkům flexibilního serveru Azure Storage a Azure Database for PostgreSQL. Kód používá defaultAzureCredential třídy klientské knihovny Azure Identity pro Python. Třída DefaultAzureCredential
automaticky zjistí, že spravovaná identita existuje pro službu App Service a používá ji pro přístup k dalším prostředkům Azure.
- Produkční nastavení se nachází v souboru azuresite/production.py . Nastavení vývoje jsou v azuresite/settings.py.
- Když je proměnná prostředí nastavená,
WEBSITE_HOSTNAME
aplikace používá produkční nastavení. Aplikace Azure Služba tuto proměnnou automaticky nastaví na adresu URL webové aplikace, napříkladmsdocs-django.azurewebsites.net
.
Nastavení produkčního prostředí je specifické pro konfiguraci Django tak, aby běžela v libovolném produkčním prostředí a nejsou specifická pro Službu App Service. Další informace najdete v kontrolním seznamu nasazení Django. Podrobnosti o některých změnách najdete také v nastavení produkčního prostředí Django v Azure.
Máte problémy? Dejte nám vědět.
Vytvoření databáze Postgres v Azure
Nastavte proměnné prostředí potřebné pro kurz.
LOCATION="eastus" 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="{your database password}"
Důležité
Musí
ADMIN_PW
obsahovat 8 až 128 znaků ze tří z následujících kategorií: velká písmena anglické abecedy, malá písmena anglické abecedy, číslice a neosamocené znaky. Při vytváření uživatelských jmen nebo hesel znak nepoužívejte$
. Později vytvoříte proměnné prostředí s těmito hodnotami, ve kterých$
má znak specifický význam v kontejneru Linuxu, který se používá ke spouštění aplikací v Pythonu.Vytvořte skupinu prostředků (v případě potřeby můžete název změnit). 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
Vytvořte databázový server. Pokud se zobrazí výzva k povolení přístupu k aktuální IP adrese klienta, zadejte
y
ano. Tento proces trvá několik minut: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 --active-directory-auth Enabled
Pokud se
az
příkaz nerozpozná, ujistěte se, že máte nainstalované Rozhraní příkazového řádku Azure, jak je popsáno v části Nastavení počátečního prostředí.Příkaz az postgres flexible-server create provede následující akce, které zabere několik minut:
- Pokud název mezipaměti ještě není, vytvořte výchozí skupinu prostředků.
- Vytvoření flexibilního serveru PostgreSQL:
- S názvem serveru zadaným parametrem
--name
. Tento název musí být v rámci služeb Azure jedinečný. - Se skladovou jednotkou zadanou parametrem
--sku-name
.
- S názvem serveru zadaným parametrem
- Vytvořte účet správce s uživatelským jménem a heslem zadaným pomocí
--admin-user
parametrů a--admin-password
parametrů. - Vytvořte databázi, která je zadána pomocí parametru
--database-name
.
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. (Pokud se zobrazí výzva k povolení přístupu z IP adresy klienta v předchozím kroku, můžete tento krok přeskočit.)
IP_ADDRESS=<your IP> 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_ADDRESS
Použijte jakýkoli nástroj nebo web, který zobrazuje vaši IP adresu k nahrazení
<your IP>
v příkazu. Můžete například použít web Co je moje IP adresa?Vytvořte databázi s názvem
restaurant
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;'
Nasazení kódu do služby Aplikace Azure Service
V této části vytvoříte hostitele aplikace v aplikaci App Service, připojíte tuto aplikaci k databázi Postgres a pak na tohoto hostitele nasadíte svůj kód.
Vytvoření aplikace App Service
V terminálu se ujistěte, že jste ve složce úložiště serviceconnector-webapp-postgresql-django-passwordless , která obsahuje kód aplikace.
Spuštěním následujícího
az webapp up
příkazu vytvořte hostitele služby App Service pro aplikaci:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1
Skladová položka definuje velikost (procesor, paměť) a náklady na plán služby App Service. Za plán služby B1 (Basic) se ve vašem předplatném Azure účtují malé náklady. Úplný seznam plánů služby App Service najdete na stránce s cenami služby App Service.
Tento příkaz provede následující akce, které můžou trvat několik minut pomocí skupiny prostředků a umístění uloženého v mezipaměti z předchozího
az group create
příkazu (skupina$RESOURCE_GROUP_NAME
v tomto příkladueastus
).- Vytvořte plán služby App Service v cenové úrovni Basic (B1). Můžete vynechat
--sku
použití výchozích hodnot. - Vytvořte aplikaci App Service.
- Povolte pro aplikaci výchozí protokolování.
- Nahrajte úložiště pomocí nasazení ZIP s povolenou automatizací sestavení.
- Vytvořte plán služby App Service v cenové úrovni Basic (B1). Můžete vynechat
Nakonfigurujte službu App Service tak, aby používala start.sh v úložišti pomocí 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í konektoru bez hesla do databáze Postgres
S kódem nasazeným do služby App Service je dalším krokem připojení aplikace k databázi Postgres v Azure. Kód aplikace očekává, že najde informace o databázi v proměnné prostředí s názvem AZURE_POSTGRESQL_CONNECTIONSTRING
pro flexibilní server PostgresSQL a proměnnou prostředí s názvem AZURE_STORAGEBLOB_RESOURCEENDPOINT
pro účet Azure Storage.
Příkazy konektoru služeb konfiguruje prostředky Azure Storage a Azure Database for PostgreSQL tak, aby používaly spravovanou identitu a řízení přístupu na základě role v Azure. Příkazy vytvoří nastavení aplikace ve službě App Service, která k těmto prostředkům připojí vaši webovou aplikaci. Výstup z příkazů uvádí akce konektoru služby, které se provedly za účelem povolení funkce bez hesla.
- Přidejte konektor služby PostgreSQL pomocí příkazu az webapp connection create postgres-flexible . Spravovaná identita přiřazená systémem se v tomto případě používá k ověření webové aplikace v cílovém prostředku PostgreSQL.
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
Poznámka:
Pokud se zobrazí chybová zpráva "Předplatné není zaregistrované pro použití Microsoft.ServiceLinker", spusťte prosím az provider register -n Microsoft.ServiceLinker
registraci poskytovatele prostředků konektoru služeb a spusťte příkaz pro připojení znovu.
V kódu Pythonu se k těmto nastavením dostanete jako proměnné prostředí s příkazy, jako je os.environ.get('AZURE_POSTGRESQL_HOST')
. Další informace najdete v tématu Proměnné prostředí Accessu.
Máte problémy? Nejprve si projděte průvodce odstraňováním potíží, jinak nám dejte vědět.
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ě a vytvořte konektor služby, který provede následující konfigurace:
Povolí spravovanou identitu přiřazenou systémem ve webové aplikaci.
Přidá webovou aplikaci s přispěvatelem dat objektů blob služby Storage do nově vytvořeného účtu úložiště.
Nakonfigurujte síť účtu úložiště tak, aby přijímala přístup z webové aplikace.
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ě tak, aby uživatelům aplikace restaurace povolil veřejný přístup k objektům blob.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-access
Vytvořte kontejner volaný
photos
v účtu úložiště pomocí příkazu az storage container create . Povolit anonymní přístup pro čtení (veřejný) k objektům blob v nově vytvořené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 v Pythonu v Azure
Ukázková aplikace v Pythonu používá balíček azure.identity a její DefaultAzureCredential
třídu. Když je aplikace spuštěná v Azure, automaticky zjistí, DefaultAzureCredential
jestli pro službu App Service existuje spravovaná identita, a pokud ano, použije ji pro přístup k dalším prostředkům Azure (v tomto případě úložiště a PostgreSQL). Pro přístup k těmto prostředkům nemusíte zadávat klíče úložiště, certifikáty ani přihlašovací údaje služby App Service.
Přejděte na nasazenou aplikaci na adrese URL
http://$APP_SERVICE_NAME.azurewebsites.net
.Spuštění aplikace může trvat minutu nebo dvě. Pokud se zobrazí výchozí stránka aplikace, která není výchozí stránkou ukázkové aplikace, počkejte minutu a aktualizujte prohlížeč.
Otestujte funkčnost ukázkové aplikace přidáním restaurace a několika recenzemi s fotkami pro restauraci. Restaurace a kontrola informací se ukládají ve službě Azure Database for PostgreSQL a fotky se ukládají ve službě Azure Storage. Tady je příklad snímku obrazovky:
Vyčištění prostředků
Pokud chcete zachovat aplikaci nebo pokračovat v dalších kurzech, přeskočte k dalším krokům. Jinak pokud se chcete vyhnout průběžným poplatkům, odstraňte skupinu prostředků vytvořenou pro tento kurz:
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Odstraněním skupiny prostředků také uvolníte a odstraníte všechny prostředky obsažené v této skupině. Před použitím příkazu už prostředky ve skupině nepotřebujete.
Odstranění všech prostředků může nějakou dobu trvat. Argument --no-wait
umožňuje, aby se příkaz okamžitě vrátil.
Máte problémy? Dejte nám vědět.