Como estou subindo meus microserviços na AWS de forma completamente automatizada e com um único script

Faaaala galera, beleza ?

Não sei vocês, mas eu tenho um baita ódio quando chega o "temido" momento de colocar a aplicação no ar, eu já usei várias ferramentes (gcp, aws, heroku, digitalocean, e até mesmo algumas no tempo do php onde subia os arquivos na mão rsrs)

Então pensei no seguinte, cara, isso é horrível preciso de uma forma simples de colocar um script e ter uma api rodando, de forma fácil, rápida, e sem ter que perder uma semana inteira nisso.

Para isso eu passei minhas ultimas duas semanas atrás de uma forma fácil de rápida de fazer isso...

Encontrei várias formas, primeiro pensei em usar o kubernetes, pois com um yml ele já faz tudo pra você de forma super simples e escalável, mas com o precinho mais salgado, pois não é muito pensado pra projetinhos de teste nem muito pequenos, logo descartei essa opção pois os planos de AKS na AWS são bem carinhos.

Logo, fui procurar uma opção mais fácil e rápida, (e mais barata) rsrs, então lembrei de um curso que fiz uma vez de terraform, e que era possível provisionar uma infra inteiramente usando ele, passei alguns dias tentando automatizar tudo, e pimba, conseguia gerar a instancia ec2, rodar comandos via ssh, e fazer várias coisas, tinha minha aplicação rodando... no entando estava achando muito simples... e outra coisa, eu tinha que configurar os domínios e subdomínios na mão, e se o ip da máquina mudasse ? - aí eu teria que ir lá e pegar o ip novo... argh, muito chato isso...

Então comecei a buscar soluções prontas pra isso, e então dei de cara com o repo desses caras: https://github.com/bitovi/github-actions-deploy-docker-to-ec2

Pronto, achei o que precisava, era perfeito, fazia tudo que eu precisava, era demais... Só que pra mim estava dando vários problemas de timeout, visto que ele copiava o conteudo do projeto para a instância e só depois lá dentro fazia build e subia a nova imagem...

Foi então que eu decidi usar o ECR, fiz um fork e criei uma implementação onde o github actions faz a build da imagem, o script cria um repositório no ECR, para armazenar a imagem na aws (como se fosse um DockerHub privado), e depois disso, dá um pull da imagem dentro da máquina ec2 e roda via docker-compose.

Gravei um vídeo mostrando, espero que esse vídeo chegue no máximo de pessoas possível, e em breve tenhamos mais alternativas open source e de forma simples para prover tudo isso com praticidade.

ps. usei o dokku algumas vezes também, mas ainda assim é um trabalhinho bem manual e chato (instalar tudo via ssh, configurar, blablabla, isso é horrível).

Enfim, criei um vídeo de menos de 2 minutos mostrando como você pode fazer o mesmo aí.

Link para o vídeo no meu canal no youtube onde eu mostro como eu subi uma aplicação na aws em menos de 2 minutos:

https://www.youtube.com/watch?v=lcBOaU1l8-M

Outra funcionalidade que implementei na minha versão foi que ele deixa somente uma imagem no ecr por branch

No meu caso prático, tenho dois microserviços, cada um tem um subdomínio especifico ex: api.meusite.com e whatsapp.meusite.com

Em breve vou criar outros serviços, ou mesmo ambientes diferentes e a ultima coisa que quero é perder mais de 1 hora para subir um novo ambiente.

É isso galerinha, espero que alguém esbarre com esse post e veja o quanto isso me ajudou, e espero que ajude outras pessoas também.

Muito bacana a post, depois vou ver o vídeo.

Vc mencionou o terraforme ai lembrei do Pulumi, mas que coisa linda de usar man.

vc levanta toda a infra usando código e ele aceita várias linguagens, é muito bom mesmo

Gostei muito do seu processo de otimização de serviço para subir aplicações.

Bela ideia, tomara que continue evoluindo para chegar ao nivel de otimização que deseja! Obrigado por compartilhar seu conhecimento.

Att.

Já tentou serverless e cloud formation?

@niltoum ja usei cloud run, mas se nao me engano é bem mais caro
Eu sinceramente não sei o preço do cloudformation, mas o framework serverless eu acho incrível, vc define os serviços a serem criados/ atualizados em um arquivo yaml e o serviço cloud monta a solução pra você. Nunca testei ele com github actions, mas acredito que não tenha problemas ao integrar as duas coisas. Além disso, é grátis e funciona com aws, gcp e azure =]

Super bacana sua iniciativa e evolução.

Há um serviço na aws chamado ECS que vai atender super bem o seu caso.

Também é possível fazer a integração com terraform, você literalmente consegue subir todo o ambiente(ecs, load balancer, dns, rds, e etc) e em relação aos custos é bem similar.

pois é, isso tudo esta implementado. A questao é que eu nao tenno aje fazer nada na mão mais, o processo esta todo automatizado

Essa questão de automatizar é super válida. Já ajuda um script, mas ou uma ou outra adaptação ainda é necessária.

cara. curti sua experiência pq também tô sempre em busca de soluções desse tipo kkkk infelizmente fiquei órfão do heroku que era muito bom pra esse processo de deploy.

mas achei uma solução semelhante e self hosted.

se chama caprover. é um projeto semelhante ao oq o heroku fazia, ele roda em cima do docker swarm, então dá pra usar todo o poder do docker e ainda ter o processo de deploy e escalonamento automaticamente. instalei nas minhas vps e não tive problemas. uso a meses. vc define um domínio nele e ele já gerência tudo desde o roteamento até o certificado ssl

ce ja viu o dokku ?
tentei usar mas achei bem problemático (inclusive pra desinstalar). e o dokku não tem uma interface web pra usar (existe o ledokku mas é um projeto não oficial que cria uma interface web mas é bem simples.) aí achei o caprover que tem tudo isso de maneira oficial e tem integração com o github pra deploy automático. uso ele atualmente nos meus projetos
opa mano, bacana, já vou até olhar... mas a parada é.. ele provê tbm subdomínios, ssl, load balancers, security groups e todas essas coisas ? - Além é claro do deploy automático da nova versão do seu código ?
load balancer ele usa o nginx embutido, então vc consegue fazer deploy de uma api por exemplo, e definir no painel dele quantas instâncias vc quer que ele execute, assim ele faz o load balancing das requisições automaticamente. ele também define subdomínios automaticamente pra cada novo app que vc criar, porém vc precisa de um domínio pra setar nele pra ele usar. e o ssl ele gerência automaticamente pelo certbot da letsEncrypt. vc também pode linkar um repositorio seu do github nele, e toda nova atualização do código ele faz o deploy automaticamente. e ainda mantém um histórico de deploy pra vc restaurar com clique caso a nova versão dê problema. é um projeto bem completo e me agradou demais.
dei uma olhada, ele faz basicamente o que o dokku ja faz, e voce precisa configurar varias coisas na mao ainda, a vantagem desse meu é que ele provisiona a maquina, faz o deploy da aplicação e faz varias outras coisas so com base nesse script, eu nao vou precisar configurar mais nada
caramba, parece ser top demais mano, to olhando um vídeo aqui
ele também tem uma lista de "oneClickApps" no painel web onde vc pode fazer deploy automático e já ter um DB rodando por exemplo. tem bastante coisa lá e é muito prático. kkk falo bastante dele pq realmente foi o melhor projeto que achei pra solucionar meu problema de um substituto pro heroku kkkk.