Terraform é uma ferramenta open source de orquestração de infraestrutura, com uma arquitetura modular baseada em plugins, escrito em Golang, assim como boa parte das ferramentas que o cercam. Segue o Tao da Hashicorp que por sua vez tem como inspiração a filosofia UNIX (faça uma coisa e faça bem).
O Terraform abstrai e simplifica a automação da infraestrutura em nuvem, transformando a interação com os cloud providers em uma linguagem declarativa próxima à humana, tornando o processo de provisionamento e gerenciamento de infraestrutura reproduzível, seguro e previsível.
O Terraform traz consigo uma maneira diferente de construir infraestrutura, ele tem como pilar base a infraestrutura como código, e reforça os conceitos de infraestrutura imutável, partindo do conceito que evita a microgerência de máquinas, assim possibilitando elasticidade do ambiente para suprir as demandas de negócio.
Inicialmente esses dois conceitos podem assustar quem vem da infraestrutura tradicional, mas logo se torna fácil de reconhecer os benefícios que a ferramenta te possibilita.
Sem mais recursos perdidos ou desorganizados consumindo dinheiro, auditoria simplificada, planejamento de mudanças eficiente e etc, são só alguns dos benefícios do “Terraform way of work”.
O Terraform tem uma maneira simples mas poderosa de se trabalhar, seu workflow consiste basicamente de:
- Codificar > Aplicar na infraestrutura real > Salvar estado > Repetir
Dado um determinado cloud provider, você escolhe o recurso com qual deseja trabalhar e utiliza a linguagem HCL para trazer seu requisito para o mundo real, após o código escrito, o Terraform vai aplicar, isto e, transformar a abstração HCL em chamadas a API do cloud provider e criar os recursos efetivamente, depois o Terraform salva o estado de tudo isso para posterior consulta, mapeando recursos em código para recursos existentes. Esse e seu ponto base, definir infraestrutura como código, o que possibilita os mesmos tratamentos que um software recebe, incluído testes, versionamento, CI/CD e etc.
Uma forte recomendação do Terraform e trabalhar com infraestrutura imutável, parar de “cuidar” das suas máquinas, gerenciá-las de forma similar como os containers, ou seja, de forma descartável. Esse paradigma traz uma série de vantagens, por exemplo:
- A garantia de estados 100% testados: Considerando que suas máquinas sempre utilizem uma imagem, elas não iram ter um “drift de configuração”, enquanto elas existirem, elas vão ter a um único estado. Isso evita irregularidades que afetam a execução de aplicações e que são complexas de depurar em um grande ambiente. Num ambiente assim as imagens são geradas por ferramentas como o Packer, configuradas com uma ferramenta de gerência de configuração, como o Ansible e testados antes de ir para produção.
- Elasticidade: Trabalhando com esse paradigma você tem infinta liberdade para escalar seu ambiente, de maneira rápida e descomplicada.