Flask Python-webalkalmazás létrehozása és üzembe helyezése az Azure-ban rendszer által hozzárendelt felügyelt identitással

Ebben az oktatóanyagban Python Flask-kódot helyez üzembe egy Azure-alkalmazás Service-ben futó webalkalmazás létrehozásához és üzembe helyezéséhez. A webalkalmazás a rendszer által hozzárendelt felügyelt identitást (jelszó nélküli kapcsolatokat) és az Azure szerepköralapú hozzáférés-vezérlését használja az Azure Storage és az Azure Database for PostgreSQL rugalmas kiszolgálói erőforrások eléréséhez. A kód a Pythonhoz készült Azure Identity-ügyfélkódtár DefaultAzureCredential osztályát használja. Az DefaultAzureCredential osztály automatikusan észleli, hogy egy felügyelt identitás létezik az App Service-hez, és más Azure-erőforrások eléréséhez használja.

Az Azure-szolgáltatásokhoz való jelszó nélküli kapcsolatokat a Service Csatlakozás or használatával konfigurálhatja, vagy manuálisan is konfigurálhatja őket. Ez az oktatóanyag bemutatja, hogyan használható a Service Csatlakozás or. A jelszó nélküli kapcsolatokról további információt az Azure-szolgáltatások jelszó nélküli kapcsolatai című témakörben talál. A Service Csatlakozás orról a Szolgáltatás Csatlakozás or dokumentációjában talál további információt.

Ez az oktatóanyag bemutatja, hogyan hozhat létre és helyezhet üzembe Python-webalkalmazásokat az Azure CLI használatával. Az oktatóanyagban szereplő parancsok Bash-rendszerhéjban való futtatásra vannak megírva. Az oktatóanyag-parancsokat bármely Bash-környezetben futtathatja a parancssori felület telepítésével, például a helyi környezetben vagy az Azure Cloud Shellben. Bizonyos módosításokkal – például környezeti változók beállításával és használatával – futtathatja ezeket a parancsokat más környezetekben, például a Windows parancshéjban. Ha például felhasználó által hozzárendelt felügyelt identitást használ, tekintse meg a Django-webalkalmazások létrehozását és üzembe helyezését az Azure-ban egy felhasználó által hozzárendelt felügyelt identitással.

Mintaalkalmazás letöltése

A Flask-keretrendszert használó Python-mintaalkalmazások segítenek az oktatóanyag követésében. Töltse le vagy klónozza az egyik mintaalkalmazást a helyi munkaállomásra.

  1. Klónozza a mintát egy Azure Cloud Shell-munkamenetben.

    git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.git
    
  2. Lépjen az alkalmazásmappára.

    cd msdocs-flask-web-app-managed-identity
    

Azure PostgreSQL-kiszolgáló létrehozása

  1. Állítsa be az oktatóanyaghoz szükséges környezeti változókat.

    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="ChAnG33#ThsPssWD$RAND_ID"
    

    Fontos

    A ADMIN_PW következő kategóriák közül háromnak 8–128 karaktert kell tartalmaznia: angol nagybetűk, angol kisbetűk, számok és nonalphanumerikus karakterek. Felhasználónevek vagy jelszavak létrehozásakor ne használja a karaktert $ . Később olyan környezeti változókat hoz létre ezekkel az értékekkel, amelyekben a $ karakter speciális jelentéssel rendelkezik a Python-alkalmazások futtatásához használt Linux-tárolóban.

  2. Hozzon létre egy erőforráscsoportot az az group create paranccsal.

    az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
    
  3. Hozzon létre egy PostgreSQL-kiszolgálót az az postgres flexible-server create paranccsal. (Ez és az azt követő parancsok a Bash Shell ('\' ) sor folytatási karakterét használják. Szükség esetén módosítsa a rendszerhéj vonal-folytatási karakterét.)

    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
    

    A termékváltozat neve a tarifacsomag és a számítási konfiguráció neve. További információkért tekintse meg az Azure Database for PostgreSQL díjszabását. Az elérhető termékváltozatok listázásához használja a következőt az postgres flexible-server list-skus --location $LOCATION: .

  4. Hozzon létre egy adatbázist restaurant 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;'
    

Azure-alkalmazás szolgáltatás létrehozása és a kód üzembe helyezése

  1. App service létrehozása az az webapp up paranccsal.

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

    A termékváltozat határozza meg az App Service-csomag méretét (CPU, memória) és költségét. A B1 (alapszintű) szolgáltatáscsomag kis költséget von maga után az Azure-előfizetésben. Az App Service-csomagok teljes listájáért tekintse meg az App Service díjszabási oldalát.

  2. Konfigurálja az App Service-t az adattárban található start.sh az az webapp config set paranccsal való használatára.

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

Jelszó nélküli összekötők létrehozása az Azure-erőforrásokhoz

A service Csatlakozás or parancsok konfigurálják az Azure Storage és az Azure Database for PostgreSQL-erőforrásokat a felügyelt identitás és az Azure szerepköralapú hozzáférés-vezérlés használatára. A parancsok alkalmazásbeállításokat hoznak létre az App Service-ben, amelyek a webalkalmazást ezekhez az erőforrásokhoz csatlakoztatják. A parancsok kimenete felsorolja a szolgáltatás-összekötő által a jelszó nélküli képesség engedélyezéséhez végrehajtott műveleteket.

  1. Adjon hozzá egy PostgreSQL-szolgáltatás-összekötőt az az webapp connection create postgres-flexible paranccsal. Ebben az esetben a rendszer által hozzárendelt felügyelt identitással hitelesíti a webalkalmazást a célerőforrás, a 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
    
  2. Adjon hozzá egy tárolószolgáltatás-összekötőt az az webapp connection create storage-blob paranccsal.

    Ez a parancs egy tárfiókot is hozzáad, és hozzáadja a tárfiókhoz a Storage Blob Data Közreműködő szerepkörrel rendelkező webalkalmazást.

    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))
    

Tároló létrehozása a tárfiókban

A Python-mintaalkalmazás blobként tárolja a véleményezők által beküldött fényképeket a tárfiókban lévő tárolóban.

  • Amikor egy felhasználó elküld egy fényképet a véleményezésével, a mintaalkalmazás a rendszer által hozzárendelt felügyelt identitással a tárolóba írja a képet hitelesítés és engedélyezés céljából. Ezt a funkciót az utolsó szakaszban konfigurálta.

  • Amikor egy felhasználó megtekinti egy étterem véleményeit, az alkalmazás visszaad egy hivatkozást a blobtárolóban lévő fényképre minden olyan véleményhez, amelyhez hozzá van társítva egy. Ahhoz, hogy a böngésző megjeleníthesse a fényképet, hozzá kell tudnia férni a tárfiókban. A blobadatoknak névtelen (hitelesítés nélküli) hozzáféréssel nyilvánosan olvashatónak kell lenniük.

A biztonság növelése érdekében a tárfiókok alapértelmezés szerint letiltott névtelen hozzáféréssel jönnek létre a blobadatokhoz. Ebben a szakaszban engedélyezi a névtelen olvasási hozzáférést a tárfiókban, majd létrehoz egy tároló nevesített fényképeket , amely nyilvános (névtelen) hozzáférést biztosít a blobokhoz.

  1. Frissítse a tárfiókot, hogy névtelen olvasási hozzáférést biztosítson a blobokhoz az az storage account update paranccsal.

    az storage account update \
      --name $STORAGE_ACCOUNT_NAME \
      --resource-group $RESOURCE_GROUP_NAME \
      --allow-blob-public-access true
    

    A névtelen hozzáférés engedélyezése a tárfiókon nem befolyásolja az egyes blobok hozzáférését. Explicit módon engedélyeznie kell a blobokhoz való nyilvános hozzáférést a tároló szintjén.

  2. Hozzon létre egy fényképek nevű tárolót a tárfiókban az az storage container create paranccsal. Névtelen olvasási (nyilvános) hozzáférés engedélyezése a blobokhoz az újonnan létrehozott tárolóban.

    az storage container create \
      --account-name $STORAGE_ACCOUNT_NAME \
      --name photos \
      --public-access blob \
      --account-key $(az storage account keys list --account-name $STORAGE_ACCOUNT_NAME \
          --query [0].value --output tsv) 
    

    Feljegyzés

    A rövidség kedvéért ez a parancs a tárfiók kulcsával engedélyezi a tárfiókot. A legtöbb forgatókönyv esetében a Microsoft ajánlott megközelítése a Microsoft Entra ID és az Azure (RBAC) szerepkörök használata. A rövid útmutatókért tekintse meg a blobok Azure CLI-vel való létrehozását, letöltését és listázását ismertető rövid útmutatót. Vegye figyelembe, hogy számos Azure-szerepkör lehetővé teszi tárolók létrehozását egy tárfiókban, beleértve a "Tulajdonos", a "Közreműködő", a "Storage Blob Data Owner" és a "Storage Blob Data Contributor" szerepkört.

A blobadatokhoz való névtelen olvasási hozzáférésről további információt a tárolók és blobok névtelen olvasási hozzáférésének konfigurálása című témakörben talál.

A Python-webalkalmazás tesztelése az Azure-ban

A minta Python-alkalmazás az azure.identity csomagot és annak osztályát DefaultAzureCredential használja. Amikor az alkalmazás az Azure-ban fut, automatikusan észleli, DefaultAzureCredential hogy létezik-e felügyelt identitás az App Service-hez, és ha igen, más Azure-erőforrások (ebben az esetben a storage és a PostgreSQL) eléréséhez használja. Ezeknek az erőforrásoknak a eléréséhez nem kell megadnia a tárkulcsokat, tanúsítványokat vagy hitelesítő adatokat az App Service-nek.

  1. Keresse meg az üzembe helyezett alkalmazást az URL-címen http://$APP_SERVICE_NAME.azurewebsites.net.

    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 az alapértelmezett mintaalkalmazáslap, várjon egy percet, és frissítse a böngészőt.

  2. Tesztelje a mintaalkalmazás funkcióit egy étterem hozzáadásával és néhány értékeléssel az étterem fényképeivel.

    Az étterem és a felülvizsgálati információk az Azure Database for PostgreSQL-ben, a fényképek pedig az Azure Storage-ban vannak tárolva. Íme egy példa képernyőkép:

    Képernyőkép a mintaalkalmazásról, amely a Azure-alkalmazás Service, az Azure PostgreSQL Database és az Azure Storage éttermi felülvizsgálati funkcióit mutatja be.

A fölöslegessé vált elemek eltávolítása

Ebben az oktatóanyagban az összes Azure-erőforrás ugyanabban az erőforráscsoportban lett létrehozva. Az erőforráscsoport eltávolítása az az group delete paranccsal eltávolítja az erőforráscsoport összes erőforrását, és ez a leggyorsabb módja az alkalmazáshoz használt összes Azure-erőforrás eltávolításának.

az group delete  --name $RESOURCE_GROUP_NAME 

Hozzáadhatja az --no-wait argumentumot, hogy a parancs a művelet befejezése előtt visszatérjen.

Következő lépések