Delen via


Zelfstudie: Service Connector gebruiken om een Django-app te bouwen met Postgres op Azure App Service

Notitie

In deze zelfstudie gebruikt u Service Connector om een web-app te verbinden met een databaseservice. Deze zelfstudie is een wijziging van de App Service-zelfstudie, zodat u mogelijk overeenkomsten ziet. Bekijk de sectie Een connector zonder wachtwoord maken voor Postgres-database om te zien waar de Service Connector in beeld komt en het verbindingsproces vereenvoudigt zoals gegeven in de App Service-handleiding.

Deze zelfstudie laat zien hoe u een gegevensgestuurde Python Django-web-app implementeert in Azure App Service en deze verbindt met een Azure Database for PostgreSQL Flexible-server-database.

In deze zelfstudie gebruikt u de Azure CLI om de volgende taken uit te voeren:

  • Uw eerste omgeving instellen met Python en de Azure CLI
  • Een Azure Database for PostgreSQL Flexibele serverdatabase maken
  • Code implementeren in Azure App Service en verbinding maken met PostgreSQL Flexibele server
  • Uw code bijwerken en opnieuw implementeren
  • Diagnostische logboeken weergeven
  • De web-app beheren in de Azure-portal

Uw eerste omgeving instellen

Start vanuit Azure Cloud Shell in de Azure-portal en installeer de extensie zonder wachtwoord voor de serviceconnector voor de Azure CLI.

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

De voorbeeld-app klonen of downloaden

Kloon de voorbeeldopslagplaats:

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

Navigeer naar de volgende map:

cd serviceconnector-webapp-postgresql-django-passwordless

In deze zelfstudie implementeert u een Django-web-app naar Azure App Service. De web-app maakt gebruik van een door het systeem toegewezen beheerde identiteit (wachtwoordloze verbindingen) met Azure op rollen gebaseerd toegangsbeheer voor toegang tot Azure Storage en Azure Database for PostgreSQL - Flexibele server resources. De code maakt gebruik van de klasse DefaultAzureCredential klasse van de Azure Identity-clientbibliotheek voor Python. De klasse DefaultAzureCredential detecteert automatisch dat er een beheerde identiteit bestaat voor de App Service en gebruikt voor toegang tot andere Azure resources.

  • Productie-instellingen bevinden zich in het bestand azuresite/production.py . Ontwikkelinstellingen bevinden zich in azuresite/settings.py.
  • De app maakt gebruik van productie-instellingen wanneer de WEBSITE_HOSTNAME omgevingsvariabele is ingesteld. Azure App Service deze variabele automatisch instelt op de URL van de web-app, zoals msdocs-django.azurewebsites.net.

Deze productie-instellingen dienen specifiek om Django uit te voeren in een productieomgeving en zijn niet uniek voor App Service. Zie de Controlelijst voor Django-implementatie voor meer informatie. Zie ook Production-instellingen voor Django op Azure voor meer informatie over een aantal wijzigingen.

Ondervindt u problemen? Laat het ons weten.

