Pular para o conteúdo principal

O que é o Terraform? Comece a usar a infraestrutura como código

Leia nosso guia passo a passo para iniciantes sobre o uso do Terraform e saiba como automatizar e gerenciar com eficiência sua infraestrutura do Azure, AWS e Google Cloud.
· 10 min leer

Explore com IA

A infraestrutura como código (IaC) é um processo que automatiza o provisionamento e o gerenciamento da infraestrutura por meio de código. Embora a configuração física do hardware e as ferramentas de configuração interativa possam ser usadas para provisionar a infraestrutura, a IaC oferece várias vantagens, como controle de versão, repetibilidade e dimensionamento. Uma das principais ferramentas de IaC disponíveis é o Terraform, uma solução desenvolvida pela HashiCorp em 2014 e usada por mais de 500.000 organizações em todo o mundo. Vamos nos aprofundar em como o Terraform funciona e como usá-lo para operações modernas de TI.

Ao começarmos a aprender sobre o Terraform, saiba que a familiaridade com pelo menos um dos principais provedores de nuvem (AWS, Azure, Google Cloud etc.) é um pré-requisito, pois o Terraform é usado para gerenciar a infraestrutura de nuvem. Nosso curso Understanding Cloud Computing (Entendendo a computação em nuvem ) oferece uma base sólida se você for novo na computação em nuvem.

O que é o Terraform?

O Terraform é uma ferramenta de código aberto que permite que você defina os componentes da infraestrutura e seus relacionamentos usando uma linguagem de configuração de alto nível.

Nos arquivos de configuração legíveis por humanos do Terraform, você pode especificar o estado desejado da sua infraestrutura, e o Terraform automaticamente descobre como chegar a esse estado. Esses arquivos podem ser versionados, compartilhados e reutilizados para fornecer uma maneira consistente de gerenciar sua infraestrutura, desde recursos de computação e armazenamento até recursos de DNS e SaaS.

O Terraform pode ser usado com vários provedores de nuvem, em infraestruturas de várias nuvens e em ambientes locais.

Principais recursos do Terraform

Vamos dar uma olhada mais de perto nos aspectos fundamentais que diferenciam o Terraform: 

HashiCorp Configuration Language

O Terraform usa uma linguagem de alto nível chamada HCL (HashiCorp's Configuration Language), projetada especificamente para definir a infraestrutura como código. As linguagens de configuração de alto nível implementam uma sintaxe declarativa que é abstrata e fácil de usar em comparação com scripts de baixo nível e configuração manual. Você pode ter encontrado linguagens de alto nível antes, em arquivos YAML ou JSON. 

A HCL segue uma estrutura de blocos, em que cada bloco aninhado representa recursos e suas configurações. Os recursos são definidos explicitamente com nomes e atributos.

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

Plano de execução

Depois que você definir o estado desejado da sua infraestrutura, o Terraform gerará um plano de execução. Esse plano listará as etapas que o Terraform precisa realizar para atingir esse estado, para que você possa revisar as alterações antes que elas sejam aplicadas. Verificar o plano antes de você aplicar as alterações evitará modificações indesejadas, como a exclusão de recursos.

Gerenciamento do estado

O Terraform mantém um arquivo de estado que programa automaticamente o estado atual da sua infraestrutura e serve como fonte de verdade ao determinar quais mudanças precisam ser feitas. Por padrão, ele é armazenado localmente e chamado terraform.tfstate. 

Provedores

Os provedores são plug-ins que interagem com APIs de plataformas de nuvem e outros serviços e permitem que o Terraform gerencie uma ampla variedade de recursos. Os provedores oficiais são desenvolvidos e mantidos pela HashiCorp e seus parceiros confiáveis, como AWS, Azure, Google Cloud, Github, Datadog, etc. Há também plug-ins desenvolvidos pela comunidade, que podem ser encontrados no Terraform Registry ou no Github.

Gráfico de recursos

O Terraform cria um gráfico de recursos que mostra os recursos da sua infraestrutura e as relações entre eles. Esse gráfico permite que o Terraform gere planos de forma eficaz, manipule dependências entre recursos e garanta que os recursos sejam criados, atualizados e excluídos na ordem correta. Esse gráfico também é uma ótima maneira de visualizar sua infraestrutura e entender o impacto das alterações que você pretende fazer. 

Exemplo de Terraform Resource Graph, mostrando os recursos da AWS e as relações de dependência entre eles

Exemplo de gráfico de recursos. Fonte: Documentação da HashiCorp

Primeiros passos com o Terraform

Vamos examinar nosso primeiro fluxo de trabalho do Terraform. Se você é novo no DevOps ou na computação em nuvem em geral, recomendo que faça nossos cursos Understanding Cloud Computing e Introduction to DevOps antes de prosseguir.

Instalação e configuração

Neste tutorial do Terraform, criaremos recursos no AWS. Se você quiser acompanhar e não tiver uma conta, acesse a AWS e inscreva-se.

  1. Faça o download do Terraform no site oficial. Escolha o binário correto para seu sistema operacional e siga as instruções de instalação.
  2. Depois que você tiver instalado o Terraform, abra uma nova janela do Terminal e execute terraform -version para verificar se o software está instalado corretamente. 
  3. Instalar a CLI do AWS
  4. Configure a CLI do AWS executando aws configure em seu terminal. Você será solicitado a inserir o ID da chave de acesso, a chave de acesso secreta, o nome da região padrão e o formato de saída padrão. O Terraform deve ser capaz de acessá-los automaticamente.

Primeira configuração do Terraform

Crie um novo diretório e seu primeiro arquivo de configuração. Vamos chamá-lo de main.tf e informar ao Terraform que queremos criar uma instância do AWS EC2. O código, escrito em HCL, tem a seguinte aparência:

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

Inicialização do projeto

Agora, vamos inicializar nosso projeto Terraform executando o seguinte comando:

$ terraform init

Esse é um comando único e fará o download dos plug-ins de provedor necessários. Você não precisará executá-lo para as alterações subsequentes. 

Planejar

Agora, queremos gerar nosso plano de execução. Lembre-se de que o plano destacará as alterações que o Terraform precisará fazer para atingir o estado desejado (neste caso, uma instância do EC2 em execução). Você pode correr:

$ terraform plan

Você deverá ver algo parecido com isto:

Terraform will perform the following actions:

  # aws_instance.example will be created
  + resource "aws_instance" "example" {
      + ami                           = "ami-0c55b159cbfafe1f0"
      + instance_type                 = "t2.micro"
      ...
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Aplicar

Revisamos o plano e agora decidimos executá-lo e provisionar os recursos. Em seu terminal, execute:

$ terraform apply

Você será solicitado a confirmar a ação. Digite "yes" para continuar.

Do you want to perform these actions? 
Terraform will perform the actions described above. 
Only 'yes' will be accepted to approve. 
Enter a value: yes 

 Você deverá ver o seguinte:

aws_instance.example: Creating... 
aws_instance.example: Still creating... [10s elapsed] aws_instance.example: 
Creation complete after 15s [id=i-0abcdef1234567890] 

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

 Parabéns, você provisionou sua primeira instância do EC2 no AWS usando o Terraform!

Benefícios do uso do Terraform

Mencionamos anteriormente que o uso do Terraform oferece muitos benefícios, como consistência e repetibilidade, e uma taxa reduzida de erros humanos graças aos planos de execução. 

Outros benefícios incluem:

  • Provisionamento rápido: O Terraform pode criar e atualizar recursos em paralelo, o que é particularmente útil para criar rapidamente ambientes de desenvolvimento, teste e preparação.
  • Aumento da colaboração: Em conjunto com um sistema de controle de versão como o Git, o Terraform é uma ótima maneira de aumentar a colaboração e a transparência da sua infraestrutura. As alterações podem ser revisadas, aprovadas e programadas da mesma forma que o código do aplicativo.
  • Recuperação eficiente de desastres: Se algo der errado, o Terraform pode recriar rapidamente toda a infraestrutura do zero usando os mesmos arquivos de configuração.
  • Suporte à comunidade: O Terraform incentiva o uso de módulos, que são configurações reutilizáveis que podem ser compartilhadas e promovem práticas recomendadas quando se trata de gerenciar a infraestrutura. O Terraform também possui uma comunidade ativa e um extenso ecossistema de provedores e módulos, o que significa que você provavelmente encontrará algo para a sua pilha de tecnologia, independentemente do seu nicho.

Casos de uso comuns do Terraform

Se você é um engenheiro de dados que está criando pipelines ou um cientista de dados que deseja implantar suas soluções na produção, o Terraform é uma ótima ferramenta para gerenciar suas necessidades de infraestrutura. Aqui estão alguns dos casos de uso mais comuns:

Gerenciamento de várias nuvens

Nem sempre é fácil gerenciar a infraestrutura que abrange vários provedores de nuvem. O Terraform permite que você faça exatamente isso com uma única ferramenta. Além disso, o Terraform pode gerenciar recursos no local, o que o torna uma solução ideal para organizações que operam em um ambiente híbrido.

Fluxos de trabalho de CI/CD

O Terraform se integra bem aos fluxos de trabalho de CI/CD, o que significa que você pode implantar sua infraestrutura como parte do processo de entrega de software. Você também pode criar e destruir automaticamente ambientes de visualização, desenvolvimento, teste ou preparação, quando necessário.

Clusters de Kubernetes

O Terraform pode gerenciar clusters do Kubernetes em diferentes provedores de nuvem, como AWS (EKS), Azure (AKS) ou GCP (GKE). Isso inclui a configuração da infraestrutura necessária, o gerenciamento dos recursos do Kubernetes dentro do cluster e o dimensionamento dos clusters com base nas demandas de carga de trabalho.

Terraform vs. Outras ferramentas de IaC

Outras ferramentas populares de IaC incluem Ansible, Chef, Puppet e AWS CloudFormation. Cada ferramenta tem seus pontos fortes e fracos. Dê uma olhada:

RecursoTerraformAnsibleChefe de cozinhaMarioneteCloudFormation
Código abertoSimSimSimSimNão
Sintaxe declarativaSimNãoNãoSimSim
Suporte a várias nuvensSimSimSimSimNão, somente AWS
Gerenciamento do estadoSimNãoNãoSimSim
Planos de execuçãoSimNãoNãoNãoNão
Gerenciamento de dependênciasSimLimitadaLimitadaSimSim

Como podemos ver, embora todas essas ferramentas sejam poderosas por si só, o Terraform se destaca por seu conjunto abrangente de recursos. No entanto, essa lista não é exaustiva, e cada ferramenta atende a casos de uso ligeiramente diferentes, dependendo dos requisitos. Por exemplo, o Ansible e sua natureza processual são adequados para o gerenciamento de configurações e tarefas ad-hoc.

Conclusão

Nos últimos 10 anos, o Terraform ajudou milhares de organizações a gerenciar sua infraestrutura de TI. Com sua abordagem declarativa, recursos de automação e suporte para ambientes com várias nuvens, o Terraform se tornou uma das ferramentas de IaC mais populares e, sem dúvida, continuará sendo um dos principais participantes no espaço de gerenciamento de infraestrutura, à medida que a adoção da nuvem continua a crescer. 

Agora que você entende os conceitos básicos do Terraform, pode se aprofundar em configurações mais avançadas e cenários da vida real. Dê uma olhada nos tutoriais do Terraform da HashiCorp para saber como usar o Terraform em tarefas e casos de uso comuns, ou confira nossa postagem no blog 14 Essential Data Engineering Tools to Use in 2024 para entender como o Terraform se encaixa no kit de ferramentas do engenheiro de dados.

Perguntas frequentes

O Terraform é adequado para projetos de pequena escala ou é principalmente para uso corporativo?

O Terraform é uma ferramenta útil, independentemente do tamanho do seu projeto! Não importa se você tem 5 recursos para gerenciar ou 1.000, com certeza verá os benefícios.

Quanto custa o Terraform?

O Terraform é de código aberto e de uso gratuito, mas lembre-se de que seu(s) provedor(es) de nuvem cobrará(ão) de você pelos recursos provisionados e gerenciados por meio do Terraform.

O Terraform pode gerenciar bancos de dados e outros serviços com estado?

Sim, o Terraform pode gerenciar bancos de dados e outros serviços com estado. Você pode definir instâncias, clusters e configurações em seus arquivos IaC.

Como o Terraform lida com segredos e informações confidenciais nos arquivos de configuração?

O Terraform incentiva as práticas recomendadas para lidar com segredos, oferecendo suporte a variáveis de ambiente, variáveis criptografadas e integrações com serviços de gerenciamento de segredos, como o HashiCorp Vault ou o AWS Secrets Manager.

Temas

Relacionado