Dela via


Självstudie: Använda Service Connector för att skapa en Django-app med Postgres i Azure App Service

Kommentar

I den här självstudien använder du Service Connector för att ansluta en webbapp till en databastjänst. Den här självstudien är en ändring av App Service-självstudien, så du kan se vissa likheter. Titta i avsnittet Skapa en lösenordslös anslutning till Postgres-databasen för att se var Service Connector spelar in och förenklar anslutningsprocessen som anges i App Service-självstudien.

Den här självstudien visar hur du distribuerar en datadriven Python Django-webbapp till Azure App Service och ansluter den till en Azure Database for PostgreSQL – flexibel serverdatabas.

I den här självstudien använder du Azure CLI för att utföra följande uppgifter:

  • Konfigurera din första miljö med Python och Azure CLI
  • Skapa en flexibel Azure Database for PostgreSQL-serverdatabas
  • Distribuera kod till Azure App Service och anslut till En flexibel PostgreSQL-server
  • Uppdatera koden och distribuera om
  • Visa diagnostikloggar
  • Hantera webbappen i Azure Portal

Konfigurera din första miljö

Starta från Azure Cloud Shell i Azure-portalen och installera det lösenordslösa tillägget för tjänstanslutningstjänsten för Azure CLI.

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

Klona eller ladda ned exempelappen

Klona exempellagringsplatsen:

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

Navigera till följande mapp:

cd serviceconnector-webapp-postgresql-django-passwordless

I den här självstudien distribuerar du en Django-webbapp till Azure App Service. Webbappen använder en systemtilldelad hanterad identitet (lösenordslösa anslutningar) med rollbaserad åtkomstkontroll i Azure för åtkomst till Azure Storage och Azure Database for PostgreSQL – flexibla serverresurser . Koden använder klassen DefaultAzureCredential i Azure Identity-klientbiblioteket för Python. Klassen DefaultAzureCredential identifierar automatiskt att det finns en hanterad identitet för App Service och använder den för att komma åt andra Azure-resurser.

  • Produktionsinställningarna finns i filen azuresite/production.py . Utvecklingsinställningarna finns i azuresite/settings.py.
  • Appen använder produktionsinställningar när WEBSITE_HOSTNAME miljövariabeln anges. Azure App Service ställer automatiskt in den här variabeln på URL:en för webbappen, till exempel msdocs-django.azurewebsites.net.

Produktionsinställningarna är specifika för att konfigurera Django att köras i alla produktionsmiljöer och är inte specifika för App Service. Mer information finns i checklistan för Django-distribution. Mer information om några av ändringarna finns i Produktionsinställningar för Django på Azure.

Har du problem? Berätta för oss.

Skapa Postgres-databas i Azure

  1. Konfigurera de miljövariabler som behövs för självstudien.

    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}"
    

    Viktigt!

    ADMIN_PW Måste innehålla mellan 8 och 128 tecken från tre av följande kategorier: engelska versaler, engelska gemener, siffror och icke-numeriska tecken. När du skapar användarnamn eller lösenord använder $ du inte tecknet. Senare skapar du miljövariabler med dessa värden där $ tecknet har en specifik betydelse i Linux-containern som används för att köra Python-appar.

  2. Skapa en resursgrupp (du kan ändra namnet om du vill). Resursgruppens namn cachelagras och tillämpas automatiskt på efterföljande kommandon.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    
  3. Skapa databasservern. Om du uppmanas att aktivera åtkomst till den aktuella klientens IP-adress skriver du y ja. Den här processen tar några minuter:

    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
    

    az Om kommandot inte känns igen måste du ha Azure CLI installerat enligt beskrivningen i Konfigurera din första miljö.

    Kommandot az postgres flexible-server create utför följande åtgärder, vilket tar några minuter:

    • Skapa en standardresursgrupp om det inte redan finns ett cachelagrat namn.
    • Skapa en flexibel PostgreSQL-server:
      • Med servernamnet angivet med parametern --name . Namnet måste vara unikt i hela Azure.
      • Med den SKU som anges med parametern --sku-name .
    • Skapa ett administratörskonto med ett användarnamn och lösenord som anges med parametrarna --admin-user och --admin-password .
    • Skapa en databas som har angetts med parametern --database-name .
  4. Konfigurera en brandväggsregel på servern med kommandot az postgres flexible-server firewall-rule create . Den här regeln ger din lokala miljö åtkomst till servern. (Om du uppmanas att aktivera åtkomst från klientens IP-adress i föregående steg kan du hoppa över det här steget.)

    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
    

    Använd alla verktyg eller webbplatser som visar din IP-adress som ersättning <your IP> i kommandot. Du kan till exempel använda webbplatsen Vad är min IP-adress?

  5. Skapa en databas med namnet restaurant med kommandot 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;'
    

Distribuera koden till Azure App Service

I det här avsnittet skapar du appvärd i App Service-appen, ansluter den här appen till Postgres-databasen och distribuerar sedan koden till den värden.

