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.
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í na řadu Service Connector a zjednodušuje proces připojení uvedený v tutoriálu 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 z Azure Cloud Shell v Azure Portálu a nainstalujte rozšíření pro připojení ke službě bez použití 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.
- Aplikace používá produkční nastavení, když je proměnná prostředí nastavená.
WEBSITE_HOSTNAME
Služba Azure App Service automaticky nastaví tuto proměnnou 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 . 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 již neexistuje uložený název, 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ý. - S jednotkou SKU, která je zadána 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, jejíž název je určen parametrem
--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;'
Nasaďte kód do Azure App 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
Název SKU definuje velikost (procesor, paměť) a náklady na plán služby App Service. Za plán služby B1 (Basic) jsou ve vašem předplatném Azure účtovány malé poplatky. Ú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é mohou trvat několik minut, pomocí skupiny prostředků a umístění, uloženého v mezipaměti z předchozího příkazu
az group create
(skupina$RESOURCE_GROUP_NAME
v oblastieastus
v tomto příkladu).- Vytvořte plán služby App Service v cenové úrovni Basic (B1). Můžete vynechat
--sku
, abyste použili výchozí hodnoty. - Vytvořte aplikaci App Service.
- Povolte pro aplikaci výchozí protokolování.
- Nahrajte repozitář pomocí ZIP nasazení s automatizací sestavení povolenou.
- 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 PostgreSQL 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 pomocí příkazu az webapp connection create postgres-flexible konektor služby PostgreSQL. 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", prosím spusťte az provider register -n Microsoft.ServiceLinker
k zaregistrování poskytovatele prostředků Service Connector a znovu spusťte příkaz pro připojení.
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 rolí Storage Blob Data Contributor 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 typu blob pro přístup k obrázkům.
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. Informace o restauracích a recenzích 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ě. Ujistěte se, že už nepotřebujete prostředky ve skupině, než použijete příkaz.
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.
Máte problémy? Dejte nám vědět.