Primeiras aulas do curso Ansible: Sua infraestrutura como código

Ansible: Sua infraestrutura como código

Primeiros passos com Ansible - Introdução

Olá! Meu nome é Alexander Jardim, sou especialista DevOps, atuante na área há muito tempo. Neste curso, você aprenderá como escrever Infraestrutura com código usando o Ansible.

A importância de fazer infraestrutura com código é que se trata da base da metodologia DevOps. Se você já trabalha com essa área ou quer começar a atuar nela, precisa deste conhecimento.

Com Ansible escreveremos um playbook, para instalarmos uma aplicação completa com banco de dados, Webserver, além do próprio sistema da aplicação. Depois, converteremos o playbook em uma série de roles reutilizáveis, para entendermos como se separa este código e como ele pode ser usado como uma biblioteca extensível para outros projetos.

Até mais!

Primeiros passos com Ansible - Por que usar Ansible

O primeiro assunto que abordaremos no curso é entender por que adotar o Ansible? Ao falarmos de DevOps, precisamos falar da infraestrutura como um todo.

O DevOps busca maneiras de encurtar o seu ciclo de feedbacks entre os times de desenvolvimento e estrutura, tornar o processo com repetições tanto do lado no lado da infraestrutura - como já é feito no lado do desenvolvimento. Se pensarmos em uma forma simples de definir DevOps, trata-se de levarmos a cultura ágil para a cultura de infraestrutura e integrá-las.

O nome vem exatamente da junção dos mundos "Dev" e "Ops", transformando-os em um único (ou o mais próximo disso).

É natural que exista uma diferença entre a maneira como as empresas trabalham essa ideia, de como ela é aplicada, não existe uma "bala de prata" ou um formato fixo e perfeito. Cada cultura organizacional entenderá qual é a melhor forma de aplicar os princípios de DevOps.

Ao falarmos de DevOps, conseguiremos automatizar tudo aquilo que é feito na infraestrutura e garantir o estado dos servidores.

Como isso era feito antes de se falar de infraestrutura no código? O profissional de infra criava diversos scripts para modificar o ambiente ou fazia configurações manuais. Imagine a situação de lidar com centenas de servidores e ter que configurar todos eles.

Era difícil garantir o estados das máquinas da mesma forma. O princípio de infraestrutura como código nasce para descrevermos o estado no qual precisamos que os servidores estejam. O Ansible é uma ferramenta para garantirmos esse estado.

Nós escreveremos uma série de scripts que garantem que os servidores controlados ficarão em um determinado estado. Vamos analisar superficialmente a topologia do Ansible.

topologia do ansible

Nós temos uma máquina de controle, que é o servidor onde o Ansible será executado. Basta tê-lo instalado, lembrando que este é baseado em Python (que deve estar igualmente presente na sua máquina). Temos ainda os hosts que devem ser controlados.

Diferente de algumas tecnologias de Infraestrutura como código, o Ansible não é dependente da instalação nas máquinas que devem ser configuradas. Desde que elas tenham uma conexão SSH funcional e que tenham Python instalado, a maioria dos servidores que você usa em produção e desenvolvimento (sempre encontraremos os dois, Python e SSH).

Principalmente quando falamos em Linux, isso se torna obrigatório. Conseguimos alterar o estado da máquina via conexão SSH, sem que seja necessário entrar nelas e digitar algum comando. O Ansible será responsável por fazer isso.

O seu trabalho é desenvolver os scripts que o Ansible usa - neste caso, falamos de três modelos de script:

Nos aprofundaremos sobre esses três conjuntos de arquivos durante o curso. Eles serão usados na configuração dos hosts, a partir da máquina de controle.

Além disso, não existe um número limite de máquinas. É indiferente se você tem no seu inventário uma ou mil máquinas, existem diferentes formas de montar esse inventário (que se trata da lista de máquinas a serem configuradas).

infraestrutura como codigo

No curso, usaremos o ambiente de desenvolvimento que representará nossa máquina de controle, na qual instalaremos o Virtual Box e o Vagrant, para podermos construir a máquina virtual que simulará o host que iremos configurar.

De dentro da máquina de desenvolvimento - que no momento representa a máquina de controle -, nós instalaremos o Ansible. Com ele, será configurada a máquina virtual, montando inventário, playbook e roles.

