Aqui vai uma leitura direta do diagrama:
Cliente → Front-end (React): o usuário acessa a aplicação web; o front-end está hospedado na EC2 (em Docker) e serve a UI.
Front-end → Back-end (Spring Boot): a UI chama APIs do back-end exposto na rede pública da instância. O back-end também roda em Docker na mesma EC2.
Back-end → Banco de Dados (PostgreSQL): o serviço Spring Boot comunica-se com o PostgreSQL em rede privada (isolado do público), também containerizado. Apenas o back-end enxerga o banco.
Back-end
CI/CD com GitLab Runner: um GitLab Runner na EC2 executa o pipeline. Ele:
faz build das imagens Docker do front e do back;
envia as imagens para o Amazon ECR;
puxa as imagens do ECR e faz o deploy/atualização dos containers na EC2.
ECR (registry): repositório das imagens Docker versionadas, consumidas pelos deploys.
Rede e segurança:
Back-end tem endpoint público (porta exposta conforme SG/NACL).
Banco fica em sub-rede/bridge privada (sem exposição externa).
Comunicação interna entre containers acontece na mesma host/bridge Docker.
Resumo do fluxo: Usuário → Front (EC2) → Back (EC2) → DB (privado) + S3 (armazenamento). Build/Release: GitLab Runner → build → push no ECR → pull e (re)deploy na EC2.