Escrever a receita de como um servidor web deve ser instanciado e configurado não é o que basta para resolver todos os desafios de infraestrutura para sua aplicação, pois isso é apenas uma parte dos problemas de gestão.
É preciso que o provisionamento de serviços e servidores seja feito de maneira orquestrada, pois os serviços devem se comunicar uns com os outros, e sabemos que cada serviço tem uma necessidade diferente para escalar, assim como também é necessário que sejam realizados backups, análises de performance, gestão de logs etc.
Existe agora uma solução que realiza implementação, integração e ampliação instantaneamente em todas as grandes nuvens públicas e privadas – ela se chama Juju, onde há os “charms”, que são responsáveis por oferecer uma interface padronizada que permite essa integração com outros serviços. Para compreender melhor a diferença, enquanto as ferramentas de provisionamento estão preocupadas em instalar e configurar, a Juju faz tudo isso, mas também se preocupa com a integração.
Para que tudo isso possa acontecer, é necessário criar o ambiente juju – existem versões para Linux, Mac e Windows. Depois de instalado, é necessário que seja realizado a configuração inicial, para isso basta executar o comando:
$ juju generate-config
Feito isso, será criado o diretório ~/.juju com todos os arquivos e diretórios necessários para que você possa começar a explorar a ferramenta. Inicialmente, basta você editar o arquivo environments.yaml que está nesse diretório e configurar qual provedor de cloud você irá utilizar, e suas credenciais.
Precisamos preparar o ambiente no provedor de cloud para poder instalar o state-server do juju, que é responsável por gerenciar todos os serviços e recursos necessários para realizar a integração com segurança entre todos os pontos envolvidos e, para isso, basta executar o comando:
$ juju bootstrap
Para este artigo, iremos utilizar o exemplo clássico utilizado na própria documentação do juju, que é o setup do WordPress. Vamos supor que para iniciar um deploy de um novo site, precisemos do aplicativo em si e de um banco de dados, no caso o MySQL. Para realizar a instalação destes dois serviços, basta:
$ juju deploy cs:precise/wordpress $ juju deploy cs:precise/mysql
Até o momento, os serviços foram instalados, porém não estão integrados, precisamos avisar que eles irão trabalhar de maneira integrada, para isto:
$ juju add-relation wordpress mysql
Pronto, estamos com um WordPress instalado e utilizando um serviço de MySQL pronto, e isso só é possível pois ambos estão preparados para trabalhar com o juju de maneira integrada, e para que tudo isso? Em um cenário que você queira escalar horizontalmente por algum motivo, basta adicionar mais unidade onde é necessário, por exemplo:
$ juju add-unit wordpress
Ou seja, agora a topologia são duas máquinas sendo executadas com o WordPress e utilizando o mesmo banco de dados.
Além de integrar os serviços entre si, existem hooks que disponibilizam mecanismos para realizar a configuração dos serviços, como trocar o titulo do WordPress:
$ juju set wordpress title="My Blog"
Para gerenciar os serviço, você pode utilizar o comando:
$ juju status
Assim como para tornar a ferramenta pública para todos:
$ juju expose wordpress
Veja mais:
- https://juju.ubuntu.com/
- https://juju.ubuntu.com/docs/
- http://cloud.dzone.com/articles/juju-deploy-integrate-and
- http://blog.labix.org/2013/06/25/the-heart-of-juju
- http://www.youtube.com/watch?v=kKQLhGZVN4A
As imagens foram criadas pelo Gustavo Niemeyer.
Abs!