Dela via


Självstudie: Använda Service Connector för att skapa en Django-app med Postgres på 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 handledningen är en modifiering av App Service-handledningen, så du kommer kanske att märka 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 server databas.

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 Azure Database for PostgreSQL flexibel serverdatabas
  • Distribuera kod till Azure App Service och anslut till PostgreSQL Flexibel Server.
  • Uppdatera koden och distribuera om
  • Visa diagnostikloggar
  • Hantera webbappen i Azure-portalen

Konfigurera din första miljö

Kör från Azure Cloud Shell i Azure-portalen och installera tjänstanslutningens tillägg för lösenordsfri användning 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 Azure rollbaserad åtkomstkontroll för åtkomst Azure Storage och Azure Database for PostgreSQL – flexibel server resurser. Koden använder klassen DefaultAzureCredential i klientbiblioteket Azure Identity 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 anger automatiskt den här variabeln till webbappens URL, 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 Production-instä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 handledningen.

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

    Om kommandot az inte identifieras kontrollerar du att du har installerat Azure CLI enligt beskrivningen i Set up your initial environment.

    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 för alla Azure.
      • Med 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 vars namn anges med parametern --database-name.
  4. Konfigurera en brandväggsregel på din server 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 valfritt verktyg eller webbplats som visar din IP-adress för att ersätta <your IP> i kommandot. Till exempel kan du använda webbplatsen "What's My IP Address?".

  5. Skapa en databas med namnet restaurant med hjälp av 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 en värdapp i App Service, ansluter denna app till Postgres-databasen och slutligen distribuerar du din kod 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-hosting för appen:

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

    sku definierar storleken (CPU, minne) och kostnaden för appservice-planen. B1-tjänstplanen (Basic) medför en liten kostnad i din Azure-prenumeration. För en fullständig lista över App Service-planer, visa prissättningssidan för App Service.

    Det här kommandot utför följande åtgärder, vilket kan ta några minuter. Det använder resursgruppen och platsen som har cachelagrats från det föregående az group create kommandot (gruppen $RESOURCE_GROUP_NAME i regionen eastus 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 repositoryn 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 för en flexibel PostgreSQL-server och en miljövariabel med namnet AZURE_STORAGEBLOB_RESOURCEENDPOINT för Azure Storage konto.

Kommandona för Service Connector konfigurerar Azure Storage och Azure Database for PostgreSQL resurser för att använda hanterad identitet och Azure rollbaserad åtkomstkontroll. 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.

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 din Python-kod 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 för att tillåta offentlig åtkomst till blobar så att restaurangappens användare kan komma åt 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

Exempelappen Python använder paketet azure.identity och dess DefaultAzureCredential-klass. När appen körs i Azure identifierar DefaultAzureCredential automatiskt om det finns en hanterad identitet för App Service och använder den i så fall 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å webbadressen 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 bilderna lagras i Azure Storage. Här är ett exempel på skärmbild:

    Screenshot 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