Infraestrutura
O que é infraestrutura como código?
Já pensou em provisionar dezenas de servidores configurados com apenas alguns simples arquivos de configuração? Bem, isso hoje já é uma realidade. Porém, isso exige de você uma mudança de conceitos e de cultura de como você deve enxergar a infraestrutura de TI hoje.
Deixa eu te contar rapidamente um pouco da minha história profissional. Eu fui guri criado com Microsoft, era analista de suporte em infraestrutura Microsoft e como todo profissional de infraestrutura acostumado a trabalhar com Windows, eu estava muito acostumado a provisionar e gerenciar servidores pela interface gráfica, de forma manual. Scripts ou qualquer outra forma de automação não me agradavam. E hoje a mentalidade de muitos profissionais que trabalham com infraestrutura é a mesma. Isso deve mudar, assim como eu mudei a minha mentalidade. Eu vi que precisava sair da minha zona de conforto e encarar a infraestrutura de outra forma. Precisava de uma forma escalável para provisionar e gerenciar servidores sem ter que passar um a um instalando e configurando pacotes, verificando se os serviços estavam iniciados e realizando outras tarefas repetitivas do dia-a-dia. Foi aí que eu passei a estudar infraestrutura como código.
O que é infraestrutura como código?
Infraestrutura como código envolve você de forma declarativa, através de um arquivo de definição, descrever como você quer provisionar e gerenciar seu ambiente de TI. Isso envolve três conceitos muito importantes que tem a ver com automação de TI: provisionamento, gerência de configuração e orquestração. Vamos entender mais a fundo o que envolve esses conceitos.
Provisionamento
Você já instalou e configurou a pilha LAMP para subir o seu blog WordPress? Você que precisa instalar o Linux, depois instalar o Apache, o MySQL e o PHP. Após instalar esses serviços, você tem que configurá-los, configurar os hosts virtuais do apache, criar o banco de dados do WordPress, criar usuário com permissão ao bancou, baixar o WordPress e definir as permissões da pastas. Isso em si, não é uma tarefa complicada, mas imagine realizar esse mesmo processo em 100 servidores? Essa não é uma maneira ideal de trabalhar. E não estamos também falando de scripts, pois para você escalar o script e deixá-lo executável em qualquer ambiente, e executá-los sem precisar logar no servidor em si, isso vai lhe exigir um trabalho de criação bem complexo.
Provisionar ambientes como infraestrutura como código significa configurar ambientes de forma automática e escalável. Isso significa que tarefas como criar servidores, conectar em servidores, instalar e configurar pacotes e tarefas de provisionamento e configuração deve ser automática. O objetivo é fazer tudo isso através de um único arquivo de definição de ambiente. Veja abaixo um modelo simples de definição de ambiente na AWS.
tasks:
– name: Provisionar instancia do Amazon EC2
ec2:
key_name: my_key
instance_type: t2.micro
image: “{{ ami_id }}”
Neste pequeno pedaço de código, eu pude declarar que eu quero provisionar uma instância do Amazon EC2, que é o serviço de máquinas virtuais da Amazon, com uma imagem de sistema operacional específica, com uma configuração de hardware específica e uma chave SSH. Agora eu posso criar vários servidores de forma automática e escalável usando esse arquivo de definição.
Gerência de configuração
Infraestrutura como código envolve muito mais do que apenas provisionar ambientes, mas também manter esses ambientes em um estado desejado. Aí que entra então a gerência de configuração. Por exemplo, além de instalar o MySQL, você tem que garantir que ele esteja sendo executado. Como isso poderia ser exemplificado na infraestrutura como código? Veja o exemplo abaixo:
— – hosts : servidor
sudo : yes
sudo_user : root
tasks :
– name : instalar mysql-server
apt: name=mysql-server state=present update_cache=yes
– name : garantir que o mysql esteja rodando
service: name=mysql state=started
Esse modelo de definição acima é baseada no Ansible, o qual vamos falar mais adiantes neste artigo. Percebeu que com apenas algumas linhas de código, além de garantir que o pacote seja instalado, eu defino que eu quero que o serviço sempre no modo de execução iniciado. Além disso, esses gerenciadores de configuração realizam essa verificação em intervalos regulares, poupando você novamente de realizar um trabalho manual. Usar esses gerenciadores de configuração ajudam você a padronizar o seu ambiente de TI. A imagem abaixo exemplifica bem como funciona o conceito de estado desejado.
Imagine que você precisa atualizar a versão do PHP em 50 máquinas. O gerenciador de configuração vai garantir que a versão correta seja executada.
Orquestração
Orquestração é reunir processos de forma coerente. Hoje ninguém mais implementa um único serviço em uma única máquina. A TI de hoje traz implementações mais complexas . Você precisa lidar com aplicativos em clusters, vários datacenters, nuvens públicas, nuvens privadas e híbridas e aplicativos com dependências complexas. Você precisa de uma ferramenta que possa orquestrar suas tarefas complexas simplesmente.
Por exemplo, você tem seus serviços frontend, backend, banco de dados, redes e assim por diante. Cada um tem seu papel, seu modelo de configuração e implantação e você simplesmente executar as suas implantações, muitas vezes pode não dar certo. Em certas aplicações, eu preciso executar alguns comandos para criar os schemas de banco de dados da aplicação. Mas eu só posso realizar isso depois que o banco de dados tiver iniciado e pronto para receber requisições.
O que você deve ter em mente ao trabalhar com infraestrutura como código e orquestração é: Você deve escrever seus arquivos de definição de ambientes não apenas selecionando pacotes e serviços, mas definindo dependências entre eles e garantir que eles sejam implantados na ordem correta.
Ferramentas
Hoje existem diversas ferramentas que podem lhe ajudar nos processos listados acima, como Chef, Puppet e Ansible. Porém, venho destacar a minha recomendação para você iniciar com o Ansible. Uma das principais características que faz o Ansible ser atrativo para uso em relação à automação de TI é a sua linguagem bastante simples, ou seja, não precisa você ter um conhecimento avançado para entender o que está sendo feito. Pelo fato da linguagem ser de fácil entendimento, é possível começar a criar serviços de automação de forma fácil e rápida. E para auxiliar ainda mais o entendimento do que está sendo processado, as tarefas são executadas na ordem em que são escritas. Todos os nossos exemplos listados acima foram baseados na linguagem simples do Ansible.
O Ansible funciona em cima de uma arquitetura sem a presença de agentes e não necessita de uma infraestrutura de segurança customizada, pois ele apenas utiliza SSH para se conectar com os servidores e executar as tarefas. Outra característica bem interessante desta ferramenta são as suas integrações. Você pode provisionar, gerenciar ambientes nas principais nuvens públicas do mercado como Amazon, Azure e Google. A integração também vale para nuvens privadas como o OpenStack, VmWare e possui integração inclusive com ambientes Windows.
Aqui na School of Net, temos um excelente conteúdo de como iniciar a utilizar esta incrível ferramenta de automação de TI, onde abordamos os principais conceitos sobre automação de TI, a como instalar e configurar o Ansible e demonstramos um exemplo prático simples de como automatizar a implantação de um servidor web.
Conclusão
Saia da sua zona de conforto, mude seus conceitos sobre gerenciamento de TI e se você quiser continuando trabalhando com infraestrutura, você precisa aprender a trabalhar a infraestrutura como código. Inicie com o Ansible e você vai ver que não é nenhum bicho de sete cabeças e pensar: Por que eu não comecei com isso antes? Eu agradeço todo dia por conhecer esta nova forma de trabalho e logo logo você vai se sentir como eu. Fique ligado nos nossos próximos artigos sobre Infraestrutura como código. Até a próxima!!