>> Apresentação e considerações

Fala ChurrOpeiros,

Nesse artigo vamos falar de mais um ferramenta incrível e importante para o ecossistema DevOps, espero de coração que esse artigo seja esclarecedor e fácil entendimento.

Na sequência teremos outro artigo totalmente prático mostrando como provisionar uma instância EC2 na AWS já com Security Group, Tags, UserData instalando um Nginx e tornando-o acessível pela web

Let`s go!!!

>> IaC – Infraestrutura como Código

Hoje quando falamos do conceito de Infra Ágil englobamos várias vertentes que se unem com o propósito de fazer entregas rápidas e garantidas, conseguimos isso com automação, controle de versionamento, gestão de configuração, orquestração, testes automatizados, serviços de descoberta, entre muitos outros.

Um princípio que entendo ser importante para essa nova cultura é que o desenho de arquitetura de uma solução seja “executável”, o PowerPoint/Visio por exemplo aceita tudo o que você colocar, porém não quer dizer que aquilo que foi arquitetado vai funcionar de fato, sem contar nas modificações que se fazem no decorrer de um projeto em que os documentos de arquitetura acabam não sendo atualizados e as referências são perdidas.

No IaC A infra-estrutura é descrita usando uma sintaxe de configuração de alto nível. Isso permite que um modelo de seu datacenter seja versionado e tratado como você faria com qualquer outro código. Além disso, a infra-estrutura pode ser compartilhada e reutilizada, ou seja, todos os recursos de Infraestrutura que você irá montar serão descritos em um código que ao ser executado terá como resultado aqui que foi descrito.

>> O que é o Terraform

O Terraform é uma ferramenta para construir, alterar e controlar a infraestrutura de forma segura e eficiente. O Terraform pode gerenciar provedores de serviços existentes e populares como OpenStack, Azure, AWS, Digital Ocean, e mais uma porrada, bem como soluções internas personalizadas.

Os arquivos de configuração do Terraform descrevem os componentes necessários para executar um único aplicativo ou todo o seu datacenter, ele gera um plano de execução descrevendo o que ele fará para alcançar o estado desejado e, em seguida, executá-lo para construir a infra-estrutura descrita. À medida que a configuração muda, o Terraform é capaz de determinar o que mudou e criar planos de execução incrementais que podem ser aplicados.

A infraestrutura que o Terraform pode gerenciar inclui componentes de baixo nível, como instâncias de computação, armazenamento e redes, bem como componentes de alto nível, como entradas DNS, recursos SaaS, etc.

Com relação a ferramenta podemos comparar o Terraform com o CloudFormation da AWS.

Fonte: https://www.terraform.io/intro/index.html

>> Download e instalação

Baixar e instalar o Terraform é uma tarefa que chega a ser ridícula de tão simples que é, pois ele é apenas um binário escrito em “go” que já tem tudo o que precisa, o simples fato de baixá-lo já permite que com começemos a utilizá-lo

  1. Acesse o site, e baixe o binário de acordo com a versão do seu sistema operacional
    Terraform Download 
  2. Realize a descompactação
    Acesso o diretório onde o arquivo foi baixado e descompacte o zip.

    ~$ unzip terraform_0.9.11_darwin_amd64.zip
  3. Adicione o binário no PATH
    Das duas, uma, ou escolhemos um diretório específico para guardar o binário do terraform, e em seguida adicionamos o local na variável PATH, ou simplesmente (o que eu geralmente faço) envie o binário para algum local que já esteja no PATH

    **Vamos identificar quais são os PATHs carregados
    
    ~$ echo $PATH
    /Users/rodrigo/Library/Python/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
    
    **No meu caso eu movi para o diretório abaixo:
    
    ~$ mv terraform /usr/local/bin/
  4. Validando se está ok
    Agora o comando terraform pode ser executado de qualquer local

    ~$ terraform version
    Terraform v0.9.11

Basicamente, se você chegou até aqui com sucesso, o terraform está pronto para uso!

>> Conhecendo um pouco das opções

Simplesmente ao digitar terraform já é exibido o help do comando

~$ terraform
Usage: terraform [--version] [--help]  [args]

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.

Common commands:
    apply      Builds or changes infrastructure
    console    Interactive console for Terraform interpolations
    destroy    Destroy Terraform-managed infrastructure
    env        Environment management
    fmt        Rewrites config files to canonical format
    get        Download and install modules for the configuration
    graph      Create a visual graph of Terraform resources
    import     Import existing infrastructure into Terraform
    init       Initialize a new or existing Terraform configuration
    output     Read an output from a state file
    plan       Generate and show an execution plan
    push       Upload this Terraform module to Atlas to run
    refresh    Update local state file against real resources
    show       Inspect Terraform state or plan
    taint      Manually mark a resource for recreation
    untaint    Manually unmark a resource as tainted
    validate   Validates the Terraform files
    version    Prints the Terraform version

All other commands:
    debug         Debug output management (experimental)
    force-unlock  Manually unlock the terraform state
    state         Advanced state management

 Agora caso você precise saber o help/opções de um comando específico, basta digitar o subcomando com a opção -h

~$ terraform plan -h
Usage: terraform plan [options] [DIR-OR-PLAN]

  Generates an execution plan for Terraform.

  This execution plan can be reviewed prior to running apply to get a
  sense for what Terraform will do. Optionally, the plan can be saved to
  a Terraform plan file, and apply can take this plan file to execute
  this plan exactly.
...
...

>> O que vamos aprender primeiro?

No nosso próximo artigo vamos focar nos seguintes recursos:

terraform plan

Ao executar o plan, o terraform irá mostrar o plano de execução, ou seja, o ele “simula”uma execução do que foi descrito e exibe as informações do que será criado ou modificado

terraform apply

O apply realmente efetiva a mudança, seja para construção ou alteração do estado da Infraestrutura

terraform destroy

O destroy faz isso mesmo que o nome diz, ele destrói bruscamente tudo o que foi criado pelo terraform apply, ou seja, se havia um estado declarado que executado com o plan o deploy reverte deletando todos os recursos.

>> Conclusão

Bom, o terraform é realmente incrível, e não temos muitas documentações dele disponíveis em português, espero que esse artigo tenha alcançado seu objetivo que é apresentar e fornecer uma visão base a respeito do terraform para que possamos prosseguir com outros Posts já voltados para a parte prática.

Obrigado a todos, não deixem de compartilhar e divulgar esse conteúdo para que mais pessoas possam ter acesso.

Valeu!!!