Kurz: Připojení webové aplikace Django k Azure PostgreSQL pomocí konektoru služby

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:

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ě:

    1. Nainstalujte Azure CLI 2.30.0 nebo novější. Pokud chcete zkontrolovat verzi, spusťte az --versionpříkaz . Upgrade provedete spuštěním az upgrade.
    2. Přihlaste se k Azure pomocí příkazu az login a podle pokynů.

Nastavení prostředí

  1. Ujistěte se, že je vaše předplatné registrované k používání zdrojových poskytovatelů Microsoft.ServiceLinker a Microsoft.DBforPostgreSQL. Pokud ne, spusťte az provider register -n Microsoft.[name of service] a zaregistrujte poskytovatele.

  2. 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

  1. Naklonujte úložiště ukázkové aplikace.

    git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.git
    

    Pří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.

  2. Přejděte do složky úložiště cd serviceconnector-webapp-postgresql-django-passwordless a 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.

  • LOCATION musí 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_PW obsahovat 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 $.
  1. 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>"
    
  2. 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.

  1. Ve složce úložiště serviceconnector-webapp-postgresql-django-passwordless spusťte následující az webapp up příkaz:

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --location $LOCATION \
      --name $APP_SERVICE_NAME \
      --runtime PYTHON:3.10 \
      --sku B1
    

    Pozná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.

  2. 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
  1. Vytvořte Azure Database for PostgreSQL server. Pokud se zobrazí výzva k povolení přístupu k aktuální IP adrese klienta, zadejte y ano.

    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 Enabled
    
  2. Pokud 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_ADDRESS
    

    Ná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?

  3. Vytvořte databázi pojmenovanou restaurant na 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_RESOURCEENDPOINT vytvoří pro účet služby Azure Storage.
  1. 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))
    
  2. 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-access 
    
  3. Pomocí příkazu az storage container create vytvořte kontejner volaný photos v úč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_NAME
    
  • Azure 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:

Screenshot ukázkové aplikace zobrazující funkce kontroly restaurace pomocí služby App Service, Azure Database for PostgreSQL a Azure Storage.

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í: