Partilhar via


Implantar um aplicativo Web Flask ou FastAPI em contêiner no Serviço de Aplicativo do Azure

Este tutorial mostra como implantar um aplicativo Web Python Flask ou FastAPI no Serviço de Aplicativo do Azure usando o recurso Aplicativo Web para Contêineres. O Aplicativo Web para Contêineres fornece uma rampa fácil para os desenvolvedores aproveitarem a plataforma totalmente gerenciada do Serviço de Aplicativo do Azure, mas que também desejam um único artefato implantável contendo um aplicativo e todas as suas dependências. Para obter mais informações sobre como usar contêineres no Azure, consulte Comparando opções de contêiner do Azure.

Neste tutorial, você usa a CLI do Docker e o Docker para, opcionalmente, criar uma imagem do Docker e testá-la localmente. Use a CLI do Azure para criar uma imagem do Docker em um Registro de Contêiner do Azure e implantá-la no Serviço de Aplicativo do Azure. O aplicativo Web é configurado com sua identidade gerenciada atribuída ao sistema (conexões sem senha) e acesso baseado em função do Azure para extrair a imagem do Docker do Registro de Contêiner do Azure durante a implantação. Você também pode implantar com o Visual Studio Code com a Extensão de Ferramentas do Azure instalada.

Para obter um exemplo de criação e criação de uma imagem do Docker para ser executada em Aplicativos de Contêiner do Azure, consulte Implantar um aplicativo Web Flask ou FastPI em Aplicativos de Contêiner do Azure.

Nota

Este tutorial mostra a criação de uma imagem do Docker que pode ser executada no Serviço de Aplicativo. Isso não é necessário para usar o Serviço de Aplicativo. Você pode implantar código diretamente de um espaço de trabalho local no Serviço de Aplicativo sem criar uma imagem do Docker. Para obter um exemplo, consulte Guia de início rápido: implantar um aplicativo Web Python (Django ou Flask) no Serviço de Aplicativo do Azure.

Pré-requisitos

Para concluir este tutorial, precisa de:

  • Uma conta do Azure onde você pode implantar um aplicativo Web no Serviço de Aplicativo do Azure e no Registro de Contêiner do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

  • CLI do Azure para criar uma imagem do Docker e implantá-la no Serviço de Aplicativo. E, opcionalmente, o Dockere a CLI do Docker para criar um Docker e testá-lo em seu ambiente local.

Obter o código de exemplo

Em seu ambiente local, obtenha o código.

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

Adicionar arquivos Dockerfile e .dockerignore

Adicione um Dockerfile para instruir o Docker sobre como criar a imagem. O Dockerfile especifica o uso do Gunicorn, um servidor Web de nível de produção que encaminha solicitações da Web para as estruturas Flask e FastAPI. Os comandos ENTRYPOINT e CMD instruem o Gunicorn a lidar com solicitações para o objeto do aplicativo.

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY requirements.txt .

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 50505

ENTRYPOINT ["gunicorn", "app:app"]

50505 é usado para a porta de contêiner (interna) neste exemplo, mas você pode usar qualquer porta livre.

Verifique o ficheiro requirements.txt para se certificar de que contém gunicornficheiros .

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Adicione um arquivo .dockerignore para excluir arquivos desnecessários da imagem.

.git*
**/*.pyc
.venv/

Configurar gunicorn

Gunicorn pode ser configurado com um arquivo gunicorn.conf.py . Quando o arquivo gunicorn.conf.py está localizado no mesmo diretório onde gunicorn é executado, você não precisa especificar seu local no Dockerfile. Para obter mais informações sobre como especificar o arquivo de configuração, consulte Configurações do Gunicorn.

Neste tutorial, o arquivo de configuração sugerido configura o gunicorn para aumentar seu número de trabalhadores com base no número de núcleos de CPU disponíveis. Para obter mais informações sobre gunicorn.conf.py configurações de arquivo, consulte Configuração do Gunicorn.

# Gunicorn configuration file
import multiprocessing

max_requests = 1000
max_requests_jitter = 50

log_file = "-"

bind = "0.0.0.0:50505"

workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers

timeout = 120

Crie e execute a imagem localmente

Crie a imagem localmente.

docker build --tag flask-demo .

Nota

Se o docker build comando retornar um erro, verifique se o docker deamon está em execução. No Windows, verifique se o Docker Desktop está em execução.

Execute a imagem localmente num contentor do Docker.

docker run --detach --publish 5000:50505 flask-demo

Abra o http://localhost:5000 URL no navegador para ver o aplicativo Web em execução localmente.

A --detach opção executa o contêiner em segundo plano. A --publish opção mapeia a porta do contêiner para uma porta no host. A porta host (externa) é a primeira no par e a porta do contêiner (interna) é a segunda. Para obter mais informações, consulte Referência de execução do Docker.

Criar um grupo de recursos e o Registro de Contêiner do Azure

  1. Execute o comando az login para entrar no Azure.

    az login
    
  2. Execute o comando az upgrade para garantir que sua versão da CLI do Azure esteja atualizada.

    az upgrade
    
  3. Crie um grupo com o comando az group create .

    az group create --name web-app-simple-rg --location eastus
    

    Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos. Ao criar um grupo de recursos, você especifica um local, como eastus.

  4. Crie um Registro de Contêiner do Azure com o comando az acr create .

    az acr create --resource-group web-app-simple-rg \
    --name webappacr123 --sku Basic
    

    Nota

    O nome do Registro deve ser exclusivo no Azure. Se você receber um erro, tente um nome diferente. Os nomes de registo podem consistir em 5-50 caracteres alfanuméricos. Hífens e sublinhados não são permitidos. Para saber mais, consulte Regras de nome do Registro de Contêiner do Azure. Se você usar um nome diferente, certifique-se de usar seu nome em vez dos webappacr123 comandos que fazem referência aos artefatos do Registro e do Registro nas seções a seguir.

    Um Registro de Contêiner do Azure é um registro privado do Docker que armazena imagens para uso em Instâncias de Contêiner do Azure, Serviço de Aplicativo do Azure, Serviço Kubernetes do Azure e outros serviços. Ao criar um registro, especifique um nome, uma SKU e um grupo de recursos.

Criar a imagem no Registro de Contêiner do Azure

Crie a imagem do Docker no Azure com o comando az acr build . O comando usa o Dockerfile no diretório atual e envia a imagem para o registro.

az acr build \
  --resource-group web-app-simple-rg \
  --registry webappacr123 \
  --image webappsimple:latest .

A --registry opção especifica o nome do Registro e a --image opção especifica o nome da imagem. O nome da imagem está no formato registry.azurecr.io/repository:tag.

Implantar aplicativo Web no Azure

  1. Crie um plano do Serviço de Aplicativo com o comando az appservice plan .

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Defina uma variável de ambiente para sua ID de assinatura. Ele é usado no --scope parâmetro no próximo comando.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    

    O comando para criar a variável de ambiente é mostrado para o shell Bash. Altere a sintaxe conforme apropriado para outros ambientes.

  3. Crie o aplicativo Web com o comando az webapp create .

    az webapp create \
    --resource-group web-app-simple-rg \
    --plan webplan --name webappsimple123 \
    --assign-identity [system] \
    --role AcrPull \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/web-app-simple-rg \
    --acr-use-identity --acr-identity [system] \
    --container-image-name webappacr123.azurecr.io/webappsimple:latest 
    

    Notas:

    • O nome do aplicativo Web deve ser exclusivo no Azure. Se você receber um erro, tente um nome diferente. O nome pode consistir em caracteres alfanuméricos e hífenes, mas não pode começar ou terminar com um hífen. Para saber mais, consulte Regras de nome Microsoft.Web.

    • Se você estiver usando um nome diferente do webappacr123 do seu Registro de Contêiner do Azure, certifique-se de atualizar o --container-image-name parâmetro adequadamente.

    • Os --assign-identityparâmetros , --rolee --scope habilitam a identidade gerenciada atribuída ao sistema no aplicativo Web e atribuem-lhe a AcrPull função no grupo de recursos. Isso dá à identidade gerenciada permissão para extrair imagens de qualquer Registro de Contêiner do Azure no grupo de recursos.

    • Os --acr-use-identity parâmetros e --acr-identity configuram o aplicativo Web para usar sua identidade gerenciada atribuída pelo sistema para extrair imagens do Registro de Contêiner do Azure.

    • Pode levar alguns minutos para que o aplicativo Web seja criado. Você pode verificar os logs de implantação com o comando az webapp log tail . Por exemplo, az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Se você vir entradas com "aquecimento" neles, o contêiner está sendo implantado.

    • O URL da aplicação Web é <web-app-name>.azurewebsites.net, por exemplo, https://webappsimple123.azurewebsites.net.

Fazer atualizações e reimplantar

Depois de fazer alterações de código, você pode reimplantar no Serviço de Aplicativo com os comandos az acr build e az webapp update .

Limpeza

Todos os recursos do Azure criados neste tutorial estão no mesmo grupo de recursos. A remoção do grupo de recursos remove todos os recursos do grupo de recursos e é a maneira mais rápida de remover todos os recursos do Azure usados para seu aplicativo.

Para remover recursos, use o comando az group delete .

az group delete --name web-app-simple-rg

Você também pode remover o grupo no portal do Azure ou no Visual Studio Code e na Extensão de Ferramentas do Azure.

Próximos passos

Para obter mais informações, consulte os seguintes recursos: