Pular para o conteúdo principal

Deploy de Aplicação Flask Usando Docker e GitHub Actions na AWS

 

Deploy de Aplicação Flask Usando Docker e GitHub Actions na AWS

Neste post, vamos automatizar o deploy de uma aplicação Flask usando Docker e GitHub Actions diretamente para o AWS Elastic Beanstalk. Ao invés de usar um arquivo ZIP, vamos criar uma imagem Docker para a aplicação e utilizá-la no processo de deploy. Isso permite que o ambiente de produção seja configurado de maneira mais consistente e escalável. Vamos ver como configurar isso passo a passo.

O AWS Elastic Beanstalk suporta contêineres Docker, o que facilita o deploy de aplicações que são empacotadas em contêineres, como no nosso caso, a aplicação Flask. Usaremos o GitHub Actions para construir e empurrar a imagem Docker para o Elastic Beanstalk, e então, atualizar o ambiente com a nova versão da aplicação.



Pré-Requisitos

  • Conta AWS: Você precisa de uma conta AWS com permissões para usar o Elastic Beanstalk e o Amazon ECR (Elastic Container Registry).
  • Aplicação Flask: Sua aplicação Flask deve estar configurada corretamente, com um arquivo Dockerfile no repositório.
  • Credenciais AWS: As chaves de acesso da AWS (Access Key e Secret Key) configuradas no GitHub Secrets.
  • GitHub Repository: O código da aplicação Flask deve estar em um repositório no GitHub.

Passo 1: Criando o Dockerfile para sua Aplicação Flask

Para que a aplicação Flask seja executada em um contêiner, você precisa criar um Dockerfile no diretório raiz do seu repositório. Um exemplo básico de Dockerfile seria:


# Usando a imagem base do Python
FROM python:3.8-slim

# Definindo o diretório de trabalho
WORKDIR /app

# Copiando os arquivos do projeto
COPY . /app

# Instalando as dependências
RUN pip install --no-cache-dir -r requirements.txt

# Expondo a porta em que o Flask irá rodar
EXPOSE 5000

# Comando para iniciar a aplicação Flask
CMD ["python", "app.py"]

Esse Dockerfile configura o ambiente para a aplicação Flask, instala as dependências definidas no requirements.txt, expõe a porta 5000 e define o comando para rodar a aplicação Flask.


Passo 2: Configuração das Credenciais AWS no GitHub

Para permitir que o GitHub Actions interaja com a AWS, você precisa configurar as credenciais AWS no seu repositório GitHub. Siga os seguintes passos:

  1. No AWS Console, crie um usuário IAM com permissões para usar o Elastic Beanstalk e o ECR (Elastic Container Registry), e gere uma chave de acesso para esse usuário.
  2. No GitHub, acesse o repositório e vá para "Settings" > "Secrets".
  3. Adicione os seguintes segredos:
    • AWS_ACCESS_KEY_ID: A chave de acesso da AWS.
    • AWS_SECRET_ACCESS_KEY: A chave secreta de acesso da AWS.
    • AWS_REGION: A região onde seu Elastic Beanstalk e ECR estão localizados (ex: us-east-1).
    • AWS_ECR_REPO: O nome do repositório ECR onde a imagem Docker será armazenada.

Passo 3: Criando o Workflow no GitHub Actions

Agora que a aplicação Flask e as credenciais estão configuradas, podemos criar um arquivo de workflow do GitHub Actions para construir e fazer o deploy da imagem Docker para o Elastic Beanstalk.

Crie um arquivo chamado .github/workflows/deploy.yml com o seguinte conteúdo:


name: Deploy Flask App to AWS Elastic Beanstalk using Docker

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Docker
        uses: docker/setup-buildx-action@v2

      - name: Log in to AWS ECR
        run: |
          aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com

      - name: Build and push Docker image
        run: |
          docker build -t ${{ secrets.AWS_ECR_REPO }} .
          docker tag ${{ secrets.AWS_ECR_REPO }}:latest ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.AWS_ECR_REPO }}:latest
          docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.AWS_ECR_REPO }}:latest

      - name: Deploy to Elastic Beanstalk
        run: |
          aws elasticbeanstalk create-application-version --application-name flask-app --version-label $GITHUB_SHA --source-bundle S3Bucket="my-app-bucket",S3Key="flask-app.zip"
          aws elasticbeanstalk update-environment --application-name flask-app --environment-name flask-env --version-label $GITHUB_SHA

Explicação dos passos:

  • Checkout code: Faz o checkout do código do repositório.
  • Set up Docker: Configura o ambiente Docker no GitHub Actions.
  • Log in to AWS ECR: Faz login no Amazon ECR usando as credenciais da AWS para poder empurrar a imagem Docker para o repositório ECR.
  • Build and push Docker image: Constrói a imagem Docker e a empurra para o repositório ECR na AWS.
  • Deploy to Elastic Beanstalk: Atualiza o ambiente do Elastic Beanstalk com a nova versão da aplicação, que agora está em um contêiner Docker.

Passo 4: Testando o Workflow

Depois de configurar o arquivo de workflow, sempre que você fizer um commit no branch main, o GitHub Actions irá automaticamente construir a imagem Docker, empurrá-la para o Amazon ECR e atualizar o ambiente do Elastic Beanstalk com a nova versão.

Para testar, basta fazer um commit e observar os logs do GitHub Actions para garantir que tudo foi feito corretamente.


Conclusão

Com GitHub Actions, Docker e AWS Elastic Beanstalk, você consegue automatizar o processo de deploy de sua aplicação Flask, tornando-o mais eficiente e escalável. Essa configuração com Docker traz mais flexibilidade e garante que seu ambiente de produção seja idêntico ao de desenvolvimento. Experimente e aproveite as vantagens do CI/CD para sua aplicação!

Comentários

Postagens mais visitadas deste blog

Funções de Ativação em Redes Neurais: Tipos, Contextos e Aplicações

  Funções de Ativação em Redes Neurais: Tipos, Contextos e Aplicações As funções de ativação são componentes essenciais das redes neurais, permitindo que os modelos aprendam e representem relações complexas nos dados. Neste post, exploraremos os principais tipos de funções de ativação, suas características e como escolher a melhor para diferentes cenários. O Que São Funções de Ativação? As funções de ativação transformam as saídas lineares dos neurônios em representações não lineares, permitindo que as redes aprendam padrões complexos. Sem essas funções, as redes seriam equivalentes a simples regressões lineares. Principais Tipos de Funções de Ativação 1. Sigmoid A função sigmoid transforma valores em uma faixa entre 0 e 1: σ(x) = 1 / (1 + e^(-x)) Características: Boa para modelar probabilidades. Propensa ao problema de vanishing gradient em redes profundas. Aplicações: Classificação binária. 2. Tanh (Tangente Hiperbólica) A função tanh transfor...

Temperatura na Inteligência Artificial Generativa: O Que é e Como Afeta os Resultados

Temperatura na Inteligência Artificial Generativa: O Que é e Como Afeta os Resultados No contexto da Inteligência Artificial generativa, especialmente em modelos de linguagem como o GPT, a "temperatura" é um parâmetro que controla a aleatoriedade nas previsões do modelo. Esse controle influencia a qualidade e a criatividade das respostas geradas, sendo uma ferramenta essencial para personalizar os resultados conforme a necessidade do usuário. O Que é Temperatura? Em modelos de IA generativa, a temperatura é um parâmetro utilizado durante o processo de amostragem de probabilidades para gerar tokens (palavras ou caracteres). O modelo gera uma distribuição de probabilidade para o próximo token com base no contexto atual. A temperatura ajusta a "curvatura" dessa distribuição, controlando a diversidade das respostas geradas. Em termos simples, a temperatura pode ser vista como uma forma de controlar o "nível de criatividade" de uma resposta. Quanto mais ba...

Introdução aos Vector Databases: A Base de Dados para Embeddings em IA Generativa

Os bancos de dados vetoriais (Vector Databases) emergiram como uma tecnologia essencial no processamento de informações em alta dimensão, especialmente no contexto de embeddings. Neste artigo, explicamos o conceito de bancos de dados vetoriais, como eles funcionam e sua importância para aplicações de IA generativa. O que são Bancos de Dados Vetoriais? Bancos de dados vetoriais são sistemas projetados para armazenar, indexar e buscar dados representados como vetores em espaços de alta dimensão. Em vez de dados tradicionais estruturados (como tabelas relacionais), esses bancos armazenam representações matemáticas de objetos, como embeddings gerados por modelos de machine learning. Um embedding é uma representação numérica de um objeto (como palavras, imagens ou usuários) em um espaço vetorial, onde a proximidade entre vetores reflete a similaridade semântica ou estrutural dos objetos originais. Como Funcionam os Bancos de Dados Vetoriais? Esses bancos de dados empregam algoritmos...