herculan0 / ttc-app

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

http://ttc.herculano.xyz
Frontend
Backend
Devtools

  • O desafio consiste em construir uma stack de infraestrutura que provisione um ambiente para rodar duas aplicações e

  • Um banco de dados em dois cloud providers distintos (AWS, Azure ou GCP) conforme dados abaixo:

  • Aplicação 1 - (Cloud Provider 1): backend rest hipotético, em qualquer linguagem, com

  • scalling automático em caso de aumento de requisições no mesmo.

  • Aplicação 2 - (Cloud Provider 1): Frontend em qualquer linguagem hospedado em duas instancias de maquinas virtuais, e acessado através de um balanceador de carga, que deverá

  • ter reduncia de rede por zona de disponibilidade.

  • Ambas aplicações devem responder pelo mesmo DNS, porém com contextos (paths) distintos.

  • Banco de dados - (Cloud Provider 2): Criar um banco de dados qualquer em um segundo cloud provider. o acesso ao banco devera ser feito através de outro nome de dns, porem do mesmo domínio das aplicações.

  • O acesso ao banco de dados deverá ser restrito somente as duas aplicações acima.

  • A comunicação entre as aplicações (cloud provider 1) e o banco de dados (cloud provider 2), deverá ser feita de forma privada, exemplo VPN.

Requisitos:

  • Ambiente Cloud (AWS, Azure ou GCP)
  • Infraestrutura básica de rede (firewall, subnets, etc)
  • Load Balancer
  • Resolução de DNS para o Load Balancer
  • Documentação detalhada e instruções para execução em ambiente real (produção e desenvolvimento).
  • Comparação/avaliação de custos em relação as diferentes possibilidades técnicas na criação deste ambiente

Tecnologias sugeridas:

Pode-se fazer uso das seguintes tecnologias:

  • Docker
  • Terraform
  • Ansible
  • Kubernetes (Gerenciado ou nao)
  • Instancias de maquinas virtuais
  • Serviços gerenciados de hospedagem de aplicações (Azure App Service , AWS Beanstalk)
  • Banco de dados Gerenciado ou nao

OBS: outras ferramentas/soluções também são bem vindas, desde que funcione de forma simples e eficiente.

Será avaliado:

  • Organização
  • Percentual de entrega
  • Criatividade
  • Roadmap de futuras melhorias
  • Qualidade da documentação
  • Uso de ferramentas de automatização
  • Elegância na solução proposta
  • Simplicidade e eficiência
  • Técnicas e boas práticas de segurança

Entrega:

O código deverá ser entregue em um repositório git hospedado na nuvem (ex: GitHub).

About