Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här självstudien får du lära dig hur du distribuerar en datadriven webbapp i Python Django till Azure App Service och använder Service Connector för att ansluta den till andra Azure-tjänster. Exempelwebbappen lagrar restaurang- och recensioninformation i en Azure Database for PostgreSQL och lagrar foton i en Azure Storage-container.
Du använder Azure CLI för att utföra följande uppgifter:
- Skapa en Python Django webbapp och distribuera den till Azure App Service.
- Skapa en Azure Database for PostgreSQL flexibel server och databas.
- Skapa ett Azure Storage konto och container.
- Anslut webbappen till databasen och lagringscontainern med hjälp av Service Connector med hanterad identitetsautentisering .
- Interagera med webbappen.
Kommentar
Den här självstudien liknar App Service Distribuera en Python Django-webbapp med PostgreSQL i Azure, men använder en systemtilldelad lösenordslös hanterad identitet med rollbaserad åtkomstkontroll i Azure för att få åtkomst till andra Azure-resurser. Avsnittet Skapa en lösenordslös tjänstanslutning i den här artikeln visar hur Service Connector förenklar anslutningsprocessen.
Webbappen använder klassen DefaultAzureCredential för klientbiblioteket Python Azure Identity för att automatiskt identifiera när en hanterad identitet finns och använder den för att komma åt de andra resurserna.
Förutsättningar
En Azure-prenumeration med skriv- och rolltilldelningsbehörigheter för självstudieresurserna i en Azure region som supports Service Connector och har tillräckligt App Service-stöd och kvot.
Azure Cloud Shell för att genomföra handledningsstegen eller om du föredrar att köra lokalt:
- Installera Azure CLI 2.30.0 eller senare. Kontrollera din version genom att köra
az --version. Om du vill uppgradera kör duaz upgrade. - Logga in på Azure med hjälp av
az loginoch följ anvisningarna.
- Installera Azure CLI 2.30.0 eller senare. Kontrollera din version genom att köra
Konfigurera din miljö
Kontrollera att din prenumeration är registrerad för att använda resursleverantörer
Microsoft.ServiceLinkerochMicrosoft.DBforPostgreSQL. Annars kör duaz provider register -n Microsoft.[name of service]för att registrera leverantörerna.Installera följande Azure CLI tillägg:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connect
Klona exempelappen
Klona exempelapplagringsplatsen.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless.gitDu kan också ladda ned appen från https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django-passwordless och packa upp den i en mapp med namnet serviceconnector-webapp-postgresql-django-passwordless.
Ändra kataloger till lagringsplatsmappen med hjälp av
cd serviceconnector-webapp-postgresql-django-passwordlessoch kör alla återstående kommandon från mappen.
I exempelappen finns inställningarna för webbappens produktion i filen azuresite/production.py . Utvecklingsinställningarna finns i azuresite/settings.py. Produktionsinställningarna konfigurerar Django att köras i alla produktionsmiljöer och är inte specifika för App Service.
Appen använder produktionsinställningar när WEBSITE_HOSTNAME miljövariabeln anges. För Azure Postgres-anslutningssträngar anger App Service automatiskt den här variabeln till URL:en för webbappen, till exempel https://msdocs-django.azurewebsites.net.
Mer information finns i checklistan för Django-distribution. Se även inställningar för Production för Django på Azure.
Definiera inledande miljövariabler
Följande kod definierar nödvändiga miljövariabler för den här handledningen.
-
LOCATIONmåste vara en Azure region där din prenumeration har tillräcklig kvot för att skapa resurserna och inte begränsar Azure Database for PostgreSQL för din prenumeration. -
ADMIN_PWMåste innehålla mellan 8 och 128 tecken i minst tre av de fyra kategoriernas versaler, gemener, siffror och icke-numeriska tecken, exklusive$.
Konfigurera följande miljövariabler och ersätt
<region>platshållarna och<database password>med giltiga värden.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>"Skapa en resursgrupp som ska innehålla alla projektresurser. Resursgruppens namn cachelagras och tillämpas automatiskt på efterföljande kommandon.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Distribuera appkoden till App Service
Skapa appvärden i App Service och distribuera exempelappens kod till appvärden. Kommandot az webapp up utför följande åtgärder:
- Skapar en App Service-plan på prisnivån Basic (B1).
- Skapar App Service-appen.
- Aktiverar standardloggning för appen.
- Laddar upp lagringsplatsen med hjälp av ZIP-distribution med versionsautomation aktiverat.
- Skapar appen.
I koden sku definierar cpu, minne och kostnad för App Service-planen. Tjänstplanen Basic (B1) medför en liten kostnad i din Azure-prenumeration. Du kan utelämna parametern --sku för att använda standard-SKU:n, vanligtvis P1v3 (Premium v3). En fullständig lista över App Service-planer finns i Priser för App Service.
Kör följande kommando från mappen
az webapp up:az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --location $LOCATION \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.10 \ --sku B1Kommentar
Implementeringen tar några minuter och kommandot kan fastna eller överskrida tidsgränsen, särskilt på en Grundläggande SKU. När appen har skapats och utdata visas
Starting the sitekan du avsluta kommandot genom att välja Ctrl+C.Konfigurera appen så att den använder lagringsplatsen start.sh-filen genom att köra kommandot az webapp config set .
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Skapa Postgres-databasen i Azure
Skapa Azure Database for PostgreSQL-databasen för att lagra appinformation. Kommandot az postgres flexible-server create skapar en Azure Database for PostgreSQL flexibel server i den angivna resursgruppen som har:
- Servernamn som anges i parametern
--name. Namnet måste vara unikt för alla Azure. - SKU som anges i parametern
--sku-name. - Användarnamn och lösenord för administratörskonto som anges i parametrarna
--admin-useroch--admin-password.
Skapa en Azure-databas för PostgreSQL-server. Om du uppmanas att aktivera åtkomst till den aktuella klientens IP-adress anger du
yja.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 EnabledOm du inte uppmanas att aktivera åtkomst till din aktuella klient-IP-adress konfigurerar du 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.
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_ADDRESSTips/Råd
Använd valfritt verktyg eller webbplats som visar din IP-adress för att ersätta
<your IP address>i kommandot. Du kan till exempel använda Vad är min IP-adress?.Skapa en databas med namnet
restaurantpå servern 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;'
Skapa en lösenordslös tjänstanslutning
Använd az webapp connection create postgres-flexible för att lägga till en tjänstekoppling som ansluter Azure-webbappen till Postgres-databasen med hjälp av lösenordsfri autentisering med hanterad identitet. Följande kommando konfigurerar Azure Database for PostgreSQL att använda hanterad identitet och Azure rollbaserad åtkomstkontroll. Kommandoutdata visar de åtgärder som Service Connector vidtar.
Kommandot skapar en miljövariabel med namnet AZURE_POSTGRESQL_CONNECTIONSTRING som tillhandahåller information om databasanslutningen för appen. Appkoden kommer åt appmiljövariabler med instruktioner som os.environ.get('AZURE_POSTGRESQL_HOST'). Mer information finns i Åtkomstmiljövariabler.
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
Skapa och ansluta till ett lagringskonto
Använd az webapp connection create storage-blob för att skapa ett Azure lagringskonto och en tjänstanslutning. Kommandot utför följande åtgärder:
- Aktiverar systemtilldelad hanterad identitet i webbappen.
- Lägger till webbappen med rollen Storage Blob Data Contributor till det nya lagringskontot.
- Konfigurerar lagringskontots nätverk för att acceptera åtkomst från webbappen.
- Skapar en miljövariabel med namnet
AZURE_STORAGEBLOB_RESOURCEENDPOINTför Azure Storage-kontot.
Kör följande kommando för att skapa lagringskontot och anslutningen:
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))Uppdatera lagringskontot för att tillåta offentlig blobåtkomst för appanvändare att komma åt foton.
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --allow-blob-public-accessAnvänd az storage container create för att skapa en container som heter
photosi lagringskontot och tillåta anonym offentlig läsåtkomst till blobar i den nya 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
Öppna och testa webbappen Azure Restaurant Review. Appen använder azure.identity-paketet och dess DefaultAzureCredential klass. När appen körs i Azure identifierar DefaultAzureCredential automatiskt när en hanterad identitet finns för App Service och använder den för att komma åt Azure Storage och Azure Database for PostgreSQL resurser. Appen behöver inte ange lagringsnycklar, certifikat eller autentiseringsuppgifter för att få åtkomst till dessa resurser.
För en lokal Azure CLI installation kan du använda
az webapp browseför att öppna appen i standardwebbläsaren:az webapp browse --name $APP_SERVICE_NAME.azurewebsites.net --resource-group $RESOURCE_GROUP_NAMEAzure Cloud Shell kan inte öppna en lokal webbläsare, så den stöder inte kommandot
az webapp browse. Från Cloud Shell är det enklaste sättet att öppna webbappen att välja Default-domän länk längst upp till höger på appens Azure portalsida.
Det kan ta en minut eller två innan appen startas. Om du ser en standardappsida som inte är exempelappen väntar du en minut och uppdaterar webbläsaren.
Testa funktionerna i exempelappen genom att lägga till en restaurang och några recensioner med foton. Appen bör likna följande skärmbild:
Rensa resurser
För att undvika löpande avgifter kan du ta bort de resurser som du skapade för den här självstudien genom att ta bort den resursgrupp som innehåller dem. Se till att du inte längre behöver appen eller resurserna innan du kör kommandot.
az group delete --name $RESOURCE_GROUP_NAME --no-wait
Det kan ta lite tid att ta bort alla resurser. Argumentet --no-wait gör att kommandot kan returneras omedelbart.
Felsökning
Om du har problem med att köra den här handledningen kan du se följande resurser: