1
resposta

Como transformar a aplicação django no ECS em um micro-serviço

No caso de usar o ECS, entendo que o ideal seria distribuir a aplicação django em 3 partes:

front; back; banco de dados;

Na aula, foi gerada uma única imagem. Como eu posso separar o django para rodar esses 3 containers de forma integrada, ou seja, como um micro-serviço (mesma network e acesso aos services - trabalhando com ipvs e redirecionando a chamada pro deploy etc)?

Esse é o código do projeto:

https://github.com/andreichiro/application/tree/master

E esse é o código da Dockerfile:

EXPOSE 8000

ENTRYPOINT python manage.py runserver 0.0.0.0:8000

FROM python:latest AS run

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

ARG DATE=$(date +%Y-%m-d%-%H%M)
ARG APPLICATION_NAME=application

LABEL maintaner="andreichiro@gmail.com"
LABEL .br.com.andreichiro-schema.date=$DATE
LABEL .br.com.andreichiro-schema.application=$APPLICATION_NAME

WORKDIR /app 
RUN python3 -m venv venv
RUN source venv/bin/activate
COPY --from=build /app/manage.py .
COPY --from=build /app/application .
COPY --from=build /app/requirements.txt .
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt --no-cache-dir

EXPOSE 8000

CMD python manage.py runserver 0.0.0.0:8000

Entendo que eu teria de gerar uma imagem p/ index.html/sobre.html, uma pro pyspark (banco de dados que será utilizado) e uma pra aplicação em si (assim, as 3 ficam isoladas mas escaláveis). Como eu configuro essas imagens?

1 resposta

Olá, André

Pelo que entendi, você quer dividir sua aplicação Django em três partes: front-end, back-end e banco de dados, cada uma em um container distinto, correto? Isso é uma prática comum quando estamos trabalhando com a arquitetura de micro-serviços e é uma abordagem muito boa para deixar sua aplicação mais modular e escalável.

Para fazer isso, você precisará criar uma Dockerfile para cada parte da sua aplicação. Vou te dar um exemplo de como você pode fazer isso:

  1. Front-end: Você pode criar uma Dockerfile para o front-end da sua aplicação. Nela, você pode usar um servidor de aplicação web como o Nginx para servir seus arquivos HTML estáticos. Aqui está um exemplo de como a Dockerfile pode se parecer:
FROM nginx:latest
COPY /path/to/your/html/files /usr/share/nginx/html
  1. Back-end: Para o back-end, você pode continuar usando a Dockerfile que você já tem, mas removendo a parte que serve os arquivos HTML. Algo assim:
FROM python:latest AS run

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

ARG DATE=$(date +%Y-%m-d%-%H%M)
ARG APPLICATION_NAME=application

LABEL maintaner="andreichiro@gmail.com"
LABEL .br.com.andreichiro-schema.date=$DATE
LABEL .br.com.andreichiro-schema.application=$APPLICATION_NAME

WORKDIR /app 
RUN python3 -m venv venv
RUN source venv/bin/activate
COPY --from=build /app/manage.py .
COPY --from=build /app/application .
COPY --from=build /app/requirements.txt .
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt --no-cache-dir

EXPOSE 8000

CMD python manage.py runserver 0.0.0.0:8000
  1. Banco de dados: Para o banco de dados, você pode usar uma imagem Docker já existente do PySpark. Você só precisará configurar a conexão do seu back-end com esse banco de dados.

Depois de criar as Dockerfiles, você pode usar o Docker Compose para gerenciar esses serviços. Aqui está um exemplo de como o arquivo docker-compose.yml pode parecer:

version: '3'
services:
  web:
    build: ./path/to/your/frontend/dockerfile
    ports:
      - "80:80"
  app:
    build: ./path/to/your/backend/dockerfile
    ports:
      - "8000:8000"
  db:
    image: "pyspark-image"
    ports:
      - "5432:5432"

Com esse arquivo, você pode iniciar todos os seus serviços com o comando docker-compose up.

Lembre-se, esse é apenas um exemplo e pode não funcionar perfeitamente para o seu caso. Você precisará ajustar de acordo com as necessidades da sua aplicação.

Espero ter ajudado e bons estudos!