Delen via


Zelfstudie: ServiceConnector 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 serviceconnector wordt afgespeeld en vereenvoudigt het verbindingsproces dat is gegeven in de App Service-zelfstudie.

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 Flexibele serverdatabase.

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

  • Uw initiële omgeving instellen met Python en de Azure CLI
  • Een Flexibele Azure Database for PostgreSQL-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 in Azure Portal beheren

Uw eerste omgeving instellen

Start vanuit Azure Cloud Shell in 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 in Azure-app Service. De web-app maakt gebruik van een door het systeem toegewezen beheerde identiteit (wachtwoordloze verbindingen) met op rollen gebaseerd toegangsbeheer van Azure voor toegang tot Azure Storage- en Azure Database for PostgreSQL - Flexible Server-resources. De code maakt gebruik van de klasse DefaultAzureCredential van de Azure Identity-clientbibliotheek voor Python. De DefaultAzureCredential klasse detecteert automatisch dat er een beheerde identiteit bestaat voor de App Service en gebruikt deze om toegang te krijgen tot andere Azure-resources.

  • Productie-instellingen bevinden zich in het bestand azuresite/production.py. De ontwikkelingsinstellingen bevinden zich in azuresite/settings.py.
  • De app gebruikt productie-instellingen wanneer de WEBSITE_HOSTNAME-omgevingsvariabele is ingesteld. Azure App Service stelt deze variabele automatisch in 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 sectie Controlelijst voor Django-implementatie voor meer informatie. Zie ook Productie-instellingen voor Django op Azure voor meer informatie over een aantal van de wijzigingen.

Ondervindt u problemen? Laat het ons weten.

Een 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 naam moet 8 tot 128 tekens bevatten uit drie van de volgende categorieën: Nederlandse hoofdletters, Nederlandse kleine letters, cijfers en niet-phanumerische tekens. Bij het maken van gebruikersnamen of wachtwoorden wordt het $ teken niet gebruikt. 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 y u 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 az-opdracht niet wordt herkend, controleert u of de Azure CLI is geïnstalleerd volgens de beschrijving in Uw initiële omgeving instellen.

    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. Deze naam moet uniek zijn binnen Azure.
      • Met de sku die is opgegeven 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 in de opdracht te vervangen <your IP> . U kunt bijvoorbeeld de website What's My IP Address gebruiken .

  5. Maak een database met de naam restaurant az postgres flexible-server execute command.

    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 naar 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 opslagplaats 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-serviceplan (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 voor het gebruik van de start.sh in de opslagplaats met de opdracht az webapp config set .

    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 naar App Service, is de volgende stap om de app te verbinden met de Postgres-database in Azure. De app-code verwacht databasegegevens te vinden in een omgevingsvariabele met de naam AZURE_POSTGRESQL_CONNECTIONSTRING postgresSQL flexibele server en een omgevingsvariabele met de naam AZURE_STORAGEBLOB_RESOURCEENDPOINT voor het Azure Storage-account.

De serviceconnector-opdrachten configureren Azure Storage- en Azure Database for PostgreSQL-resources voor het gebruik van beheerde identiteiten en op rollen gebaseerd toegangsbeheer van Azure. 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.

  1. Voeg een PostgreSQL-serviceconnector toe met de opdracht 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' wordt weergegeven, voert az provider register -n Microsoft.ServiceLinker u de serviceconnectorresourceprovider uit 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 openen 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 inzender voor opslagblobgegevens toe aan het zojuist gemaakte 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 die is aangeroepen photos in het opslagaccount met de opdracht az storage container create . Anonieme leestoegang (openbaar) tot blobs in de zojuist gemaakte 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 Python-voorbeeld-app maakt gebruik van het pakket azure.identity en de DefaultAzureCredential bijbehorende klasse. Wanneer de app wordt uitgevoerd in Azure, DefaultAzureCredential detecteert u 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 controlegegevens 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. Het argument --no-wait kan de opdracht onmiddellijk retourneren.

Ondervindt u problemen? Laat het ons weten.

Volgende stap