Skapa App Service-appen

  1. Kontrollera att du är i mappen serviceconnector-webapp-postgresql-django-passwordless som innehåller appkoden i terminalen.

  2. Kör följande az webapp up kommando för att skapa App Service-värden för appen:

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

    SKU:n definierar storleken (CPU, minne) och kostnaden för App Service-planen. B1-tjänstplanen (Basic) medför en liten kostnad i din Azure-prenumeration. En fullständig lista över App Service-planer finns på sidan med priser för App Service.

    Det här kommandot utför följande åtgärder, vilket kan ta några minuter att använda resursgruppen och platsen som cachelagras från föregående az group create kommando (gruppen $RESOURCE_GROUP_NAME i eastus regionen i det här exemplet).

    • Skapa en App Service-plan på prisnivån Basic (B1). Du kan utelämna --sku att använda standardvärden.
    • Skapa App Service-appen.
    • Aktivera standardloggning för appen.
    • Ladda upp lagringsplatsen med hjälp av ZIP-distribution med versionsautomation aktiverat.
  3. Konfigurera App Service för att använda start.sh i lagringsplatsen med kommandot az webapp config set.

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

Skapa en lösenordslös anslutning till Postgres-databasen

När koden nu har distribuerats till App Service är nästa steg att ansluta appen till Postgres-databasen i Azure. Appkoden förväntar sig att hitta databasinformation i en miljövariabel med namnet AZURE_POSTGRESQL_CONNECTIONSTRING postgresSQL – flexibel server och en miljövariabel med namnet AZURE_STORAGEBLOB_RESOURCEENDPOINT för Azure Storage-kontot.

Kommandona för Service Connector konfigurerar Azure Storage- och Azure Database for PostgreSQL-resurser för att använda hanterad identitet och rollbaserad åtkomstkontroll i Azure. Kommandona skapar appinställningar i App Service som ansluter din webbapp till dessa resurser. Utdata från kommandona visar de åtgärder för tjänstanslutning som vidtagits för att aktivera lösenordslös kapacitet.

  1. Lägg till en PostgreSQL-tjänstanslutning med kommandot az webapp connection create postgres-flexible . Den systemtilldelade hanterade identiteten används för att autentisera webbappen till målresursen PostgreSQL i det här fallet.
    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
    

Kommentar

Om du ser felmeddelandet "Prenumerationen är inte registrerad för att använda Microsoft.ServiceLinker" kör az provider register -n Microsoft.ServiceLinker du för att registrera resursprovidern för Service Connector och kör anslutningskommandot igen.

I Python-koden får du åtkomst till de här inställningarna som miljövariabler med instruktioner som os.environ.get('AZURE_POSTGRESQL_HOST'). Mer information finns i Åtkomstmiljövariabler.

Har du problem? Gå först till felsökningsguiden, annars kan du meddela oss.

Skapa ett lagringskonto och anslut till det

  1. Använd kommandot az webapp connection create storage-blob för att skapa ett lagringskonto och skapa en tjänstanslutning som utför följande konfigurationer:
  • Aktiverar systemtilldelad hanterad identitet i webbappen

  • Lägger till webbappen med rollen Storage Blob Data Contributor till det nyligen skapade lagringskontot.

  • Konfigurera lagringskontots nätverk för att acceptera åtkomst från webbappen.

    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. Uppdatera lagringskontot så att blobens offentliga åtkomst tillåts för restaurangappens användare att få åtkomst till bilder.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  2. Skapa en container som heter photos i lagringskontot med kommandot az storage container create . Tillåt anonym läsåtkomst (offentlig) till blobar i den nyligen skapade containern.

    # 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
    

Testa Python-webbappen i Azure

Python-exempelappen använder azure.identity-paketet och dess DefaultAzureCredential klass. När appen körs i Azure DefaultAzureCredential identifierar automatiskt om det finns en hanterad identitet för App Service och i så fall använder den den för att komma åt andra Azure-resurser (lagring och PostgreSQL i det här fallet). Du behöver inte ange lagringsnycklar, certifikat eller autentiseringsuppgifter till App Service för att få åtkomst till dessa resurser.

  1. Bläddra till det distribuerade programmet på URL:en http://$APP_SERVICE_NAME.azurewebsites.net.

    Det kan ta en minut eller två innan appen startas. Om du ser en standardappsida som inte är standardexempelappsidan väntar du en minut och uppdaterar webbläsaren.

  2. Testa funktionerna i exempelappen genom att lägga till en restaurang och några recensioner med foton för restaurangen. Restaurangen och granskningsinformationen lagras i Azure Database for PostgreSQL och fotona lagras i Azure Storage. Här är ett exempel på skärmbild:

    Skärmbild av exempelappen som visar funktioner för restauranggranskning med hjälp av Azure App Service, Azure PostgreSQL Database och Azure Storage.

Rensa resurser

Om du vill behålla appen eller fortsätta med fler självstudier går du vidare till Nästa steg. Annars tar du bort resursgruppen som skapats för den här självstudien för att undvika löpande avgifter:

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

Genom att ta bort resursgruppen frigör och tar du även bort alla resurser som finns i den. Se till att du inte längre behöver resurserna i gruppen innan du använder kommandot .

Det kan ta lite tid att ta bort alla resurser. Argumentet --no-wait gör att kommandot kan returneras omedelbart.

Har du problem? Berätta för oss.

Gå vidare