Instalaremos um Wordpress no estudo de caso, para isso será necessário ter MySQL, Apache e PHP funcionando na máquina virtual que é o host controlado.

infraestrutura

A seguir, montaremos o ambiente desenhado.

Primeiros passos com Ansible - Instalando Ansible e o primeiro comando

Anteriormente, explicamos o que é infraestrutura como código, cultura DevOps e o papel do Ansible. Comentamos como será nosso ambiente de desenvolvimento para o curso inteiro.

Nós vamos usar a máquina de desenvolvimento para simular a máquina de controle, e dentro da máquina de desenvolvimento, criaremos uma máquina virtual usando Virtual Box e Vagrant. Esta máquina será configurada para instalar o nosso estudo de caso, para isto precisaremos ter funcionando na nossa máquina Ansible.

No Mac OS X, precisaremos apenas usar o brew. Eu já tenho instalado os pacotes que são o Python e o próprio Ansible na minha máquina.

Se você ainda não os tiver, quando abrir o Install, eles serão instalados e será desnecessário fazer outra configuração. Depois que rodarmos, provaremos como Python e Ansible estão funcionando.

Se você for usuário Linux, encontrará orientações para a instalação nos exercícios. O processo é bem semelhante, você terá que usar o comando apt-get em vez de brew. No mesmo link, disponilizaremos orientações para outros pacotes.

No entanto, até o momento, de acordo com a documentação, o Ansible não tem suporte para usar o Windows como máquina de controle. Se este é o seu sistema operacional, você deverá criar uma máquina virtual para gerar sua máquina de controle também. Porem, o bash do ubuntu pode ser ativado nas versões de windows 10 posteriores à atualização creators update, possibilitando a instalação e o uso de todos os comandos necessários no curso. O passo a passo pode ser encontrado no blog oficial da Microsoft: https://blogs.msdn.microsoft.com/luisdem/2016/09/01/bash-on-windows-passo-a-passo/.

Você pode baixar o VirtualBox para isso, na parte de download encontraremos os binários para cada distribuição. Vagrant está disponível no site da empresa, na seção de downloads. Nela, encontraremos um instalador para cada distribuição.

Receberemos o seguinte retorno no Terminal:

Warning: python 2.7.14 is already installed
Warning: ansible 2.4.2.0_1 is already installed
alura$ python -V
Python 2.7.10
alura$ ansible --version
ansible 2.4.2.0

Digitaremos o comando -v para saber a versão do Python e --version para identificarmos a versão do ansible.

Para prosseguirmos, precisaremos tanto do VirtualBox, como do Vagrant. Depois da instalação, basta abrir o PKG e seguir as instruções. Como eu realizei o processo na minha máquina, conseguiremos rodar o Vagrant na linha de comando. Por exemplo, veremos qual é a versão atual.

$ vagrant --version
Vagrant 2.0.1

Para termos certeza que a distribuição do Ansible está funcionando, vamos rodar o comando Ansible contra uma máquina virtual de exemplo.

$ cd wordpress_com_ansible
$ ls
Vangrantfile        provisioning.retry         world.txt
group_vars          provisioning.yml
hosts               roles

$ atom 

Nós vamos criar a nossa primeira máquina virtual, mostraremos como ela pode ser acessada e, depois, rodaremos "Hello, World" na linha de comando. Começaremos criando um arquivo chamado vagrant.file, no qual será feita a configuração da máquina virtual. Como está fora do escopo do curso ensinar Vagrant em detalhes, você encontrará um arquivo para usá-lo como base.

A seguir, disparemos a máquina virtual. Ele já determina que haverá uma máquina virtual chamada wordpress.

Vagrant.configure("2") do |config|

    config.vm.box = "ubuntu/trusty64"

    config.vm.provider "virtualbox" do |v|
        v.memory = 1024
    end

    config.vm.define "wordpress" do |m|
        m.vm.network "private_network", ip: "172.17.177.40"
    end

end

Vamos iniciar essa máquina virtual?

$ vagrant up
Bringing machine 'wordpress' up with 'virtualbox' provider...
==> wordpress: Checking if box 'ubuntu/trusty64' is up to date...

