Início Rápido: Implantar um aplicativo Web Python (Django, Flask ou FastAPI) no Serviço de Aplicativo do Azure
Artigo
Observação
A partir de 1º de junho de 2024, todos os aplicativos recém-criados do Serviço de Aplicativo terão a opção de gerar um nome do host padrão exclusivo usando a convenção de nomenclatura <app-name>-<random-hash>.<region>.azurewebsites.net. Os nomes de aplicativos existentes permanecerão inalterados.
Neste guia de início rápido, você implantará um aplicativo Web Python (Django, Flask ou FastAPI) no Serviço de Aplicativo do Azure. O Serviço de Aplicativo do Azure é um serviço de hospedagem na Web totalmente gerenciado que dá suporte a aplicativos Python hospedados em um ambiente de servidor Linux.
Para concluir este início rápido, você precisa de:
Este artigo contém instruções atuais de como implantar um aplicativo Web Python usando o Serviço de Aplicativo do Azure. Não há mais suporte para Python no Windows.
Aplicativo de exemplo
Este início rápido pode ser concluído usando Flask, Django ou FastAPI. Um aplicativo de exemplo em cada estrutura é fornecido para ajudá-lo a acompanhar este guia de início rápido. Baixe ou clone o aplicativo de exemplo em sua estação de trabalho local.
Comandos da CLI do Azure podem ser executados em um computador com a CLI do Azure instalada.
A CLI do Azure tem um comando az webapp up que criará os recursos necessários e implantará seu aplicativo em uma só etapa.
Se necessário, faça logon no Azure usando az login.
az login
Crie o aplicativo Web e outros recursos e implante seu código no Azure usando az webapp up.
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
O parâmetro --runtime especifica a versão do Python que o aplicativo está executando. Este exemplo usa Python 3.9. Para listar todos os runtimes disponíveis, use o comando az webapp list-runtimes --os linux --output table.
O parâmetro --sku define o tamanho (CPU, memória) e o custo do plano do Serviço de Aplicativo. Este exemplo usa o plano de serviço B1 (Básico), que gerará um pequeno custo em sua assinatura do Azure. Para obter uma lista completa dos planos do Serviço de Aplicativo, exiba a página de Preço do Serviço de Aplicativo.
O sinalizador --logs configura o log padrão necessário para habilitar a exibição do fluxo de log imediatamente após a inicialização do aplicativo Web.
Opcionalmente, você pode especificar um nome com o argumento --name <app-name>. Se você não fornecer um, um nome será gerado automaticamente.
Opcionalmente, você pode incluir o argumento --location <location-name>, em que <location_name> é uma região do Azure disponível. Você pode recuperar uma lista de regiões permitidas para sua conta do Azure executando o comando az appservice list-locations.
O comando pode demorar um pouco para ser concluído. Durante a execução do comando, ele envia mensagens sobre como criar o grupo de recursos, o plano do Serviço de Aplicativo, o recurso de aplicativo, como configurar o log e como fazer a implantação de zip. Em seguida, ele fornece a mensagem "Você pode iniciar o aplicativo em http://<nome-do-aplicativo>.azurewebsites.net", que é a URL do aplicativo no 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>"
}
Observação
O comando az webapp up realiza as seguintes ações:
Armazene em cache os parâmetros localmente no arquivo .azure/config para que você não precise especificá-los novamente na implantação posterior com az webapp up ou outros comandos az webapp da pasta do projeto. Os valores armazenados em cache são usados automaticamente por padrão.
Localize o ícone do Azure na barra de ferramentas do lado esquerdo. Selecione-o para abrir a extensão de Ferramentas do Azure para VS Code.
Se você não encontrar o ícone de Ferramentas do Azure, verifique se tem a extensão de Ferramentas do Azure para VS Code instalada.
Na extensão de Ferramentas do Azure para VS Code:
Localize a seção RECURSOS e selecione sua assinatura.
Selecione + (Criar Recurso...)
Escolha a opção Criar Aplicativo Web do Serviço de Aplicativo....
Insira o nome msdocs-Python-webapp-QuickStart-XYZ para este aplicativo Web, em que XYZ é qualquer conjunto de três caracteres exclusivos.
Quando implantado, esse nome será usado como o nome do aplicativo no formulário https://<app-name>.azurewebsites.net.
Selecione a pilha de runtime para o aplicativo. Nesse exemplo, selecione Python 3.9.
Selecione o plano do Serviço de Aplicativo (tipo de preço) para este aplicativo Web. O plano do Serviço de Aplicativo controla quantos recursos (CPU/memória) estão disponíveis para seu aplicativo e o quanto você paga.
Para este exemplo, selecione o tipo de preço Básico (B1). Esse plano gerará uma pequena cobrança na sua assinatura do Azure, mas é recomendado para melhor desempenho com relação ao nível F1 (Gratuito).
Selecione o botão Implantar na notificação "Criar aplicativo Web".
Selecione a pasta de início rápido na qual você está trabalhando como aquela na qual deve ser feita a implantação.
Responda Sim para atualizar sua configuração de build e melhorar o desempenho da implantação.
Quando a implantação estiver concluída, uma notificação será exibida no canto inferior direito do VS Code. Você pode usar essa notificação para navegar até seu aplicativo Web.
Entre no portal do Azure e siga estas etapas para criar seus recursos do Serviço de Aplicativo do Azure.
Instruções
Captura de tela
No portal do Azure:
Insira serviços de aplicativos na caixa de pesquisa na parte superior do portal do Azure.
Selecione o item chamado Serviços de Aplicativos no cabeçalho Serviços do menu que aparece abaixo da barra de pesquisa.
Na página Serviços de Aplicativos, selecione + Criar e, em seguida, selecione + Aplicativo Web no menu suspenso.
Na página Criar aplicativo Web, preencha o formulário como demonstrado a seguir.
Grupo de recursos → selecione criar novo e use um nome de msdocs-Python-webapp-QuickStart.
Nome → msdocs-Python-webapp-QuickStart-XYZ, em que XYZ tem três caracteres aleatórios. Esse nome deve ser exclusivo no Azure.
Pilha do runtime → Python 3.9.
Região → qualquer região do Azure próxima a você.
Plano do Serviço de Aplicativo → em Plano de preços, selecione Explorar planos de preços para selecionar um plano do Serviço de Aplicativo diferente.
O Plano do Serviço de Aplicativo controla a quantidade de recursos (CPU/memória) disponíveis para o aplicativo e o custo associado a eles.
Para este exemplo, em Desenvolvimento/Teste, selecione o plano B1 Básico. O plano Básico B1 incorrerá em uma pequena cobrança em sua conta do Azure, mas é recomendado para melhor desempenho em relação ao plano Gratuito F1.
Quando terminar, selecione Selecionar para aplicar as alterações.
Na página principal Criar Aplicativo Web, selecione *Examinar + criar na parte inferior da tela.
Isso levará você até a página Examinar. Selecione Criar para criar o Serviço de Aplicativo.
O Serviço de Aplicativo do Azure dá suporte a vários métodos para implantar o código do aplicativo no Azure, como GitHub Actions e todas as principais ferramentas de CI/CD. Este artigo se concentra em como implantar o código de sua estação de trabalho local no Azure.
Como o comando az webapp up criou os recursos necessários e implantou o aplicativo em uma única etapa, você pode progredir para a próxima etapa.
Como a etapa anterior criou os recursos necessários e implantou o aplicativo em uma única etapa, você pode progredir para a próxima etapa.
Você pode implantar o código do aplicativo de um repositório Git local no Azure configurando um repositório Git remoto em seu repositório local que aponta para o repositório que você deseja enviar código por push. A URL do repositório remoto e as credenciais do Git necessárias para a configuração podem ser recuperadas usando o portal do Azure ou a CLI do Azure.
Navegue até o Serviço de Aplicativo para seu aplicativo.
Insira o nome do Serviço de Aplicativo na caixa de pesquisa na parte superior da tela.
No título Recursos, selecione o serviço de aplicativo para navegar até ele.
Na página do Serviço de Aplicativo:
Selecione Centro de Implantação no menu no lado esquerdo da tela.
Selecione Git Local na lista suspensa rotulada como Origem.
Selecione Salvar.
Depois de salvar a página, ela será atualizada e exibirá o endereço do repositório Git remoto.
Copie o valor do URI do Git Clone, pois esse valor será usado para configurar um repositório Git remoto em uma etapa posterior.
Na página Centro de Implantação:
Navegue até a guia Credenciais do FTPS/Git local.
Localize o nome de usuário do Git local e a senha nas credenciais do Escopo do aplicativo.
Mantenha essa tela aberta para que você possa copiar essas credenciais momentaneamente ao implantar seu código no repositório remoto. Copie o nome de usuário local do Git, que começa com um $, por exemplo $msdocs-python-webapp-quickstart-123.
Ao efetuar push do código para o repositório Git remoto pela primeira vez, essas credenciais são necessárias para se autenticar no repositório remoto.
Em seguida, no diretório raiz do seu aplicativo, configure um Git remoto que aponta para o Azure usando a URL do Git do Azure remoto obtido em uma etapa anterior.
git remote add azure <git-deployment-url>
Agora você pode enviar código por push do repositório Git local para o Azure usando o repositório Git remoto que acabou de configurar. O branch de implantação padrão para o Serviço de Aplicativo émaster, mas muitos repositórios Git estão migrando de master e usando main. Você pode especificar o mapeamento do nome do branch local para o nome da ramificação remota no push (conforme mostrado abaixo) ou configurar a DEPLOYMENT_BRANCH configuração do aplicativo.
git push azure main:master
Na primeira vez que você enviar código por push para o Azure, o Git solicitará as credenciais de implantação do Azure obtidas na etapa anterior. Em seguida, o Git armazenará essas credenciais em cache para que você não tenha que reinseri-las em implantações subsequentes.
Primeiro, configure a origem da implantação para que seu aplicativo Web seja o Git local usando o comando az webapp deployment source. Esse comando produzirá a URL do repositório Git remoto para o qual você enviará o código. Faça uma cópia desse valor, pois você precisará dele nas próximas etapas.
# 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
Recupere as credenciais de implantação para seu aplicativo. O Git precisa disso para se autenticar no Azure quando você enviar o código por push para o Azure nas próximas etapas.
Em seguida, no diretório raiz do seu aplicativo, configure um Git remoto que aponta para o Azure usando a URL do Git do Azure remoto obtido em uma etapa anterior.
git remote add azure <git-deployment-url>
Agora você pode enviar código por push do repositório Git local para o Azure usando o repositório Git remoto que acabou de configurar. O branch de implantação padrão para o Serviço de Aplicativo émaster, mas muitos repositórios Git estão migrando de master e usando main. Você pode especificar o mapeamento do nome do branch local para o nome da ramificação remota no push (conforme mostrado abaixo) ou configurar a DEPLOYMENT_BRANCH configuração do aplicativo.
git push azure main:master
Na primeira vez que você enviar código por push para o Azure, o Git solicitará as credenciais de implantação do Azure obtidas em uma etapa anterior. Em seguida, o Git armazenará essas credenciais em cache para que você não tenha que reinseri-las em implantações subsequentes.
Os aplicativos podem ser implantados no Azure criando e carregando um arquivo ZIP do código do aplicativo para o Azure. Arquivos zip podem ser carregados no Azure usando a CLI do Azure ou um cliente HTTP, como cURL.
Habilitar automação de build
Ao implantar um arquivo ZIP de seu código Python, você precisa definir um sinalizador para habilitar a automação de build do Azure. A automação de build instalará todos os requisitos necessários e empacotará o aplicativo para ser executado no Azure.
A automação de build no Azure é habilitada definindo a configuração do aplicativo SCM_DO_BUILD_DURING_DEPLOYMENT no portal do Azure ou da CLI do Azure.
# 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
Criar um arquivo zip do seu aplicativo
A seguir, crie um arquivo zip do seu aplicativo. Você só precisa incluir componentes do próprio aplicativo. Você não precisa incluir arquivos nem diretórios que comecem com um ponto (.), como, .venv, .gitignore, .github ou .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>
Para usar o cURL para carregar o arquivo zip no Azure, você precisará do nome de usuário e da senha da implantação para o Serviço de Aplicativo. Essas credenciais podem ser obtidas do portal do Azure.
Na página do aplicativo Web, selecione Centro de implantação no menu no lado esquerdo da página.
Selecione a guia Credenciais de FTPS.
O Nome de usuário e a Senha são mostrados sob o título Escopo do aplicativo. Para implantações de arquivo zip, use apenas a parte do nome de usuário após o caractere \ que começa com um $, por exemplo, $msdocs-python-webapp-quickstart-123. Essas credenciais serão necessárias no comando do cURL.
Execute o comando curl a seguir para carregar o arquivo zip no Azure e implantar seu aplicativo. O nome de usuário é o nome de usuário de implantação obtido na etapa 3. Quando esse comando for executado, você será solicitado a fornecer a senha de implantação.
Para o PowerShell, certifique-se de colocar o nome de usuário entre aspas simples para que o PowerShell não tente interpretar o nome de usuário como uma variável do PowerShell.
Com base na presença de determinados arquivos em uma implantação, o Serviço de Aplicativo detecta automaticamente se um aplicativo é um aplicativo Django ou Flask e executa etapas padrão para executar seu aplicativo. Para aplicativos baseados em outras estruturas da Web, como o FastAPI, você precisa configurar um script de inicialização para o Serviço de Aplicativo executar seu aplicativo. Caso contrário, o Serviço de Aplicativo executará um aplicativo somente leitura padrão localizado na pasta opt/defaultsite.
O Serviço de Aplicativo detecta automaticamente a presença de um aplicativo Flask. Nenhuma configuração adicional é necessária para este início rápido.
O Serviço de Aplicativo detecta automaticamente a presença de um aplicativo Django. Nenhuma configuração adicional é necessária para este início rápido.
Para o FastAPI, você deve configurar um comando de inicialização personalizado para o Serviço de Aplicativo executar seu aplicativo. O comando a seguir inicia o Gunicorn com dois processos de trabalho Uvicorn: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Primeiro, configure o comando de inicialização usando o comando az webapp config set.
az webapp config set \
--startup-file "gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app" \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
Em seguida, reinicie o aplicativo Web usando o comando az webapp restart.
az webapp restart \
--name $APP_SERVICE_NAME \
--resource-group $RESOURCE_GROUP_NAME
O Serviço de Aplicativo detecta automaticamente a presença de um aplicativo Flask. Nenhuma configuração adicional é necessária para este início rápido.
O Serviço de Aplicativo detecta automaticamente a presença de um aplicativo Django. Nenhuma configuração adicional é necessária para este início rápido.
Use a CLI do Azure ou o portal do Azure para configurar o comando de inicialização.
O Serviço de Aplicativo detecta automaticamente a presença de um aplicativo Flask. Nenhuma configuração adicional é necessária para este início rápido.
O Serviço de Aplicativo detecta automaticamente a presença de um aplicativo Django. Nenhuma configuração adicional é necessária para este início rápido.
Para o FastAPI, você deve configurar um comando de inicialização personalizado para o Serviço de Aplicativo executar seu aplicativo. O comando a seguir inicia o Gunicorn com dois processos de trabalho Uvicorn: gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Instruções
Captura de tela
Primeiro, configure o comando de inicialização no Serviço de Aplicativo do Azure. Acesse a página da instância do Serviço de Aplicativo no portal do Azure.
Selecione Configuração no título Configurações no menu no lado esquerdo da página.
Verifique se a guia Configurações gerais está selecionada.
No campo Comando de Inicialização, insira gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app.
Selecione Salvar para salvar as alterações.
Aguarde a notificação de que as configurações são atualizadas antes de prosseguir.
Em seguida, reinicie o aplicativo Web.
Selecione Visão geral no menu no lado esquerdo da página.
No menu superior, selecione Reiniciar.
Navegar até o aplicativo
Navegue até o aplicativo implantado no navegador usando a URL http://<app-name>.azurewebsites.net. Se você vir uma página de aplicativo padrão, aguarde um minuto e atualize o navegador.
O código de exemplo Python está executando um contêiner Linux no Serviço de Aplicativo usando uma imagem interna.
Parabéns! Você implantou seu aplicativo Python no Serviço de Aplicativo.
O Serviço de Aplicativo do Azure captura todas as mensagens geradas no console para ajudar você a diagnosticar problemas com seu aplicativo. Os aplicativos de exemplo incluem instruções print() para demonstrar essa funcionalidade.
@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)
Você pode revisar o conteúdo dos logs de diagnóstico do Serviço de Aplicativo usando a CLI do Azure, o VS Code ou o portal do Azure.
Primeiro, você precisa configurar o Serviço de Aplicativo do Azure para gerar logs para o sistema de arquivos do Serviço de Aplicativo usando o comando az webapp log config.
Primeiro, você precisa habilitar os logs de streaming no Serviço de Aplicativo do Azure.
Na seção Serviço de Aplicativo da extensão Ferramentas do Azure para VS Code, clique com o botão direito do mouse em sua instância do Serviço de Aplicativo e selecione Iniciar Logs de Streaming no menu.
Os logs do console aparecem na Janela De Saída do VS Code. Atualize a home page no aplicativo ou tente outras solicitações para gerar algumas mensagens de log.
Você verá todas as mensagens de log geradas pelo seu aplicativo, bem como outras mensagens geradas pelo serviço na saída.
Instruções
Captura de tela
Primeiro, você precisa habilitar os logs de streaming no Serviço de Aplicativo do Azure. Acesse a página da instância do Serviço de Aplicativo no portal do Azure.
Selecione os logs do Serviço de Aplicativo no cabeçalho Monitoramento do menu localizado no lado esquerdo da página.
Altere a propriedade Application Logging de Desativado para Sistema de Arquivos.
Insira um período de retenção de 30 dias para os logs.
Selecione Salvar para salvar as alterações.
Selecione Fluxo de logs na seção Monitoramento do painel de navegação à esquerda. Atualize a home page no aplicativo ou tente outras solicitações para gerar algumas mensagens de log.
Você verá todas as mensagens de log geradas pelo seu aplicativo e as mensagens geradas pelo serviço na saída.
Ao terminar o aplicativo de exemplo, você poderá remover todos os recursos do aplicativo do Azure. A remoção do grupo de recursos garante que você não incorra em encargos extras e ajuda a manter sua assinatura do Azure organizada. Remover o grupo de recursos também remove todos os recursos do grupo de recursos e é a maneira mais rápida de remover todos os recursos do Azure para seu aplicativo.
Exclua o grupo de recursos usando o comando az group delete.
az group delete \
--name msdocs-python-webapp-quickstart \
--no-wait
O argumento --no-wait permite que o comando seja retornado antes que a operação seja concluída.
Instruções
Captura de tela
Na extensão de Ferramentas do Azure para VS Code:
Localize a seção RECURSOS.
Selecione o ícone Agrupar por e Agrupar por Grupo de Recursos.
Na lista de recursos, localize o grupo de recursos a ser excluído, clique com o botão direito do mouse nele e selecione Excluir Grupo de Recursos.... Você será solicitado a confirmar a exclusão inserindo o nome do grupo de recursos na caixa de diálogo.
Siga estas etapas enquanto estiver conectado ao portal do Azure para excluir um grupo de recursos.
Instruções
Captura de tela
Procure o grupo de recursos no portal do Azure.
Insira o nome do grupo de recursos na barra de pesquisa na parte superior da página.
No título Grupos de Recursos, selecione o nome do grupo de recursos para navegar até ele.
Selecione o botão Excluir grupo de recursos na parte superior da página.
Na caixa de diálogo de confirmação, digite o nome do grupo de recursos para confirmar a exclusão. Selecione Excluir para excluir o grupo de recursos.