O Terraform é uma ferramenta de software de infraestrutura como código aberto usada para provisionar infraestrutura em plataformas de nuvem como AWS, Azure, DigitalOcean, etc. Se você está considerando uma carreira em nuvem ou DevOps, o Terraform é a ferramenta que você deve começar a aprender.
Mas antes de começar a aprender o Terraform, você deve ter um bom entendimento de Infraestrutura como Código (IaC) — o conceito no qual o Terraform se baseia. Como o Terraform é uma ferramenta de provisionamento de infraestrutura em nuvem, também é importante ter um bom entendimento de Cloud Computing.
Sobre o Terraform
O Terraform não é uma linguagem de programação, mas empresta conceitos como looping, modularização, operadores, etc. de linguagens de programação.
Variáveis
Assim como as linguagens de programação, o Terraform possui variáveis e valores. Variáveis são nomes usados para armazenar um ou mais valores. Todos os valores têm tipos que especificam onde esse valor pode ser usado. A seguir estão os tipos disponíveis no Terraform:
- string - Uma sequência de caracteres Unicode representando algum texto. Por exemplo, texto = “Olá”.
- number - Um valor numérico. Por exemplo, num= 1 ou num = 1,3.
- bool - Um valor booleano, verdadeiro ou falso. Por exemplo, b = falso
- lista ou tupla - Uma sequência de valores, como [“a”, “b”]. Os elementos em uma lista ou tupla são identificados por números inteiros consecutivos, começando com zero. Por exemplo, l = [“a”, “b”].
- map ou object - Um grupo de valores identificados por rótulos nomeados ou pares de valores-chave. Por exemplo, m = {“a” = 1, “b” = 2}
- null - Se você definir um argumento de um recurso ou módulo como nulo, o Terraform se comporta como se você o tivesse omitido completamente. Por exemplo, r = null
Como definir variáveis no Terraform
É uma boa prática declarar variáveis em um arquivo chamado variables.tf
. Aqui .tf
representa um arquivo terraform. Para declarar uma variável, use a seguinte sintaxe:
variable "Nome da Variável" {
type = string
default = "Valor"
}
Mas você deve estar se perguntando, se todas as variáveis estiverem em variables.tf
, como eles estão sendo utilizados na lógica principal (ou main.tf
)?
Simples te respondo: Variáveis de entrada
Dentro do módulo que declarou uma variável, seu valor pode ser acessado usando a sintaxe: var.<nome-da-variável>
.
resource "cloud_instance" "example" {
name = var.variable-name
}
As variáveis de entrada são criadas por um variable
bloco, mas você as referencia como atributos em um objeto chamado var
.O valor atribuído a uma variável só pode ser acessado em expressões dentro do módulo onde ela foi declarada.
Módulos
Módulos são equivalentes a bibliotecas de linguagens de programação. Eles contêm código de infraestrutura que pode ser reutilizado. Toda configuração do Terraform tem pelo menos um módulo, conhecido como módulo raiz
.
Módulos de chamada
É uma boa prática criar módulos filhos ou bibliotecas de infraestrutura que possam ser usadas em vez de escrever todo o código do zero. Chamar um módulo filho significa incluir todo o código desse módulo no diretório de chamada. Código para chamar um módulo:
module "alias" {
source = "./appModule"
app-name = "myApp"
}
Um módulo que inclui um module
bloco é o módulo de chamada do módulo filho. O rótulo “alias” imediatamente após a module
palavra-chave é um nome local, que o módulo chamador pode usar para se referir a esta instância do módulo. Entre {
e}
estão os argumentos para o módulo. O source
argumento é obrigatório para todos os módulos. É o passado onde o módulo filho está localizado.
Ao chamar um módulo, é importante fornecer valores para quaisquer variáveis presentes no módulo filho. O app-name
é uma variável cujo valor o módulo de chamada está definindo.
Acessando os valores de saída dos módulos
Um módulo filho pode usar valores de saída para expor um subconjunto de seus atributos de recurso a um módulo pai.
Declarando um valor de saída
Cada valor de saída exportado por um módulo deve ser declarado usando um bloco output
:
output "app-Name-outputValue" {
value = "myApp"
}
#code of child module
Usando o valor de saída em outro módulo:
resource "cloud_instance" "example" {
# ...
instances = module.alias.app-name
}
#code in call module
Contar
count
permite provisionar várias instâncias de infraestrutura usando um único bloco de código de configuração.
resource "cloud_instance" "server" {
count = 4 # create 4 servers
Name = "Server-${count.index}+1"
}
count.index
o número de índice distinto começa com "0" e corresponde à instância.
O Terraform permite que os usuários definam e provisionem uma infraestrutura usando uma linguagem de configuração de alto nível conhecida como Hashicorp Configuration Language (HCL) ou, opcionalmente, JSON. O Terraform oferece suporte a vários provedores de infraestrutura em nuvem, como Amazon Web Services , IBM Cloud (anteriormente Bluemix ), Google Cloud Platform , Linode , Microsoft Azure , Oracle Cloud Infrastructure ou VMware vSphere , bem como OpenStack . Eles podem ser usados para agendar dinamicamente contêineres Docker, Hadoop, Spark e muitas outras ferramentas de software.
Fontes onde pesquisei esse conteúdo:
Top comments (1)
Bacana demais esse post, Jhony! Excelente para quem está iniciando e quer ter uma noção sobre a ferramenta. 😀
Eu já trabalho com Terraform há alguns anos e também escrevi um post sobre como essa ferramenta funciona, para o que serve, como é o fluxo de trabalho, etc.
Vou deixar o link aqui para quem quiser conferir:
edukti.com/terraform
Abraço!