Oktatóanyag: Django-webalkalmazás csatlakoztatása a PostgreSQL Azure Service Connector használatával

Ebben az oktatóanyagban megtudhatja, hogyan helyezhet üzembe adatvezérelt Python Django-webalkalmazást Azure App Service és a Service Connector használatával más Azure szolgáltatásokhoz való csatlakozáshoz. A minta webalkalmazás egy Azure Database for PostgreSQL-adatbázisban tárolja az éttermi és az áttekintési információkat, és egy Azure Storage tárolóban tárolja a fényképeket.

A Azure CLI a következő feladatokat hajtja végre:

  • Hozzon létre egy Python Django webalkalmazást, és telepítse Azure App Service.
  • Hozzon létre egy Azure Database for PostgreSQL rugalmas kiszolgálót és adatbázist.
  • Hozzon létre egy Azure Storage fiókot és tárolót.
  • Csatlakoztassa a webalkalmazást az adatbázishoz és a tárolóhoz a Service Connector használatával felügyelt identitáshitelesítéssel.
  • A webalkalmazás használata.

Feljegyzés

Ez az oktatóanyag hasonló az App Service Python Django webalkalmazás telepítése a PostgreSQL-lel az Azure-ban oktatóanyaghoz, de a rendszer által hozzárendelt jelszó nélküli felügyelt identitást használja Azure szerepköralapú hozzáférés-vezérléssel más Azure erőforrások elérésére. A cikk jelszó nélküli szolgáltatáskapcsolat létrehozása szakasza bemutatja, hogyan egyszerűsíti a Service Connector a csatlakozási folyamatot.

A webalkalmazás a Python Azure Identity-ügyfélkódDefaultAzureCredential> osztályát használja a felügyelt identitások automatikus észlelésére és a többi erőforrás eléréséhez.

Előfeltételek

  • Az oktatóanyag erőforrásaihoz írási és szerepkör-hozzárendelési engedélyekkel rendelkező Azure előfizetés egy Azure régióban, amely támogatja a Service Connectort, és rendelkezik elegendő App Service-támogatással és -kvótával.

  • Azure Cloud Shell az oktatóanyag lépéseinek futtatásához, vagy ha inkább helyileg szeretne futtatni:

    1. Telepítse a Azure CLI 2.30.0-s vagy újabb verzióját. A verzió ellenőrzéséhez futtassa a következőt az --version: . A frissítéshez futtassa a következőt az upgrade: .
    2. Jelentkezzen be a Azure a az login használatával, és kövesse az utasításokat.

Saját környezet beállítása

  1. Győződjön meg arról, hogy az előfizetés regisztrálva van a Microsoft.ServiceLinker és Microsoft.DBforPostgreSQL erőforrás-szolgáltatók használatára. Ha nem, futtassa az provider register -n Microsoft.[name of service] a szolgáltatók regisztrálásához.

  2. Telepítse a következő Azure CLI bővítményeket:

    az extension add --name serviceconnector-passwordless --upgrade
    az extension add --name rdbms-connect
    

A mintaalkalmazás klónozása

  1. Klónozza a mintaalkalmazás-adattárat.

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

    Másik lehetőségként letöltheti az alkalmazást a https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless fájlból, és kibonthatja egy serviceconnector-webapp-postgresql-django-passwordless nevű mappába.

  2. Váltson könyvtárat a tároló mappájába cd serviceconnector-webapp-postgresql-django-passwordless segítségével, és onnan futtassa az összes további parancsot.

A mintaalkalmazásban a webalkalmazás éles beállításai az azuresite/production.py fájlban találhatók. A fejlesztési beállítások az azuresite/settings.py találhatók. Az élesbeállítások úgy konfigurálják a Django-t, hogy bármilyen gyártási környezetben fusson, és nem az App Service-re vonatkoznak.

Amikor a WEBSITE_HOSTNAME környezeti változó be van állítva, az alkalmazás gyártási beállításokat használ. Azure Postgres kapcsolati sztringek esetén az App Service automatikusan beállítja ezt a változót a webalkalmazás URL-címére, például https://msdocs-django.azurewebsites.net.

További információt a Django üzembehelyezési ellenőrzőlistájában talál. Lásd még a Produkciós beállításokat a Django és Azure számára.

Kezdeti környezeti változók definiálása

