Snabbstart: Distribuera en Python-webbapp (Django, Flask eller FastAPI) till Azure App Service
Artikel
Kommentar
Från och med den 1 juni 2024 har alla nyligen skapade App Service-appar möjlighet att generera ett unikt standardvärdnamn med hjälp av namngivningskonventionen <app-name>-<random-hash>.<region>.azurewebsites.net. Befintliga appnamn förblir oförändrade.
I den här snabbstarten distribuerar du en Python-webbapp (Django, Flask eller FastAPI) till Azure App Service. Azure App Service är en fullständigt hanterad webbvärdtjänst som stöder Python-appar som finns i en Linux-servermiljö.
Följande krävs för att slutföra den här snabbstarten:
Den här artikeln innehåller aktuella instruktioner om hur du distribuerar en Python-webbapp med Hjälp av Azure App Service. Python i Windows stöds inte längre.
Programexempel
Den här snabbstarten kan slutföras med antingen Flask, Django eller FastAPI. Ett exempelprogram i varje ramverk tillhandahålls som hjälper dig att följa med i den här snabbstarten. Ladda ned eller klona exempelprogrammet till din lokala arbetsstation.
För att vara värd för ditt program i Azure måste du skapa en Azure App Service-webbapp i Azure. Du kan skapa en webbapp med hjälp av Azure CLI, VS Code, Azure Tools-tilläggspaketet eller Azure Portal.
Skapa webbappen och andra resurser och distribuera sedan koden till Azure med az webapp up.
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
Parametern --runtime anger vilken version av Python som din app kör. I det här exemplet används Python 3.9. Om du vill visa en lista över alla tillgängliga körningar använder du kommandot az webapp list-runtimes --os linux --output table.
Parametern --sku definierar storleken (CPU, minne) och kostnaden för App Service-planen. I det här exemplet används tjänstplanen B1 (Basic), vilket medför en liten kostnad i din Azure-prenumeration. En fullständig lista över App Service-planer finns på sidan med priser för App Service.
Flaggan --logs konfigurerar standardloggning som krävs för att aktivera visning av loggströmmen omedelbart efter att webbappen har startats.
Du kan också ange ett namn med argumentet --name <app-name>. Om du inte anger något genereras ett namn automatiskt.
Du kan också inkludera argumentet --location <location-name> där <location_name> är en tillgänglig Azure-region. Du kan hämta en lista över tillåtna regioner för ditt Azure-konto genom att az appservice list-locations köra kommandot .
Det kan ta några minuter att slutföra kommandot. När kommandot körs visas meddelanden om hur du skapar resursgruppen, App Service-planen och appresursen, konfigurerar loggning och utför ZIP-distribution. Meddelandet "Du kan starta appen på http://< app-name.azurewebsites.net>", som är appens URL i Azure.
The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/cephas/myExpressApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
{
"URL": "http://<app-name>.azurewebsites.net",
"appserviceplan": "<app-service-plan-name>",
"location": "centralus",
"name": "<app-name>",
"os": "<os-type>",
"resourcegroup": "<group-name>",
"runtime_version": "python|3.9",
"runtime_version_detected": "0.0",
"sku": "FREE",
"src_path": "<your-folder-location>"
}
Cachelagra parametrarna lokalt i .azure/config-filen så att du inte behöver ange dem igen när du distribuerar dem senare med az webapp up eller andra az webapp kommandon från projektmappen. De cachelagrade värdena används automatiskt som standard.
Om du vill skapa Azure-resurser i VS Code måste du ha Azure Tools-tilläggspaketet installerat och loggas in på Azure från VS Code.
Leta upp Azure-ikonen i det vänstra verktygsfältet. Välj det för att ta upp Tillägget Azure Tools for VS Code.
Om du inte ser Azure Tools-ikonen kontrollerar du att Azure Tools-tillägget för VS Code är installerat.
I Azure Tools-tillägget för VS Code:
Leta upp avsnittet RESURSER och välj din prenumeration.
Välj + (Skapa resurs...)
Välj alternativet Skapa App Service-webbapp... .
Ange namnet msdocs-python-webapp-quickstart-XYZ för den här webbappen, där XYZ är tre unika tecken.
När det här namnet distribueras används det som ditt appnamn i formuläret https://<app-name>.azurewebsites.net.
Välj körningsstacken för programmet. I det här exemplet väljer du Python 3.9.
Välj App Service-planen (prisnivå) för den här webbappen. App Service-planen styr hur många resurser (CPU/minne) som är tillgängliga för din app och hur mycket du betalar.
I det här exemplet väljer du prisnivån Basic (B1). Den här planen medför en liten avgift mot din Azure-prenumeration, men rekommenderas för bättre prestanda jämfört med den kostnadsfria nivån (F1).
Välj knappen Distribuera i meddelandet "Skapad ny webbapp".
Välj den snabbstartsmapp som du arbetar i som den som ska distribueras.
Svara Ja om du vill uppdatera byggkonfigurationen och förbättra distributionsprestandan.
När distributionen är klar visas ett meddelande i det nedre högra hörnet av VS Code. Du kan använda det här meddelandet för att bläddra till webbappen.
Logga in på Azure Portal och följ dessa steg för att skapa dina Azure App Service-resurser.
Instruktioner
Skärmbild
I Azure Portal:
Ange apptjänster i sökfältet överst i Azure Portal.
Välj objektet med etiketten App Services under rubriken Tjänster på menyn som visas under sökfältet.
På sidan App Services väljer du + Skapa och sedan + Webbapp på den nedrullningsbara menyn.
På sidan Skapa webbapp fyller du i formuläret på följande sätt.
Resursgrupp → Välj Skapa ny och använd namnet msdocs-python-webapp-quickstart.
Namn → msdocs-python-webapp-quickstart-XYZ där XYZ är tre slumpmässiga tecken. Användarnamnet måste vara unikt inom Azure.
Körningsstacken → Python 3.9.
Region → Valfri Azure-region nära dig.
App Service Plan → Under Prisplan väljer du Utforska prisplaner för att välja en annan App Service-plan.
App Service-planen styr mängden resurser (CPU/minne) som är tillgängliga för din app och kostnaden för dessa resurser.
I det här exemplet, under Dev/Test, väljer du Basic B1-planen . Basic B1-planen medför en liten avgift mot ditt Azure-konto, men rekommenderas för bättre prestanda jämfört med den kostnadsfria F1-planen.
När du är klar väljer du Välj för att tillämpa ändringarna.
På huvudsidan Skapa webbapp väljer du Granska + skapa längst ned på skärmen.
Då kommer du till sidan Granska. Välj Skapa för att skapa din App Service.
Azure App Service stöder flera metoder för att distribuera programkoden till Azure, inklusive GitHub Actions och alla större CI/CD-verktyg. Den här artikeln fokuserar på hur du distribuerar din kod från din lokala arbetsstation till Azure.
az webapp up Eftersom kommandot skapade nödvändiga resurser och distribuerade programmet i ett enda steg kan du gå vidare till nästa steg.
Eftersom föregående steg skapade nödvändiga resurser och distribuerade ditt program i ett enda steg kan du gå vidare till nästa steg.
Du kan distribuera programkoden från en lokal Git-lagringsplats till Azure genom att konfigurera en Git-fjärranslutning på din lokala lagringsplats som pekar på den lagringsplats som du vill skicka kod till. URL:en för fjärrlagringsplatsen och De Git-autentiseringsuppgifter som behövs för konfigurationen kan hämtas med antingen Azure Portal eller Azure CLI.
Ange namnet på din App Service i sökrutan överst på skärmen.
Under rubriken Resurser väljer du App Service för att navigera till den.
På sidan för App Service:
Välj Distributionscenter på menyn till vänster på skärmen.
Välj Lokal Git i listrutan med etiketten Källa.
Välj Spara.
När du har sparat sidan uppdateras och visas adressen för git-fjärrlagringsplatsen.
Kopiera värdet för Git Clone Uri eftersom det här värdet används för att konfigurera en Git-fjärranslutning i ett senare steg.
På sidan Distributionscenter :
Gå till fliken Lokala Git/FTPS-autentiseringsuppgifter .
Leta upp det lokala git-användarnamnet och lösenordet under autentiseringsuppgifterna för programomfattning .
Håll den här skärmen öppen så att du kan kopiera dessa autentiseringsuppgifter tillfälligt när du distribuerar koden till fjärrlagringsplatsen. Se till att kopiera det lokala git-användarnamnet, som börjar med ett $, till exempel $msdocs-python-webapp-quickstart-123.
När du skickar kod till git-fjärrlagringsplatsen för första gången krävs dessa autentiseringsuppgifter för att autentisera till fjärrlagringsplatsen.
I rotkatalogen för ditt program konfigurerar du sedan en Git-fjärranslutning som pekar på Azure med hjälp av Git-URL:en för Azure-fjärren som erhölls i ett tidigare steg.
git remote add azure <git-deployment-url>
Nu kan du skicka kod från din lokala Git-lagringsplats till Azure med hjälp av git-fjärren som du just konfigurerade. Standarddistributionsgrenen för App Service är master, men många Git-lagringsplatser rör sig bort från master och använder main. Du kan antingen ange mappningen från det lokala grennamnet till fjärrgrenens namn i push-överföringen (som visas nedan) eller så kan du konfigurera appinställningenDEPLOYMENT_BRANCH.
git push azure main:master
Första gången du skickar kod till Azure uppmanar Git dig att ange de autentiseringsuppgifter för Azure-distribution som du fick i föregående steg. Git cachelagrar sedan dessa autentiseringsuppgifter så att du inte behöver ange dem igen vid efterföljande distributioner.
Konfigurera först distributionskällan för webbappen så att den az webapp deployment source är lokal Git med hjälp av kommandot . Det här kommandot matar ut URL:en för den fjärranslutna Git-lagringsplatsen som du ska skicka kod till. Gör en kopia av det här värdet eftersom du behöver det i ett senare steg.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deployment source config-local-git \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--output tsv
# Change these values to the ones used to create the App Service.
$RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
$APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deployment source config-local-git `
--name $APP_SERVICE_NAME `
--resource-group $RESOURCE_GROUP_NAME `
--output tsv
Hämta autentiseringsuppgifterna för distributionen för ditt program. Git behöver dessa för att autentisera till Azure när du skickar kod till Azure i ett senare steg.
I rotkatalogen för ditt program konfigurerar du sedan en Git-fjärranslutning som pekar på Azure med hjälp av Git-URL:en för Azure-fjärren som erhölls i ett tidigare steg.
git remote add azure <git-deployment-url>
Nu kan du skicka kod från din lokala Git-lagringsplats till Azure med hjälp av git-fjärren som du just konfigurerade. Standarddistributionsgrenen för App Service är master, men många Git-lagringsplatser rör sig bort från master och använder main. Du kan antingen ange mappningen från det lokala grennamnet till fjärrgrenens namn i push-överföringen (som visas nedan) eller så kan du konfigurera appinställningenDEPLOYMENT_BRANCH.
git push azure main:master
Första gången du skickar kod till Azure uppmanar Git dig att ange de autentiseringsuppgifter för Azure-distributionen som du fick i ett tidigare steg. Git cachelagrar sedan dessa autentiseringsuppgifter så att du inte behöver ange dem igen vid efterföljande distributioner.
Program kan distribueras till Azure genom att skapa och ladda upp en ZIP-fil med programkoden till Azure. ZIP-filer kan laddas upp till Azure med hjälp av Azure CLI eller en HTTP-klient som cURL.
Aktivera byggautomatisering
När du distribuerar en ZIP-fil med Python-koden måste du ange en flagga för att aktivera Azure Build Automation. Byggautomatiseringen installerar alla nödvändiga krav och paketera programmet för att köras i Azure.
Skapa automatisering i Azure aktiveras genom att ange appinställningen SCM_DO_BUILD_DURING_DEPLOYMENT i antingen Azure Portal eller Azure CLI.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP_NAME \
--name $APP_SERVICE_NAME \
--settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
# Change these values to the ones used to create the App Service.
$resourceGroupName='msdocs-python-webapp-quickstart'
$appServiceName='msdocs-python-webapp-quickstart-123'
az webapp config appsettings set `
--resource-group $resourceGroupName `
--name $appServiceName `
--settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
Skapa en ZIP-fil för ditt program
Skapa sedan en ZIP-fil för ditt program. Du behöver bara inkludera komponenter i själva programmet. Du behöver inte inkludera några filer eller kataloger som börjar med en punkt (.) som .venv, .gitignore, .githubeller .vscode.
# Change these values to the ones used to create the App Service.
RESOURCE_GROUP_NAME='msdocs-python-webapp-quickstart'
APP_SERVICE_NAME='msdocs-python-webapp-quickstart-123'
az webapp deploy \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--src-path <zip-file-path>
# Change these values to the ones used to create the App Service.
$resourceGroupName='msdocs-python-webapp-quickstart'
$appServiceName='msdocs-python-webapp-quickstart-123'
az webapp deploy `
--name $appServiceName `
--resource-group $resourceGroupName `
--src-path <zip-file-path>
Om du vill använda cURL för att ladda upp ZIP-filen till Azure behöver du distributionens användarnamn och lösenord för din App Service. Dessa autentiseringsuppgifter kan hämtas från Azure Portal.
På sidan för webbappen väljer du Distributionscenter på menyn till vänster på sidan.
Välj fliken FTPS-autentiseringsuppgifter .
Användarnamnet och lösenordet visas under rubriken Programomfattning. För zip-fildistributioner använder du bara den del av användarnamnet \ efter tecknet som börjar med ett $, till exempel $msdocs-python-webapp-quickstart-123. Dessa autentiseringsuppgifter behövs i cURL-kommandot.
Kör följande curl kommando för att ladda upp zip-filen till Azure och distribuera programmet. Användarnamnet är det distributionsanvändarnamn som erhölls i steg 3. När det här kommandot körs uppmanas du att ange distributionslösenordet.
För PowerShell ska du se till att omsluta användarnamnet med enkla citattecken så att PowerShell inte försöker tolka användarnamnet som en PowerShell-variabel.
Beroende på nätverksbandbredden tar det vanligtvis mellan 10 och 30 sekunder att ladda upp filer till Azure.
Har du problem? Gå först till felsökningsguiden. Om det inte hjälper, låt oss veta.
Konfigurera startskript
Baserat på förekomsten av vissa filer i en distribution identifierar App Service automatiskt om en app är en Django- eller Flask-app och utför standardsteg för att köra din app. För appar baserade på andra webbramverk som FastAPI måste du konfigurera ett startskript för App Service för att köra din app. Annars kör App Service en skrivskyddad standardapp som finns i mappen opt/defaultsite .
App Service identifierar automatiskt förekomsten av en Flask-app. Ingen ytterligare konfiguration krävs för den här snabbstarten.
App Service identifierar automatiskt förekomsten av en Django-app. Ingen ytterligare konfiguration krävs för den här snabbstarten.
För FastAPI måste du konfigurera ett anpassat startkommando för App Service för att köra din app. Följande kommando startar Gunicorn med 2 Uvicorn-arbetsprocesser: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
az webapp restart \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
App Service identifierar automatiskt förekomsten av en Flask-app. Ingen ytterligare konfiguration krävs för den här snabbstarten.
App Service identifierar automatiskt förekomsten av en Django-app. Ingen ytterligare konfiguration krävs för den här snabbstarten.
Använd Azure CLI eller Azure Portal för att konfigurera startkommandot.
App Service identifierar automatiskt förekomsten av en Flask-app. Ingen ytterligare konfiguration krävs för den här snabbstarten.
App Service identifierar automatiskt förekomsten av en Django-app. Ingen ytterligare konfiguration krävs för den här snabbstarten.
För FastAPI måste du konfigurera ett anpassat startkommando för App Service för att köra din app. Följande kommando startar Gunicorn med 2 Uvicorn-arbetsprocesser: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Instruktioner
Skärmbild
Konfigurera först startkommandot i Azure App Service. Gå till sidan för App Service-instansen i Azure Portal.
Välj Konfiguration under rubriken Inställningar på menyn till vänster på sidan.
Kontrollera att fliken Allmänna inställningar är markerad.
I fältet Startkommando anger du gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Välj Spara för att spara dina ändringar.
Vänta tills meddelandet om att inställningarna har uppdaterats innan du fortsätter.
Starta sedan om webbappen.
Välj Översikt på menyn till vänster på sidan.
Välj Starta om på den översta menyn.
Bläddra till appen
Bläddra till det distribuerade programmet i webbläsaren med hjälp av URL:en http://<app-name>.azurewebsites.net. Om du ser en standardappsida väntar du en minut och uppdaterar webbläsaren.
Python-exempelkoden kör en Linux-container i App Service med hjälp av en inbyggd avbildning.
Grattis! Du har distribuerat Python-appen till App Service.
Har du problem? Gå först till felsökningsguiden. Om det inte hjälper, låt oss veta.
Strömningsloggar
Azure App Service samlar in alla meddelandeutdata till konsolen för att hjälpa dig att diagnostisera problem med ditt program. Exempelapparna innehåller print() instruktioner för att demonstrera den här funktionen.
@app.route('/')
def index():
print('Request for index page received')
return render_template('index.html')
@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'static'),
'favicon.ico', mimetype='image/vnd.microsoft.icon')
@app.route('/hello', methods=['POST'])
def hello():
name = request.form.get('name')
if name:
print('Request for hello page received with name=%s' % name)
return render_template('hello.html', name = name)
else:
print('Request for hello page received with no name or blank name -- redirecting')
return redirect(url_for('index'))
def index(request):
print('Request for index page received')
return render(request, 'hello_azure/index.html')
@csrf_exempt
def hello(request):
if request.method == 'POST':
name = request.POST.get('name')
if name is None or name == '':
print("Request for hello page received with no name or blank name -- redirecting")
return redirect('index')
else:
print("Request for hello page received with name=%s" % name)
context = {'name': name }
return render(request, 'hello_azure/hello.html', context)
else:
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
print('Request for index page received')
return templates.TemplateResponse('index.html', {"request": request})
@app.get('/favicon.ico')
async def favicon():
file_name = 'favicon.ico'
file_path = './static/' + file_name
return FileResponse(path=file_path, headers={'mimetype': 'image/vnd.microsoft.icon'})
@app.post('/hello', response_class=HTMLResponse)
async def hello(request: Request, name: str = Form(...)):
if name:
print('Request for hello page received with name=%s' % name)
return templates.TemplateResponse('hello.html', {"request": request, 'name':name})
else:
print('Request for hello page received with no name or blank name -- redirecting')
return RedirectResponse(request.url_for("index"), status_code=status.HTTP_302_FOUND)
Du kan granska innehållet i App Service-diagnostikloggarna med hjälp av Azure CLI, VS Code eller Azure Portal.
Först måste du aktivera strömmande loggar i Azure App Service.
I avsnittet App Service i Tillägget Azure Tools for VS Code högerklickar du på App Service-instansen och väljer Starta direktuppspelningsloggar på menyn.
Konsolloggarna visas i VS Code-utdatafönstret. Uppdatera startsidan i appen eller försök med andra begäranden om att generera vissa loggmeddelanden.
Du ser alla loggmeddelanden som genereras av din app samt andra meddelanden som genereras av tjänsten i utdata.
Instruktioner
Skärmbild
Först måste du aktivera strömmande loggar i Azure App Service. Gå till sidan för App Service-instansen i Azure Portal.
Välj App Service-loggar under rubriken Övervakning på menyn till vänster på sidan.
Ändra egenskapen Programloggning från Av till Filsystem.
Ange en kvarhållningsperiod på 30 dagar för loggarna.
Välj Spara för att spara dina ändringar.
Välj Loggström från avsnittet Övervakning i navigeringsfönstret till vänster. Uppdatera startsidan i appen eller försök med andra begäranden om att generera vissa loggmeddelanden.
Du ser alla loggmeddelanden som genereras av din app och meddelanden som genereras av tjänsten i utdata.
Har du problem? Gå först till felsökningsguiden. Om det inte hjälper, låt oss veta.
Rensa resurser
När du är klar med exempelappen kan du ta bort alla resurser för appen från Azure. Om du tar bort resursgruppen ser du till att du inte debiteras extra avgifter och att din Azure-prenumeration inte rensas. Om du tar bort resursgruppen tas även alla resurser i resursgruppen bort och är det snabbaste sättet att ta bort alla Azure-resurser för din app.
az group delete \
--name msdocs-python-webapp-quickstart \
--no-wait
Argumentet --no-wait gör att kommandot kan returneras innan åtgärden är klar.
Instruktioner
Skärmbild
I Azure Tools-tillägget för VS Code:
Leta upp avsnittet RESURSER .
Välj ikonen Grupperaefter och välj Gruppera efter resursgrupp.
I listan över resurser letar du reda på resursgruppen som ska tas bort, högerklickar på den och väljer Ta bort resursgrupp.... Du uppmanas att bekräfta borttagningen genom att ange namnet på resursgruppen i dialogrutan.
Följ de här stegen när du är inloggad på Azure Portal för att ta bort en resursgrupp.
Instruktioner
Skärmbild
Gå till resursgruppen i Azure Portal.
Ange namnet på resursgruppen i sökfältet överst på sidan.
Under rubriken Resursgrupper väljer du namnet på resursgruppen för att navigera till den.
Välj knappen Ta bort resursgrupp överst på sidan.
I bekräftelsedialogrutan anger du namnet på resursgruppen för att bekräfta borttagningen. Välj Ta bort för att ta bort resursgruppen.