Criando um aplicativo Flask e MongoDB com aplicativos de contêiner do Azure
Avalie esse Artigo
Para aqueles que querem se concentrar na criação de aplicativos em container escaláveis sem precisar se preocupar com o gerenciamento de nenhum ambiente, este é o tutorial para você! Vamos hospedar uma versão dockerizada do nosso aplicativoFlask e MongoDB Atlas criado anteriormente nos Aplicativos de Container do Azure.
O Azure Container Apps realmente simplifica não apenas a implantação, mas também o gerenciamento de aplicativos e microsserviços em contêineres em uma plataforma sem servidor. Este serviço da Microsoft também oferece uma enorme variedade de integrações com outras plataformas Azure, facilitando o dimensionamento ou melhoria da sua aplicação ao longo do tempo. A combinação de Flask, Atlase Container Apps permite que os desenvolvedores criem aplicativos que são capazes de lidar com grandes quantidades de dados e tráfego, ao mesmo tempo que são extremamente acessíveis a partir de qualquer máquina ou ambiente.
As especificidades deste tutorial são as seguintes: clonaremos nosso aplicativo Flask criado anteriormente que utiliza a funcionalidade CRUD (criar, ler, atualizar e excluir) aplicada a um “bookshelf” criado no MongoDB Atlas. Quando estiver instalado e funcionando corretamente e conectado ao Postman ou usando o cURL, podemos adicionar novos livros, ler novamente todos os livros em nosso banco de dados, atualizar (trocar) um livro e até excluir livros. A partir daqui, vamos dockerizar nosso aplicativo e, em seguida, hospedaremos nossa imagem dockerized nos Aplicativos de Container do Azure. Feito isso, qualquer pessoa em qualquer lugar poderá acessar nosso aplicativo!
O sucesso de seguir este tutorial requer alguns pré-requisitos:
- Acesse e clone nosso aplicativo Flask e MongoDB a partir do repositório do GitHub se quiser acompanhar.
- Uma assinatura do Microsoft Azure.
- Python 3.9+.
- Postman Desktop (ou outra forma de testar nossas funções).
Antes de continuarmos com a containerização de nosso aplicativo, certifique-se de que você tenha uma compreensão adequada do nosso programa por meio deste artigo: Scaling for Demand: Implantando aplicativos Python usando o MongoDB Atlas no Azure App Service. Ele entra em muitos detalhes sobre como construir e conectar corretamente um banco de dados do MongoDB Atlas ao nosso aplicativo juntamente com os meandros do próprio aplicativo. Se você é iniciante, certifique-se de entender completamente o aplicativo antes de containerizá-lo por meio do Docker.
Antes de passar para nossa demonstração, se você seguiu nosso link de demonstração anterior acima, é assim que seu banco de dados do Atlas pode ficar. Esses livros foram adicionados no final da demonstração anterior usando nosso endpoint. Se você estiver usando seu próprio aplicativo, uma collection vazia será suportada. Mas se você tiver documentos existentes, eles precisam apoiar nosso esquema ou uma mensagem de erro será exibida:
Estamos começando com quatro livros com várias páginas. Uma vez conectado e hospedado corretamente nos aplicativos de container do Azure, quando nos conectarmos ao nosso endpoint
/books
, esses volumes aparecerão.Depois de criar uma versão clonada do aplicativo, é hora de criar nosso Dockerfile. Um Dockerfile é importante porque contém todas as informações e comandos para montar uma imagem. A partir dos comandos em um Dockerfile, o Docker pode construir a imagem automaticamente com apenas um comando da sua CLI.
Em seu diretório de trabalho, crie um novo arquivo chamado
Dockerfile
e insira estes comandos:1 FROM python:3.9-slim-buster 2 WORKDIR /azurecontainerappsdemo 3 4 5 COPY ./config/requirements.txt /azurecontainerappsdemo/ 6 RUN pip install -r requirements.txt 7 8 9 COPY . /azurecontainerappsdemo/ 10 11 12 ENV FLASK_APP=app.py 13 EXPOSE 5000 14 CMD ["flask", "run", "--host=0.0.0.0"]
Certifique-se de que seu arquivo
requirements.txt
seja colocado em uma nova pasta chamada /config
. Isso é para que possamos ter certeza de que nosso arquivorequirements.txt
seja localizado e copiado corretamente com nosso Dockerfile, pois ele é crucial para nossa demonstração.Nossa imagem de base
python:3.9-slim-buster
é essencial porque fornece um ponto de partida para a criação de uma nova imagem de contêiner. No Docker, as imagens de base contêm todos os componentes necessários para criar e executar um aplicativo com êxito. O restante dos comandos copia todos os arquivos em nosso diretório de trabalho, expõe a porta padrão do Flask 5000 e especifica como executar nosso aplicativo, permitindo o acesso à rede de qualquer lugar. É fundamental incluir o --host=0.0.0.0
porque, caso contrário, quando tentarmos hospedar nosso aplicativo no Azure, ele não se conectará corretamente.Em nosso arquivo app.py, certifique-se de adicionar as duas linhas a seguir na parte inferior do arquivo:
1 if __name__ == '__main__': 2 app.run(host='0.0.0.0', debug=True)
Isso mais uma vez permite que o Flask execute o aplicativo, garantindo que ele seja acessível de qualquer rede.
Você pode testar e ter certeza de que seu aplicativo está devidamente dockerizado com estes comandos:
Construir:
docker build --tag azurecontainerappsdemo .
Executar:
docker run -d -p 5000:5000 -e "CONNECTION_STRING=<MONGODB_ATLAS_URI_STRING_HERE>" azurecontainerappsdemo
Você deve ver seu aplicativo instalado e funcionando em seu host local.
Agora, podemos usar o Azure Container Apps para executar nosso aplicativo em contêiner sem nos preocuparmos com a infraestrutura em uma plataforma sem servidor. Go ver como fazer isso.
Vamos construir e enviar nossa imagem para nosso Registro de container do Azure para hospedar nosso aplicativo com êxito. Para fazer isso, certifique-se de que está conectado ao Azure. Existem várias maneiras de criar um Azure container Registry: por meio da interface do usuário, da linha de comando ou até mesmo pela extensão VSCode. Para simplificar, este tutorial mostrará como fazer isso por meio da interface do usuário.
Nossa primeira etapa é fazer login no Azure e acessar o serviço de Registro de Contêineres. Clique para criar um novo registro e você será direcionado para esta página:
Escolha qual grupo de recursos você deseja usar, juntamente com um nome de registro (isso servirá como sua URL de login) e local. Anote-os porque, quando iniciamos nosso aplicativo de contêiner, todos eles precisam ser iguais. Depois que eles estiverem no lugar, pressione o botão Revisar e criar. Depois de configurado, seu registro ficará assim:
Agora que você tem seu registro de container em vigor, vamos acessá-lo no VSCode. Certifique-se de ter a extensão Docker instalada. Go para registros, entre em sua conta do Azure e conecte seu registro. O meu é chamado de "anaiyaregistry " e, quando configurado, fica assim:
Agora, faça login no seu ACR usando este comando:
docker login <azure registry url>
Por exemplo, o meu é:
docker login anaiyaregistry.azurecr.io
Você terá que Go até Chaves de acesso dentro do seu container e clicar em Acesso de Administrador. Em seguida, use esse nome de usuário e senha para fazer login no seu terminal quando solicitado. Se você estiver em uma máquina Windows, certifique-se de clicar com o botão direito do mouse para colar. Caso contrário, será exibido um erro:
Quando você fizer logon com êxito em sua assinatura do Azure e no Registro do Azure, poderemos prosseguir para a criação e o envio por push de nossa imagem.
Precisamos agora construir nossa imagem e enviá-la para nosso Registro de Contêiner do Azure.
Se você estiver usando um M1 Mac, precisamos reconfigurar nossa imagem para que ela use
amd64
em vez doarm64
configurado . Isso ocorre porque, no momento, os Aplicativos de Container do Azure oferecem suporte apenas a imagens de contêinerlinux/amd64
e, com uma máquina M1 , sua imagem será automaticamente criada como arm
. Para contornar isso, utilizaremos o Buildx, um plug-in Docker que permite criar e enviar imagens para várias plataformas e arquiteturas.Se você não estiver usando um Mac M1 , pule para nossa seção "Non-M1 Machines ".
Para instalar o
buildx
em sua máquina, coloque os seguintes comandos:docker buildx install
Para habilitar
buildx
para usar a Docker CLI, digite:docker buildx create –use
Quando isso for executado e um nome de container aleatório aparecer em seu terminal, você saberá que
buildx
foi instalado corretamente.O comando para construir nossa imagem é o seguinte:
docker buildx build --platform linux/amd64 --t <azure registry url>/<image name>:<image tag> --output type=docker .
Como exemplo, meu comando de construção é:
docker buildx build --platform linux/amd64 --t anaiyaregistry.azurecr.io/azurecontainerappsdemo:latest --output type=docker .
Especificar a plataforma em que você deseja que sua imagem seja executada é a parte mais importante. Caso contrário, quando tentarmos hospedá-lo no Azure, receberemos um erro.
Depois que isso for bem-sucedido, precisamos enviar nossa imagem para nosso registro. Podemos fazer isso com o comando:
docker push <azure registry url>/<image name>:<image tag>
Como exemplo, meu comando push é:
docker push anaiyaregistry.azurecr.io/azurecontainerappsdemo:latest
Se você tiver uma máquina não-M1 , siga as etapas acima, mas fique à vontade para ignorar a instalação do
buildx
. Por exemplo, seu comando de construção será:docker build --t <azure registry url>/<image name>:<image tag> --output type=docker .
Seu comando push será:
docker push <azure registry url>/<image name>:<image tag>
Para máquinas Windows, use o seguinte comando de compilação:
docker build --t <azure registry url>/<image name>:<image tag> .
E use o seguinte comando push:
docker push <image name>:<image tag>
Depois que seu push for bem-sucedido, vamos garantir que possamos vê-lo corretamente em nossa interface de usuário do Azure. Acesse seu serviço Container Registries e clique em seu registro. Em seguida, clique em Repositórios.
Clique novamente em seu repositório e haverá uma imagem chamada
latest
, pois foi com esse nome que marcamos nossa imagem quando a enviamos. Essa é a imagem que vamos hospedar em nosso serviço de aplicativo de contêiner.Vamos criar nosso app container por meio da interface de usuário do Azure.
Acesse seu serviço de aplicativos de container e clique em Criar.
Agora acesse seus aplicativos de contêiner na IU. Clique em Criar e preencha o "Basics " assim:
**Se esta é a primeira vez que você cria um Azure Container App, certifique-se de que um ambiente seja criado quando o aplicativo for criado. Um ambiente de Container Apps é crucial, pois cria um limite seguro em torno de várias aplicações de container que existem na mesma rede virtual. Para verificar seus ambientes de Aplicativos de Contêiner, eles podem ser acessados em "Container Apps Environments " em seu portal do Azure.
Como podemos ver, o ambiente que escolhemos acima está disponível na guia Container Apps Environments.
Certifique-se de que sua região e grupo de recursos sejam idênticos às opções escolhidas ao criar seu registro em uma etapa anterior. Quando terminar de inserir o “Basics,”, clique em Configurações do aplicativo e desmarque “Use quickstart image.”. Em “Image Source,”, clique no Azure Container Registry e insira as informações da imagem.
Na parte inferior, insira sua variável de ambiente (sua connection string. Ela está localizada no Atlas e no seu arquivo .env, se for copiada da demonstração anterior):
Abaixo disso, clique em “Enabled” para entrar e preencha o resto assim:
Quando terminar, clique em Revisar e criar na parte inferior da tela.
Você verá esta página quando sua implantação for bem-sucedida. Pressione Go para Recurso.
Clique em “Application URL” no lado direito.
Você será direcionado para seu aplicativo.
Se alterarmos o URL para incorporar nossa rota "/books", veremos todos os livros de nosso banco de dados do Atlas!
Nosso aplicativo Flask e MongoDB Atlas foi conteinerizado e hospedado com sucesso no Azure Container Apps! Neste artigo, analisamos como criar um Dockerfile e um Registro de Contêiner do Azure, além de como criar e hospedar nosso aplicativo nos Aplicativos de Contêiner do Azure.