A máquina foi criada, mas aguardaremos a importação do snapshot. Talvez, na sua máquina, esse processo deve demorar um pouco mais porque será necessário baixar a imagem do Ubuntu.

Enquanto ele levanta a máquina virtual, criaremos o primeiro arquivo que será usado pelo Ansible para começar a infraestrutura completa do código.

O nome do arquivo será hosts, um arquivo de inventário onde colocaremos todas as informações necessárias para o Ansible saber como acessar as máquinas. Em seguida, vamos colocar o IP da máquina criada: 172.17.177.40. Nós também adicionaremos o grupo wordpress, cuja utilidade é informar ao Ansible para o servidor qual é a sua serventia.

Você pode, até o momento, ter a impressão de que ele não é muito útil, porém, veremos como o Ansible decide o que a sua máquina é, além de qual tipo de código será aplicado na estrutura. Salvaremos o arquivo nesse formato, e depois, rodaremos o comando ssh.

$ vagrant ssh

Nós conseguiremos verificar que a máquina existe, após limparmos a tela com o comando clear, rodaremos o comando Ansible:

$ ansible -u vagrant -i hosts -m shell -a 'echo Hello, World'

O Vagrant sempre cria um usuário chamado vagrant, além dele, passaremos o arquivo de inventário hosts e o módulo shell. Módulos são os comandos que o Ansible são capazes de rodar, o primeiro deles é responsável por executar um comando no Shell quando rodarmos o SSH na máquina. Nós queremos passar echo Hello, World.

No entanto, ao rodarmos o comando, teremos um erro porque esquecemos de informar para o Ansible contra quais grupos estamos executando determinado comando. No caso, especificaremos o grupo wordpress.

Vamos trabalhar com um usuário SSH, então, precisamos passar uma senha ou uma chave. Se disponibilizarmos a senha, não vai funcionar corretamente. Passar uma chave é uma melhor solução, faremos isso adicionando --private-key. O Vagrant criou uma chave: .vagrant/machines/wordpress/virtualbox/private_key

$ ansible -u vagrant --private-key .vagrant/machines/wordpress/virtualbox/private_key -i hosts -m shell -a 'echo Hello, World'

Nós passamos:

Agora conseguiremos executar o comando.

$ ansible wordpress -u vagrant --private-key .vagrant/machines/wordpress/virtualbox/private_key -i hosts -m shell -a 'echo Hello, World'
172.17.177.40 | SUCCESS | rc=0 >>
Hello, World

Esse retorno do Ansible significa que ele rodou um comando no servidor 172.17.177.40, e que a execução foi bem-sucedida. A saída foi Hello, World.

No entanto, é possível compreender se ele fez uma conexão SSH? Adicionaremos o parâmetro -vvvv na execução, assim iremos os assegurar. O Ansible vai ficar mais verboso quando for executado, mas conseguiremos ver exatamente o que está acontecendo. Isto é bastante útil quando estamos depurando ou desenvolvendo um script'.

$ ansible -vvvv wordpress -u vagrant --private-key .vagrant/machines/wordpress/virtualbox/private_key -i hosts -m shell -a 'echo Hello, World'

Agora a saída será mais extensa e nos informará qual é a versão e arquivos utilizados, além de como ele achou os módulos no path. Ele nos avisará, inclusive, qual usuário foi utilizado para estabelecer a conexão, além do comando SHH usado.

Depois, será mostrado como são carregados os arquivos dos comandos enviados. No fim, ainda teremos a saída simplificada nos informando que a execução foi bem-sucedida.

Se você tiver alguma dúvida sobre o que aconteceu do ponto de vista de conectividade no Ansible, caso tenha algum problema para logar, um usuário em que antes conseguimos acessar a máquina, mas não é mais possível, ou outras informações sobre problemas, o padrão -vvvv pode ser útil para ajudar a depurar.

Nossa instalação Ansible está funcionando, conseguimos nos conectar via SSH na máquina virtual criada, sabemos que ela está executando os comandos que o Ansible está pedindo. Estamos prontos para criar o playbook a seguir.

Sobre o curso Ansible: Sua infraestrutura como código

O curso Ansible: Sua infraestrutura como código possui 158 minutos de vídeos, em um total de 70 atividades. Gostou? Conheça nossos outros cursos de Infraestrutura como Código em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Infraestrutura como Código acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas