A empresa FIAP X apresentou a investidores um protótipo simples que:
- Processa um vídeo enviado.
- Retorna as imagens extraídas dentro de um arquivo
.zip.
Os investidores gostaram da proposta e agora desejam uma versão mais robusta, onde:
- Usuários possam enviar vídeos.
- Possam baixar o resultado (arquivo zip) via uma aplicação funcional.
📎 Projeto utilizado na apresentação: Link para o vídeo
Refatorar e evoluir o protótipo utilizando boas práticas de arquitetura de software aprendidas no curso, como:
- Desenho de Arquitetura
- Microsserviços
- Qualidade de Software (testes)
- Mensageria
- O sistema deve processar mais de um vídeo ao mesmo tempo.
- Em caso de picos, o sistema não deve perder requisições.
- O sistema deve ser protegido por usuário e senha.
- Deve haver listagem de status dos vídeos de um usuário.
- Em caso de erro, o usuário deve ser notificado (e-mail ou outro meio).
- O sistema deve persistir os dados.
- Deve possuir arquitetura escalável.
- O projeto deve ser versionado no GitHub.
- Deve conter testes automatizados para garantir qualidade.
- Deve possuir pipeline de CI/CD.
- 📄 Documentação da arquitetura proposta.
- 🛠️ Script de criação do banco de dados ou recursos necessários.
- 🔗 Link para o repositório GitHub com o projeto.
- 🎥 Vídeo de no máximo 10 minutos apresentando:
- Documentação
- Arquitetura escolhida
- Projeto em funcionamento
Este repositório define a infraestrutura como código (IaC) para o projeto do Hackathon FIAP, utilizando serviços da AWS com foco em escalabilidade, segurança, resiliência e alta disponibilidade. Abaixo, os principais componentes da arquitetura:
- Serviço para criar, publicar, manter, monitorar e proteger APIs em qualquer escala (REST, HTTP, WebSocket).
- Atua como "porta de entrada" para as requisições dos usuários.
- Suporte nativo a autenticação via Cognito, IAM e JWT.
- Recursos como caching, versionamento, CORS e throttling (controle de picos).
- Justificativa: Criação rápida de APIs seguras e escaláveis, totalmente gerenciado, integração nativa com Lambda e Cognito.
- Serviço de identidade para adicionar autenticação, autorização e gerenciamento de usuários a aplicações web e móveis.
- Responsável pela gestão dos usuários (cadastro, login com e-mail/senha ou redes sociais) e pela validação/gestão dos tokens de autenticação/autorização.
- Suporte a MFA (autenticação multifator) e fluxos customizáveis com triggers Lambda.
- Integra-se diretamente com API Gateway e IAM para controle de acesso fino.
- Justificativa: Solução serverless robusta para identidade, escalável, segura e integrada com outros serviços AWS, atendendo ao requisito de proteção por usuário e senha.
- Serviço de computação serverless que executa código em resposta a eventos.
- Utilizado para funções específicas e pontuais, como:
- Geração de URLs pré-assinadas (Presigned URLs) para permitir que os usuários façam upload dos vídeos diretamente para o S3 de forma segura e temporária.
- Geração de tokens específicos (se necessário complementar a lógica do Cognito para acessos temporários a recursos, por exemplo).
- Pode ser acionado por API Gateway, S3 Events, SQS, etc.
- Justificativa: Execução sob demanda, escalabilidade automática, sem gerenciamento de servidores, ideal para tarefas pontuais e integrações, otimizando custos.
- Serviço de armazenamento de objetos altamente escalável, durável e seguro.
- Utilizado para:
- Armazenar os vídeos originais enviados pelos usuários (via Presigned URL gerada pelo Lambda).
- Armazenar as imagens extraídas durante o processamento.
- Armazenar os arquivos
.zipresultantes para download pelo usuário.
- Integração com CloudFront (CDN), Lambda (eventos de criação de objeto), e controle de acesso fino por políticas IAM e de bucket.
- Justificativa: Armazenamento virtualmente infinito, seguro, de baixo custo e escalável para dados não estruturados, central no fluxo de dados do projeto.
- Serviço de fila de mensagens totalmente gerenciado para desacoplar e escalar microsserviços, aplicações distribuídas e sistemas serverless.
- Utilizado para a troca de mensagens entre microsserviços, garantindo o desacoplamento e a resiliência:
- Ex: O serviço que recebe o upload (via API Gateway/Lambda) envia uma mensagem para uma fila SQS contendo informações sobre o vídeo a ser processado.
- O(s) microsserviço(s) de processamento (rodando no EKS) consomem mensagens dessa fila para iniciar o trabalho.
- Justificativa: Essencial para atender aos requisitos de processamento concorrente e resiliência a picos. Garante que nenhuma requisição seja perdida, desacopla o front-end do back-end de processamento, e facilita o escalonamento baseado em eventos (com KEDA).
- Banco de dados NoSQL chave-valor e de documentos, totalmente gerenciado, que oferece performance de milissegundos de um dígito em qualquer escala.
- Utilizado para persistir e consultar o estado e metadados do processamento dos vídeos:
- Armazena informações como ID do vídeo, ID do usuário, status (ex:
UPLOAD_CONCLUÍDO,PROCESSANDO,CONCLUÍDO,ERRO), timestamp, link para o resultado no S3, etc. - Permite a implementação do requisito de listagem de status dos vídeos por usuário.
- Armazena informações como ID do vídeo, ID do usuário, status (ex:
- Justificativa: Altíssima escalabilidade, performance consistente, modelo serverless (pay-as-you-go), ideal para controle de estado, metadados e catálogos que exigem baixa latência e alta concorrência.
- Serviço gerenciado de Kubernetes que facilita a execução, gerenciamento e escalonamento de aplicações containerizadas na AWS.
- Orquestra os contêineres dos microsserviços responsáveis pelo processamento pesado dos vídeos.
- Elimina a necessidade de gerenciar o control plane do Kubernetes.
- Suporta workloads em EC2, Fargate e Graviton.
- Integração nativa com IAM para controle de acesso, CloudWatch para observabilidade, e ECR para imagens.
- Justificativa: Plataforma robusta, escalável e padrão de mercado para orquestração de contêineres, garantindo alta disponibilidade e facilitando a gestão de microsserviços complexos.
- Registro de imagens de contêiner Docker totalmente gerenciado, seguro e escalável.
- Utilizado para armazenar as imagens Docker dos microsserviços da aplicação (ex: serviço de processamento de vídeo).
- Integra-se perfeitamente com EKS, Fargate, Lambda (imagens de contêiner) e pipelines de CI/CD.
- Justificativa: Essencial para o fluxo de trabalho com contêineres, fornece um local seguro e gerenciado para as imagens, integrado ao ecossistema AWS e ao controle de acesso IAM.
- Componente de escalonamento automático baseado em eventos para Kubernetes (instalado no cluster EKS).
- Permite escalar os pods dos microsserviços de processamento no EKS com base em eventos externos, como o número de mensagens na fila SQS.
- Pode escalar os pods de 0 (quando não há trabalho) até N (conforme a demanda), otimizando custos e garantindo performance.
- Justificativa: Implementa o requisito de arquitetura escalável de forma eficiente e orientada a eventos. Garante que os recursos de processamento (pods no EKS) sejam provisionados apenas quando necessário, respondendo dinamicamente aos picos de upload de vídeos refletidos na fila SQS.
- Plataforma de comunicação e entrega de e-mail na nuvem.
- Utilizada para notificar os usuários por e-mail sobre o status do processamento do vídeo, especialmente em caso de erro, conforme requisito funcional.
- Pode ser acionada por um serviço (ex: Lambda ou um microsserviço no EKS) ao final do processamento ou ao detectar um erro.
- Justificativa: Serviço especializado e confiável para entrega de e-mails transacionais, com APIs fáceis de integrar, garantindo que as notificações cheguem à caixa de entrada do usuário. (AWS Simple Email Service - SES - é uma alternativa nativa da AWS).
- Plataforma de CI/CD integrada ao GitHub.
- Utilizada para automatizar o pipeline de integração e entrega contínua (CI/CD) da aplicação:
- Execução de testes automatizados.
- Build das imagens Docker e push para o ECR.
- Deploy das aplicações no EKS.
- Provisionamento/atualização da infraestrutura via Terraform.
- Justificativa: Pipeline ágil, versionado junto ao código, totalmente integrado ao GitHub, facilitando a automação e a qualidade do processo de desenvolvimento e deploy.
- Ferramenta de Infraestrutura como Código (IaC) open-source.
- Utilizada para definir, provisionar e gerenciar toda a infraestrutura AWS descrita acima de forma declarativa e versionada.
- Garante a consistência, reprodutibilidade e automação da criação e atualização dos ambientes (desenvolvimento, produção, etc.).
- Justificativa: Padrão de mercado para IaC multi-cloud, permite gerenciar a complexidade da infraestrutura de forma eficiente, segura e versionada no Git.
Clique aqui para ser redirecionado ao desenho da arquitetura do projeto