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 gunicorn
ficheiros .
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
Execute o comando az login para entrar no Azure.
az login
Execute o comando az upgrade para garantir que sua versão da CLI do Azure esteja atualizada.
az upgrade
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.
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
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
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.
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-identity
parâmetros ,--role
e--scope
habilitam a identidade gerenciada atribuída ao sistema no aplicativo Web e atribuem-lhe aAcrPull
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: