Sdílet prostřednictvím


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říklad msdocs-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

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

  2. 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
    
  3. 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 .
    • 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 .
  4. 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?

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

  1. V terminálu se ujistěte, že jste ve složce úložiště serviceconnector-webapp-postgresql-django-passwordless , která obsahuje kód aplikace.

  2. 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říkladu eastus ).

    • 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í.
  3. 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.

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

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

  1. 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č.

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

    Snímek obrazovky ukázkové aplikace zobrazující funkce kontroly restaurace pomocí služby Aplikace Azure Service, Azure PostgreSQL Database a Azure Storage

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.

Další krok