Delen via


Zelfstudie: Een Django-web-app verbinden met Azure PostgreSQL met behulp van Service Connector

In deze zelfstudie leert u hoe u een gegevensgestuurde Python Django-web-app implementeert om Azure App Service en serviceconnector te gebruiken om deze te verbinden met andere Azure-services. De voorbeeldweb-app slaat restaurant- en beoordelingsinformatie op in een Azure Database for PostgreSQL en slaat foto's op in een Azure Storage-container.

U gebruikt Azure CLI om de volgende taken uit te voeren:

Notitie

Deze zelfstudie is vergelijkbaar met de App Service Deploy a Python Django-web-app met PostgreSQL in Azure zelfstudie, maar maakt gebruik van een door het systeem toegewezen beheerde identiteit zonder wachtwoord met Azure op rollen gebaseerd toegangsbeheer voor toegang tot andere Azure resources. In de sectie Een serviceverbinding zonder wachtwoord maken in dit artikel ziet u hoe serviceconnector het verbindingsproces vereenvoudigt.

De web-app maakt gebruik van de klasse DefaultAzureCredential klasse van de Python Azure Identity-clientbibliotheek om automatisch te detecteren wanneer een beheerde identiteit bestaat en deze gebruikt voor toegang tot de andere resources.

Vereiste voorwaarden

  • Een Azure-abonnement met schrijf- en roltoewijzingsmachtigingen voor de zelfstudiebronnen, in een Azure regio die serviceconnector ondersteunt en voldoende App-serviceondersteuning en -quotum heeft.

  • Azure Cloud Shell om de zelfstudiestappen uit te voeren of als u liever lokaal wilt uitvoeren:

    1. Installeer Azure CLI 2.30.0 of hoger. Voer de opdracht uit az --versionom uw versie te controleren. Voer az upgrade uit voor een upgrade.
    2. Meld u aan bij Azure met behulp van az login en volg de aanwijzingen.

Uw omgeving instellen

  1. Zorg ervoor dat uw abonnement is geregistreerd voor het gebruik van de resourceproviders Microsoft.ServiceLinker en Microsoft.DBforPostgreSQL. Als dat niet het is, voert u az provider register -n Microsoft.[name of service] uit om de providers te registreren.

  2. Installeer de volgende Azure CLI-extensies:

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

De voorbeeld-app klonen

  1. Kloon de opslagplaats van de voorbeeld-app.

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

    U kunt de app ook downloaden van https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless en deze uitpakken in een map met de naam serviceconnector-webapp-postgresql-django-passwordless.

  2. Verander van directory naar de map van de repository met cd serviceconnector-webapp-postgresql-django-passwordless en voer alle resterende opdrachten vanuit die map uit.

In de voorbeeld-app bevinden de productie-instellingen van de web-app zich in het bestand azuresite/production.py . Ontwikkelinstellingen bevinden zich in azuresite/settings.py. De productie-instellingen configureren Django om te worden uitgevoerd in een productieomgeving en zijn niet specifiek voor App Service.

De app maakt gebruik van productie-instellingen wanneer de WEBSITE_HOSTNAME omgevingsvariabele is ingesteld. Voor Azure Postgres-verbindingsreeksen stelt App Service deze variabele automatisch in op de URL van de web-app, zoals https://msdocs-django.azurewebsites.net.

Zie de Controlelijst voor Django-implementatie voor meer informatie. Zie ook Production-instellingen voor Django op Azure.

Initiële omgevingsvariabelen definiëren

De volgende code definieert de benodigde omgevingsvariabelen voor deze zelfstudie.

  • LOCATION moet een Azure-regio zijn waar uw abonnement voldoende capaciteit heeft om de resources te maken en de Azure Database for PostgreSQL voor uw abonnement niet beperkt is.
  • Het ADMIN_PW moet 8 tot 128 tekens bevatten in ten minste drie van de vier categorieën hoofdletters, kleine letters, cijfers en niet-phanumerische tekens, met uitzondering $van .
  1. Stel de volgende omgevingsvariabelen in, waarbij u de <region><database password> tijdelijke aanduidingen vervangt door geldige waarden.

    LOCATION="<region>"
    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="<database password>"
    
  2. Maak een resourcegroep die alle projectresources bevat. 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
    

De app-code implementeren in App Service

Maak de app-host in App Service en implementeer de voorbeeld-app-code op die host. Met az webapp up de opdracht worden de volgende acties uitgevoerd:

  • Hiermee maakt u een App Service-plan in de prijscategorie Basic (B1).
  • Hiermee maakt u de App Service-app.
  • Hiermee schakelt u standaardlogboekregistratie in voor de app.
  • Uploadt de opslagplaats met behulp van ZIP-implementatie met buildautomatisering ingeschakeld.
  • Het bouwt de app.

In de code sku worden de CPU, het geheugen en de kosten van het App Service-plan gedefinieerd. Voor het Serviceplan Basic (B1) worden kleine kosten in uw Azure-abonnement in rekening gebracht. U kunt de --sku parameter weglaten om de standaard-SKU te gebruiken, meestal P1v3 (Premium v3). Zie App Service-prijzen voor een volledige lijst met App Service-abonnementen.

  1. Voer de volgende opdracht uit vanuit de map az webapp up repository:

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

    Notitie

    De implementatie duurt enkele minuten en de opdracht kan vastlopen of een time-out krijgen, met name op een Basic SKU. Zodra de app succesvol is gebouwd en de uitvoer Starting the site toont, kunt u de opdracht afsluiten door Ctrl+C in te drukken.

  2. Configureer de app voor het gebruik van de opslagplaats start.sh bestand door de opdracht az webapp config set uit te voeren.

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

De Postgres-database maken in Azure

Maak de Azure Database for PostgreSQL-database om app-gegevens op te slaan. Met de opdracht az postgres flexible-server create maakt u een Azure Database for PostgreSQL flexibele server in de opgegeven resourcegroep met:

  • Servernaam die is opgegeven in de --name parameter. De naam moet uniek zijn in alle Azure.
  • SKU die is opgegeven in de --sku-name parameter.
  • Gebruikersnaam en wachtwoord van beheerdersaccount die zijn opgegeven in de --admin-user en --admin-password parameters.
  1. Maak de Azure-database voor de PostgreSQL-server aan. Als u wordt gevraagd om toegang tot het huidige IP-adres van de client in te schakelen, voert u y ja in.

    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 \
      --microsoft-entra-auth Enabled
    
  2. Als u niet wordt gevraagd om toegang tot uw huidige IP-adres van de client in te schakelen, configureert u 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.

    IP_ADDRESS=<your IP address>
    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
    

    Aanbeveling

    Gebruik een hulpprogramma of website waarop uw IP-adres wordt weergegeven om `<your IP address>` in de opdracht te vervangen. U kunt bijvoorbeeld Mijn IP-adres gebruiken.

  3. Maak een database met de naam restaurant op de server met behulp van de opdracht 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;'
    

Een serviceverbinding zonder wachtwoord maken

Gebruik az webapp connection create postgres-flexible om een serviceconnector toe te voegen die de Azure web-app verbindt met de Postgres-database met behulp van verificatie voor beheerde identiteit zonder wachtwoord. Met de volgende opdracht configureert u Azure Database for PostgreSQL voor het gebruik van beheerde identiteit en Azure op rollen gebaseerd toegangsbeheer. De uitvoer van de opdracht bevat de acties die Service Connector uitvoert.

Met de opdracht maakt u een omgevingsvariabele met de naam AZURE_POSTGRESQL_CONNECTIONSTRING die de databaseverbindingsgegevens voor de app biedt. De app-code heeft toegang tot de omgevingsvariabelen van de app met instructies zoals os.environ.get('AZURE_POSTGRESQL_HOST'). Zie Omgevingsvariabelen van Access voor meer informatie.

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

Een opslagaccount maken en er verbinding mee maken

Gebruik az webapp connection create storage-blob om een Azure-opslagaccount en een serviceconnector te maken. De opdracht voert de volgende acties uit:

  • Hiermee schakelt u door het systeem toegewezen beheerde identiteit in de web-app in.
  • Hiermee voegt u de web-app met rol Inzender voor opslagblobgegevens toe aan het nieuwe opslagaccount.
  • Hiermee configureert u het netwerk van het opslagaccount om toegang te accepteren vanuit de web-app.
  • Hiermee maakt u een omgevingsvariabele met de naam AZURE_STORAGEBLOB_RESOURCEENDPOINT voor het Azure Storage-account.
  1. Voer de volgende opdracht uit om het opslagaccount en de verbinding te maken:

    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))
    
  2. Werk het opslagaccount bij om openbare blobtoegang toe te staan voor app-gebruikers om toegang te krijgen tot foto's.

     az storage account update  \
       --name $STORAGE_ACCOUNT_NAME \
       --allow-blob-public-access 
    
  3. Gebruik az storage container create om een container te maken die wordt aangeroepen photos in het opslagaccount en anonieme openbare leestoegang tot blobs in de nieuwe container toe te staan.

    # 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

Open en test de Azure Restaurant Review webapp. De app maakt gebruik van het azure.identity-pakket en de bijbehorende DefaultAzureCredential klasse. Wanneer de app wordt uitgevoerd in Azure, detecteert de DefaultAzureCredential automatisch wanneer er een beheerde identiteit voor de App Service bestaat en wordt deze gebruikt voor toegang tot de Azure Storage- en Azure Database for PostgreSQL-resources. De app hoeft geen opslagsleutels, certificaten of referenties op te geven voor toegang tot deze resources.

  • Voor een lokale Azure CLI-installatie kunt u az webapp browse gebruiken om de app te openen in uw standaardbrowser:

    az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAME
    
  • Azure Cloud Shell een lokale browser niet kan openen, zodat de opdracht az webapp browse niet wordt ondersteund. Vanuit Cloud Shell kunt u de web-app het eenvoudigst openen door de koppeling Default-domein in de rechterbovenhoek van de Azure portalpagina van de app te selecteren.

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

Test de functionaliteit van de voorbeeld-app door een restaurant en enkele beoordelingen met foto's toe te voegen. De app moet er ongeveer uitzien als in de volgende schermopname:

Schermopname van de voorbeeld-app met de functionaliteit voor het controleren van het restaurant met behulp van App Service, Azure Database for PostgreSQL en Azure Storage.

Resources opschonen

Als u doorlopende kosten wilt voorkomen, kunt u de resources verwijderen die u voor deze zelfstudie hebt gemaakt door de resourcegroep met deze resources te verwijderen. Zorg ervoor dat u de app of de resources niet meer nodig hebt voordat u de opdracht uitvoert.

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

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

Troubleshooting

Als u problemen ondervindt met het uitvoeren van deze zelfstudie, raadpleegt u de volgende bronnen: