O Terraform é uma ferramenta open source e extensível que permite o gerenciamento e provisionamento da infraestrutura como código (IaC). Desenvolvida e mantido pela HashiCorp, a ferramenta utiliza uma linguagem simples e declarativa, permitindo desta forma o provisionamento desde uma simples VM até uma infra completa, passando por recursos de rede, segurança, banco de dados, balanceadores de carga e outros.
Nas palavras da própria HashiCorp:
O Terraform é usado para criar, gerenciar e atualizar recursos de infraestrutura, como máquinas físicas, VMs, comutadores de rede, contêineres e muito mais. Quase qualquer tipo de infraestrutura pode ser representado como um recurso no Terraform.
> Site oficial da ferramenta: https://www.terraform.io
Direto ao ponto
O funcionamento da ferramenta é muito simples, como ela foi construída utilizando a linguagem GoLang, suas dependências estão contidas no próprio binário, desta forma basta:
- Baixar uma das versões disponíveis para MacOS, FreeBSD, Linux, OpenBSD, Solaris ou Windows; e
- Opcionalmente registrar o binário na variável PATH, deste modo será possível realizar a chamada ao executavel a partir de qualquer local do sistema operacional.
> Download da ferramenta: https://www.terraform.io/downloads.html
> O código produzido ao longo deste material pode ser baixado em: https://github.com/fabiojaniolima/terraform-examples
Que os jogos comecem
Para os propósitos gerais deste material irei utilizar como exemplo a nuvem pública Linode, entretanto, todo o conhecimento aqui transmitido pode ser reaproveitado para implantações na DigitalOcean, AWS, Azure, Google Cloud, VMware vSphere, Docker e outros.
Os serviços de nuvem apresentados acima oferecem um crédito inicial para você testar os serviços contidos no catalogo. Dê uma “pesquisadinha” no Google para achar cupons de desconto/crédito 😉
Preparando o terreno
Iremos preparar o terreno tendo como base sólida a documentação oficial. Para simplificar vamos seguir por etapas:
1- Acessar a lista de providers:
All Providers: https://www.terraform.io/docs/providers/index.html
2 – Procure e clique em Linode. Também é possível ignorar o passo anterior ao utilizar o link direto:
Linode Provider: https://www.terraform.io/docs/providers/linode/index.html
A página apresentada fala rapidamente a respeito do provider e trás algumas informações como exemplo de uso (Example Usage) e referencias de configuração (Configuration Reference). Conforme podemos observar no tópico Configuration Reference, o token é uma configuração obrigatória, ou seja, precisamos obter esse dado junto ao provedor, que neste caso é o Linode.
Supondo que você já acessou o site oficial do provedor em http://linode.com e possui um cadastro ativo, vamos ao passo seguinte.
3 – Para obter um token, dentro do painel cliquem em seu Username > My Profile > API Tokens > Add a Personal Access Token
:

Ao clicar em Add a Personal Access Token
uma lista de opções será exibida:

Vejamos as opções disponíveis:
- Label: um título livre para identificar seu token no painel de listagem;
- Expiry: prazo de validade do token. Como este é um ambiente de teste estou criando um token que expira em 1 mês, porém, temos opções com prazos maiores ou token que nunca expira;
- Access: determina o nível de acesso a cada recurso. Observe que ativei somente o recurso Linodes, este é justamente o recurso que permite provisionar e gerenciar os VPS (VMs virtuais), para os propósitos deste material é suficiente.
Lembre-se que é uma questão de segurança ativar somente os recursos que de fato precisamos, isso evita abrir brechas desnecessárias caso este token seja “sequestrado”. Essa abordagem é valida independente do provedor escolhido.
E aqui está nosso Token:

O Token ID gerado será utilizado mais adiante, por este motivo é importante que você grave o valor apresentado uma vez que não há como recuperá-lo mais tarde. Caso venha a perder este token ou o mesmo for comprometido, será necessário ir ao painel de gestão, revogar o token e gerar um novo.
Declarando a infraestrutura como código
Nossa infra será declarada tendo como base 4 arquivos, isso irá garantir organização e flexibilidade. Os arquivos são:
- variables.tf: declaração das variáveis de input
- main.tf: declaração dos objetos da infraestrutura
- outputs.tf: define quais informações a respeito de cada elemento devem ser retornada e armazenada no estado do projeto
- terraform.tfvas: um dos possíveis locais onde podemos definir os valores das variáveis declaradas em variables.tf
Arquivo variables.tf
Crie o arquivo de definição de variáveis variables.tf
e cole o código abaixo:
variable "token" {
type = string
description = "Informe o Linode API Access Token"
}
variable "instances_name" {
type = list(string)
default = ["server-1"]
description = "Nome da(s) instância(s)"
}
variable "region" {
type = string
default = "us-southeast"
}
variable "root_pass" {
type = string
description = "Informe a senha do usuário root"
}
variable "authorized_keys" {
type = list(string)
default = []
description = "Zero ou mais chaves RSA para autenticação SSH"
}
variable "identification_tags" {
type = list(string)
default = []
description = "Zero ou mais tags utilizadas para identificação do elemento"
}
Continue lendo em: https://lnkd.in/dBfSEDX