Postgres-database maken in Azure

  1. Stel de omgevingsvariabelen in die nodig zijn voor de zelfstudie.

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

    Belangrijk

    De ADMIN_PW moet 8 tot 128 tekens bevatten uit drie van de volgende categorieën: Engelse hoofdletters, Engelse kleine letters, cijfers en niet-alfanumerieke tekens. Gebruik geen teken bij het maken van gebruikersnamen of wachtwoorden. Later maakt u omgevingsvariabelen met deze waarden waarbij het teken $ een specifieke betekenis heeft binnen de Linux-container die wordt gebruikt om Python apps uit te voeren.

  2. Maak een resourcegroep (u kunt desgewenst de naam wijzigen). De naam van de resourcegroep wordt in de cache opgeslagen en automatisch toegepast op volgende opdrachten.

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    
  3. Maak de databaseserver. Als u wordt gevraagd om toegang tot het huidige IP-adres van de client in te schakelen, typt u y ja. Dit proces duurt enkele minuten:

    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
    

    Als de opdracht az niet wordt herkend, moet u ervoor zorgen dat u de Azure CLI hebt geïnstalleerd zoals beschreven in Set up your initial environment.

    De opdracht az postgres flexible-server create voert de volgende acties uit, die enkele minuten duren:

    • Maak een standaardresourcegroep als er nog geen naam in de cache is.
    • Maak een PostgreSQL Flexibele server:
      • Met de servernaam die is opgegeven met de --name parameter. De naam moet uniek zijn in alle Azure.
      • Met het artikelnummer dat is gespecificeerd met de --sku-name-parameter.
    • Maak een beheerdersaccount met een gebruikersnaam en wachtwoord die zijn opgegeven met de --admin-user en --admin-password parameters.
    • Maak een database met de naam die is opgegeven met de --database-name parameter.
  4. Configureer een firewallregel op uw server met de opdracht az postgres flexible-server firewall-rule create. Met deze regel heeft uw lokale omgeving toegang tot de server. (Als u wordt gevraagd om toegang in te schakelen vanaf het IP-adres van uw client in de vorige stap, kunt u deze stap overslaan.)

    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
    

    Gebruik een hulpprogramma of website waarop uw IP-adres wordt weergegeven om `<your IP>` in de opdracht te vervangen. U kunt bijvoorbeeld de website What's My IP Address? gebruiken.

  5. Maak een database genaamd restaurant met behulp van het commando 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;'
    

De code implementeren in Azure App Service

In deze sectie maakt u een app-host in de App Service-app, koppelt u deze app aan de Postgres-database en implementeert u vervolgens uw code naar die host.

De App Service-app maken

  1. Zorg ervoor dat u zich in de terminal bevindt in de map van de repository serviceconnector-webapp-postgresql-django-passwordless die de app-code bevat.

  2. Voer de volgende az webapp up opdracht uit om de App Service-host voor de app te maken:

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

    De sku definieert de grootte (CPU, geheugen) en de kosten van het App Service-plan. Voor het B1-serviceabonnement (Basic) worden kleine kosten in uw Azure-abonnement in rekening gebracht. Bekijk de pagina met App Service-prijzen voor een volledige lijst met App Service-abonnementen.

    Met deze opdracht worden de volgende acties uitgevoerd. Dit kan enkele minuten duren met behulp van de resourcegroep en de locatie die is opgeslagen in de cache van de vorige az group create opdracht (de groep $RESOURCE_GROUP_NAME in de eastus regio in dit voorbeeld).

    • Maak een App Service-plan in de Prijscategorie Basic (B1). U kunt weglaten --sku om standaardwaarden te gebruiken.
    • Maak de App Service-app.
    • Schakel standaardlogboekregistratie in voor de app.
    • Upload de opslagplaats met behulp van ZIP-implementatie, met ingeschakelde bouwautomatisering.
  3. Configureer App Service om de start.sh in de repo te gebruiken met het az webapp config set-commando.

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

Een connector zonder wachtwoord maken voor Postgres-database

Nu de code is geïmplementeerd in App Service, is de volgende stap het verbinden van de app met de Postgres-database in Azure. De app-code verwacht databasegegevens te vinden in een omgevingsvariabele met de naam AZURE_POSTGRESQL_CONNECTIONSTRING voor flexibele PostgreSQL-server en een omgevingsvariabele met de naam AZURE_STORAGEBLOB_RESOURCEENDPOINT voor Azure Storage-account.

De serviceconnector-opdrachten configureren Azure Storage en Azure Database for PostgreSQL resources voor het gebruik van beheerde identiteiten en Azure op rollen gebaseerd toegangsbeheer. De opdrachten maken app-instellingen in de App Service die uw web-app verbinden met deze resources. De uitvoer van de opdrachten bevat de acties van de serviceconnector die zijn uitgevoerd om de mogelijkheid zonder wachtwoord in te schakelen.

Voeg een PostgreSQL-service connector toe met de commando az webapp connection create postgres-flexible. In dit geval wordt de door het systeem toegewezen beheerde identiteit gebruikt om de web-app te verifiëren bij de doelresource, 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

Notitie

Als u het foutbericht 'Het abonnement is niet geregistreerd voor gebruik van Microsoft.ServiceLinker' ziet, voert u az provider register -n Microsoft.ServiceLinker uit om de Service Connector resourceprovider te registreren en voert u de verbindingsopdracht opnieuw uit.

In uw Python-code opent u deze instellingen als omgevingsvariabelen met instructies zoals os.environ.get('AZURE_POSTGRESQL_HOST'). Zie Omgevingsvariabelen van Access voor meer informatie.

Ondervindt u problemen? Raadpleeg eerst de Handleiding voor het oplossen van problemen. Als u er niet uitkomt, laat het ons weten.

Een opslagaccount maken en er verbinding mee maken

  1. Gebruik de opdracht az webapp connection create storage-blob om een opslagaccount te maken en maakt een serviceconnector die de volgende configuraties doet:
  • Hiermee schakelt u door het systeem toegewezen beheerde identiteit in de web-app in

  • Hiermee voegt u de web-app met de rol Storage Blob Data Contributor toe aan het nieuw aangemaakte opslagaccount.

  • Configureer het netwerk van het opslagaccount om toegang te accepteren vanuit de web-app.

    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. Werk het opslagaccount bij om openbare blobtoegang toe te staan voor gebruikers van de restaurant-app voor toegang tot afbeeldingen.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  2. Maak een container genaamd photos in het opslagaccount met de opdracht az storage container create. Anonieme leestoegang (openbaar) tot blobs in de nieuw aangemaakte container toestaan.

    # 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
    

De Python-web-app testen in Azure

De voorbeeld-Python-app maakt gebruik van het pakket azure.identity en de bijbehorende klasse DefaultAzureCredential. Wanneer de app wordt uitgevoerd in Azure, detecteert DefaultAzureCredential automatisch of er een beheerde identiteit bestaat voor de App Service. Als dat het geval is, wordt deze gebruikt voor toegang tot andere Azure resources (opslag en PostgreSQL in dit geval). U hoeft geen opslagsleutels, certificaten of referenties voor de App Service op te geven voor toegang tot deze resources.

  1. Blader naar de geïmplementeerde toepassing op de URL http://$APP_SERVICE_NAME.azurewebsites.net.

    Het kan een paar minuten duren voordat de app is gestart. Als u een standaard-app-pagina ziet die niet de standaardpagina van de voorbeeld-app is, wacht u even en vernieuwt u de browser.

  2. Test de functionaliteit van de voorbeeld-app door een restaurant en enkele beoordelingen met foto's voor het restaurant toe te voegen. Het restaurant en de beoordelingsinformatie worden opgeslagen in Azure Database for PostgreSQL en de foto's worden opgeslagen in Azure Storage. Hier volgt een voorbeeldschermopname:

    Schermopname van de voorbeeld-app met de functionaliteit van restaurantbeoordeling met behulp van Azure App Service, Azure PostgreSQL-database en Azure Storage.

Resources opschonen

Als u de app wilt behouden of meer zelfstudies wilt volgen, gaat u verder met de volgende stappen. Verwijder anders de resourcegroep die voor deze zelfstudie is gemaakt om lopende kosten te voorkomen:

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

Door de resourcegroep te verwijderen, kunt u ook de toewijzing van alle resources erin ongedaan maken en deze verwijderen. Zorg ervoor dat u de resources in de groep niet meer nodig hebt voordat u de opdracht gebruikt.

Alle resources verwijderen kan enige tijd duren. Met --no-wait het argument kan de opdracht onmiddellijk worden geretourneerd.

Ondervindt u problemen? Laat het ons weten.

Volgende stap