Guia de início rápido: implantar um aplicativo Web Python (Django, Flask ou FastAPI) no Serviço de Aplicativo do Azure

Nota

A partir de 1º de junho de 2024, todos os aplicativos do Serviço de Aplicativo recém-criados terão a opção de gerar um nome de host padrão exclusivo usando a convenção <app-name>-<random-hash>.<region>.azurewebsites.netde nomenclatura. Os nomes de aplicativos existentes permanecerão inalterados.

Exemplo: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

Para obter mais detalhes, consulte Nome de host padrão exclusivo para recurso do Serviço de Aplicativo.

Neste início rápido, você implanta 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 Web totalmente gerenciado que dá suporte a aplicativos Python hospedados em um ambiente de servidor Linux.

Para concluir este guia de início rápido, necessita de:

Nota

Este artigo contém instruções atuais sobre como implantar um aplicativo Web Python usando o Serviço de Aplicativo do Azure. Python no Windows não é mais suportado.

Aplicação 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 início rápido. Transfira ou clone a aplicação de exemplo para a estação de trabalho local.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

Para executar o aplicativo localmente:

  1. Vá para a pasta do aplicativo:

    cd msdocs-python-flask-webapp-quickstart
    
  2. Crie um ambiente virtual para o aplicativo:

    py -m venv .venv
    .venv\scripts\activate
    
  3. Instale as dependências:

    pip install -r requirements.txt
    
  4. Execute a aplicação:

    flask run
    
  5. Navegue até o aplicativo de exemplo em http://localhost:5000 em um navegador da Web.

    Captura de ecrã da aplicação Flask executada localmente num browser

Tem problemas? Deixe-nos saber.

Criar uma aplicação Web no Azure

Para hospedar seu aplicativo no Azure, você precisa criar um aplicativo Web do Serviço de Aplicativo do Azure no Azure. Você pode criar um aplicativo Web usando a CLI do Azure, o VS Code, o pacote de extensão das Ferramentas do Azure ou o portal do Azure.

Os 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 única etapa.

Se necessário, faça logon no Azure usando az login.

az login

Crie o webapp e outros recursos e, em seguida, implante seu código no Azure usando az webapp up.

az webapp up --runtime PYTHON:3.9 --sku B1 --logs
  • O --runtime parâmetro especifica qual versão do Python seu aplicativo está executando. Este exemplo usa Python 3.9. Para listar todos os tempos de execução disponíveis, use o comando az webapp list-runtimes --os linux --output table.
  • O --sku parâmetro define o tamanho (CPU, memória) e o custo do plano de serviço do aplicativo. Este exemplo usa o plano de serviço B1 (Básico), que incorrerá em um pequeno custo em sua assinatura do Azure. Para obter uma lista completa dos planos do Serviço de Aplicativo, consulte a página de preços do Serviço de Aplicativo .
  • O --logs sinalizador configura o log padrão necessário para habilitar a visualização do fluxo de log imediatamente após iniciar o webapp.
  • 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> onde <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 az appservice list-locations comando.

O comando pode levar alguns minutos para ser concluído. Enquanto o comando está em execução, ele fornece mensagens sobre como criar o grupo de recursos, o plano do Serviço de Aplicativo e o recurso do aplicativo, configurar o registro em log e fazer a implantação do ZIP. Em seguida, ele fornece a mensagem "Você pode iniciar o aplicativo em http://< app-name.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>"
}

Nota

O comando az webapp up executa as seguintes ações:

  • Crie um grupo de recursos padrão.

  • Crie um plano padrão do Serviço de Aplicativo.

  • Crie um aplicativo com o nome especificado.

  • Zip implantar todos os arquivos do diretório de trabalho atual, com automação de compilação ativada.

  • Armazene os parâmetros em cache localmente no arquivo .azure/config para que você não precise especificá-los novamente ao implantar posteriormente com az webapp up ou outros az webapp comandos da pasta do projeto. Os valores armazenados em cache são usados automaticamente por padrão.

Tem problemas? Deixe-nos saber.

Implantar o código do aplicativo no Azure

O Serviço de Aplicativo do Azure dá suporte a vários métodos para implantar seu código de aplicativo no Azure, incluindo Ações do GitHub e todas as principais ferramentas de CI/CD. Este artigo se concentra em como implantar seu código de sua estação de trabalho local no Azure.

Como o az webapp up comando criou os recursos necessários e implantou seu aplicativo em uma única etapa, você pode passar para a próxima etapa.


Tem problemas? Consulte primeiro o Guia de solução de problemas. Se isso não ajudar, informe-nos.

Configurar script de inicialização

Com base na presença de determinados arquivos em uma implantação, o Serviço de Aplicativo deteta 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 FastAPI, você precisa configurar um script de inicialização para que o Serviço de Aplicativo execute seu aplicativo; caso contrário, o Serviço de Aplicativo executa um aplicativo somente leitura padrão localizado na pasta opt/defaultsite .

Para saber mais sobre como o Serviço de Aplicativo executa aplicativos Python e como você pode configurar e personalizar seu comportamento com seu aplicativo, consulte Configurar um aplicativo Linux Python para o Serviço de Aplicativo do Azure.

O Serviço de Aplicativo deteta automaticamente a presença de um aplicativo Flask. Nenhuma configuração adicional é necessária para este início rápido.

Navegar para a aplicação

Navegue até o aplicativo implantado em seu navegador da Web usando a URL http://<app-name>.azurewebsites.net. Se vir uma página de aplicação predefinida, 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.

Captura de ecrã da aplicação em execução no Azure

Parabéns! Você implantou seu aplicativo Python no Serviço de Aplicativo.

Tem problemas? Consulte primeiro o Guia de solução de problemas. Se isso não ajudar, informe-nos.

Transmitir registos

O Serviço de Aplicativo do Azure captura toda a saída de mensagens para o console para ajudá-lo a diagnosticar problemas com seu aplicativo. Os aplicativos de exemplo incluem print() instruções para demonstrar esse recurso.

@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'))

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 .

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Para transmitir logs, use o comando az webapp log tail .

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

Atualize a página inicial no aplicativo ou tente outras solicitações para gerar algumas mensagens de log. A saída deve ser semelhante à seguinte.

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

Tem problemas? Consulte primeiro o Guia de solução de problemas. Se isso não ajudar, informe-nos.

Clean up resources (Limpar recursos)

Quando terminar o aplicativo de exemplo, você poderá remover todos os recursos do aplicativo do Azure. Remover o grupo de recursos garante que você não incorra em cobranças extras e ajuda a manter sua assinatura do Azure organizada. A remoção do 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 --no-wait argumento permite que o comando retorne antes que a operação seja concluída.

Tem problemas? Deixe-nos saber.

Próximos passos