Az alábbi kód határozza meg az oktatóanyaghoz szükséges környezeti változókat.

  • LOCATION olyan Azure régiónak kell lennie, ahol az előfizetés elegendő kvótával rendelkezik az erőforrások létrehozásához, és ahol az Azure nem korlátozza az Azure Database for PostgreSQL használatát az előfizetésre nézve.
  • A ADMIN_PW négy kategória közül legalább háromban 8–128 karakternek kell szerepelnie, kivéve $a kisbetűket, a számokat és a nonalphanumerikus karaktereket.
  1. Állítsa be a következő környezeti változókat, és <region> cserélje le a <database password> helyőrzőket érvényes értékekkel.

    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. Hozzon létre egy erőforráscsoportot , amely az összes projekterőforrást tartalmazza. A rendszer gyorsítótárazza az erőforráscsoport nevét, és automatikusan alkalmazza a következő parancsokra.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    

Az alkalmazáskód üzembe helyezése az App Service-ben

Hozza létre az app-gazdagépet az App Service-ben, és helyezze üzembe a mintaalkalmazás-kódot az adott gazdagépen. A az webapp up parancs a következő műveleteket hajtja végre:

  • Létrehoz egy App Service-csomagot az alapszintű (B1) tarifacsomagban.
  • Létrehozza az App Service-alkalmazást.
  • Engedélyezi az alkalmazás alapértelmezett naplózását.
  • Feltölti az adattárat ZIP-telepítéssel, és engedélyezve van a buildautomatizálás.
  • Létrehozza az alkalmazást.

A kódban a sku rendszer meghatározza az App Service-csomag processzorát, memóriáját és költségét. Az alapszintű (B1) szolgáltatáscsomag kis költséget von maga után Azure előfizetésében. Elhagyhatja a --sku paramétert az alapértelmezett termékváltozat használatához, amely általában a P1v3 (Premium v3). Az App Service-csomagok teljes listáját az App Service díjszabásában találja.

  1. A serviceconnector-webapp-postgresql-django-passwordless adattár mappában futtassa a következő az webapp up parancsot:

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

    Feljegyzés

    Az üzembe helyezés néhány percet vesz igénybe, és a parancs lefagyhat vagy időtúllépést okozhat, különösen egy alapszintű termékváltozaton. Miután az alkalmazás sikeresen elkészült, és a kimenet megjelenik Starting the site, a Ctrl+C billentyűkombinációval kiléphet a parancsból.

  2. Konfigurálja az alkalmazást az adattár start.sh fájl használatára az az webapp config set parancs futtatásával.

    az webapp config set \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --startup-file "start.sh"
    

A Postgres-adatbázis létrehozása a Azure

Hozza létre a Azure Database for PostgreSQL adatbázist az alkalmazásadatok tárolásához. A az postgres flexible-server create parancs létrehoz egy Azure Database for PostgreSQL rugalmas kiszolgálót a megadott erőforráscsoportban.

  • A paraméterben --name megadott kiszolgálónév. A névnek minden Azure egyedinek kell lennie.
  • A paraméterben --sku-name megadott termékváltozat.
  • A rendszergazdai fiók felhasználóneve és jelszava a --admin-user és --admin-password paraméterekben van megadva.
  1. Hozza létre a Azure Database for PostgreSQL kiszolgálót. Ha a rendszer arra kéri, hogy engedélyezze az aktuális ügyfél IP-címéhez való hozzáférést, adja meg y az igent.

    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. Ha a rendszer nem kéri az aktuális ügyfél IP-címhez való hozzáférés engedélyezését, konfiguráljon egy tűzfalszabályt a kiszolgálón az az postgres flexible-server firewall-rule create paranccsal. Ez a szabály lehetővé teszi a helyi környezet számára a kiszolgálóhoz való hozzáférést.

    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
    

    Jótanács

    Használjon bármilyen eszközt vagy webhelyet, amely az IP-címét jeleníti meg, hogy azt a <your IP address> helyére helyettesítse a parancsban. Használhatja például a What's My IP Address?-t.

  3. Hozzon létre egy, a kiszolgálón elnevezett restaurant adatbázist az az postgres flexible-server execute paranccsal.

    az postgres flexible-server execute \
      --name $DB_SERVER_NAME \
      --admin-user $ADMIN_USER \
      --admin-password $ADMIN_PW \
      --database-name postgres \
      --querytext 'create database restaurant;'
    

Jelszó nélküli szolgáltatáskapcsolat létrehozása

az webapp connection create postgres-flexible használatával hozzon létre egy szolgáltatás-összekötőt, amely az Azure webalkalmazást jelszó nélküli felügyelt identitás-hitelesítéssel csatlakoztatja a Postgres-adatbázishoz. Az alábbi parancs Azure Database for PostgreSQL konfigurálja a felügyelt identitás és Azure szerepköralapú hozzáférés-vezérlés használatára. A parancs kimenete felsorolja a Service Connector által végrehajtott műveleteket.

A parancs létrehoz egy környezeti változót, amely AZURE_POSTGRESQL_CONNECTIONSTRING megadja az alkalmazás adatbázis-kapcsolati adatait. Az alkalmazáskód olyan utasításokkal fér hozzá az alkalmazáskörnyezet változóihoz, mint a os.environ.get('AZURE_POSTGRESQL_HOST'). További információ: Access környezeti változók.

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

Tárfiók létrehozása és csatlakoztatása

az webapp connection create storage-blob parancsot használja egy Azure Storage-fiók és egy szolgáltatás-összekötő létrehozásához. A parancs a következő műveleteket hajtja végre:

  • Engedélyezi a rendszer által hozzárendelt felügyelt identitást a webalkalmazásban.
  • Hozzáadja a webalkalmazást az Storage Blob Data Contributor szerepkörrel az új tárfiókhoz.
  • A tárfiók-hálózatot úgy konfigurálja, hogy a webalkalmazásból fogadja el a hozzáférést.
  • Létrehoz egy AZURE_STORAGEBLOB_RESOURCEENDPOINT nevű környezeti változót a Azure Storage-fiókhoz.
  1. Futtassa a következő parancsot a tárfiók és a kapcsolat létrehozásához:

    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. Frissítse a tárfiókot, hogy az alkalmazás felhasználói nyilvánosan hozzáférhessenek a blobokhoz a fényképek eléréséhez.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  3. Az az storage container create használatával hozzon létre egy tárolót photos a tárfiókban, és engedélyezze a névtelen nyilvános olvasási hozzáférést a blobokhoz az új tárolóban.

    # 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
    

A Python webalkalmazás tesztelése a Azure

Nyissa meg és tesztelje a Azure Restaurant Review webalkalmazást. Az alkalmazás az azure.identity csomagot és annak osztályát DefaultAzureCredential használja. Amikor az alkalmazás Azure fut, a DefaultAzureCredential automatikusan észleli, hogy az App Service-hez létezik-e felügyelt identitás, és ezzel éri el a Azure Storage és Azure Database for PostgreSQL erőforrásokat. Az alkalmazásnak nem kell megadnia a tárkulcsokat, tanúsítványokat vagy hitelesítő adatokat az erőforrások eléréséhez.

  • Helyi Azure CLI telepítés esetén a az webapp browse használatával megnyithatja az alkalmazást az alapértelmezett böngészőben:

    az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAME
    
  • Azure Cloud Shell nem tud megnyitni egy helyi böngészőt, ezért nem támogatja a az webapp browse parancsot. A Cloud Shell-ből a webalkalmazást a legegyszerűbben az alkalmazás Azure portállapjának jobb felső sarkában található Default domain hivatkozás kiválasztásával lehet megnyitni.

Az alkalmazás indítása akár egy-két percet is igénybe vehet. Ha olyan alapértelmezett alkalmazásoldalt lát, amely nem a mintaalkalmazás, várjon egy percet, és frissítse a böngészőt.

Tesztelje a mintaalkalmazás funkcióit egy étterem hozzáadásával és néhány fényképes értékeléssel. Az alkalmazásnak az alábbi képernyőképhez kell hasonlítania:

A mintaalkalmazás képernyőképe, amely az étteremértékelési funkciókat mutatja be az App Service, az Azure Database for PostgreSQL és az Azure Storage használatával.

Az erőforrások tisztítása

A folyamatban lévő díjak elkerülése érdekében törölheti az oktatóanyaghoz létrehozott erőforrásokat az őket tartalmazó erőforráscsoport törlésével. A parancs futtatása előtt győződjön meg arról, hogy már nincs szüksége az alkalmazásra vagy az erőforrásokra.

az group delete --name $RESOURCE_GROUP_NAME --no-wait

Az összes erőforrás törlése eltarthat egy ideig. Az --no-wait argumentum lehetővé teszi, hogy a parancs azonnal visszatérjen.

Hibaelhárítás

Ha problémái vannak az oktatóanyag futtatásával, tekintse meg a következő erőforrásokat: