-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Separação do source da aplicação da definição de infraestrutura #1
Comments
Primeiramente, muito obrigado, muito bem feitas suas observações, vou só expressar alguns questionamentos para validarmos mais ainda a melhor solução:
Concordo, mas todos os arquivos no repositório dizem respeito à aplicação ou também dependências da aplicação? Trago essa reflexão para considerarmos a função de um go.mod/Makefile, requirements.txt/setup.py ou package.json como fazendo parte da aplicação, especificando às vezes drivers para backing services, logo, suas dependências.
Sim seria preciso, da mesma forma que quando for subir ela terá que escolher algum cloud provider. Mas entendo que o contexto é importante. Então podemos fazer o seguinte:
Então poderíamos ter os repositórios em um cenário assim:
Assim reduzimos o contexto dos codebases em um único propósito. Sobre o segundo ponto do mapeamento do ambiente, pensando em developer experience, pretendo utilizar o |
Acabei de renomear esse repositório (
Caso validemos essa solução podemos partir para o próximo desafio que é o gerenciamento de configuração e pipeline de continuous delivery de uma aplicação serverless. |
https://github.com/UpperGit/artisan-shared-resources/runs/1433700361?check_suite_focus=true Deu certo 🤩 Agora vou atualizar as documentações para o novo modelo. @ribaptista aguardo seu feedback! |
Normalmente uma aplicação bem escrita comunica-se com seus backing services (databases, auth providers etc) através de abstrações de classes (interfaces). Isto possibilita que, através de uma simples mudança na configuração, uma mesma aplicação possa usar:
Portanto, como pode ser possível anexar os requerimentos de infraestrutura ao repositório da aplicação sem introduzir acoplamento com tipos de backing services específicos (mysql, postgres etc)?
Imagino que ao definir os requisitos de infraestrutura da aplicação (na pasta
deploy
, via terraform) seja necessário especificar o tipo de banco de dados (mysql ou postgres?), o tipo de servidor de cache (redis ou memcached?) etc.Dito isso, sugiro que o codebase da aplicação (sources em go, node etc) esteja em um codebase separado do código de automação de infraestrutura (terraform).
Desta forma, o mesmo codebase da aplicação pode ser instalado em um cliente X (que usa Postgres e Redis), quanto em um cliente Y (que adota Mysql e Memcached).
O codebase da aplicação seria único e genérico (como qualquer software open source). Os codebases de deploy conteriam a infraestrutura e os detalhes de configuração (dev/qa/prod) de cada cliente/ambiente onde a aplicação foi instalada.
The text was updated successfully, but these errors were encountered: