DEV Community

Jhony Walker
Jhony Walker

Posted on

Terraform - Entendendo o que é isso

Logo

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" 
}
Enter fullscreen mode Exit fullscreen mode

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 
}
Enter fullscreen mode Exit fullscreen mode

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" 
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Usando o valor de saída em outro módulo:

resource "cloud_instance" "example" { 
  # ... 

  instances = module.alias.app-name 
} 
#code in call module
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode

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:

Latest comments (1)

Collapse
 
srgfrancisco profile image
Sergio Francisco

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!