Ao longo dos anos, o desenvolvimento em nuvem passou por uma grande mudança de paradigma. Aplicações mais novas e complexas são implantadas rapidamente na nuvem para minimizar o tempo de inatividade. E, através de tudo isso, o conceito de Infraestrutura como Código e várias ferramentas emergiram para simplificar o processo de desenvolvimento de aplicações.
Você pode estar se perguntando: o que é Infraestrutura como Código? Como isso melhora o processo e a experiência de desenvolvimento, e onde o Terraform se encaixa nisso? Bem, vamos explorar tudo isso e mais neste guia. Mas antes de começarmos, aqui estão alguns pré-requisitos:
-
Conhecimento básico sobre nuvem e terminologias de nuvem
-
Acesso a um PC para implementar exemplos de código
-
Uma conta GCP
Com isso, vamos começar.
Aqui está o que iremos cobrir:
Visão Geral da Infraestrutura como Código (IaC)
Infraestrutura como código refere-se à geração de ferramentas e aplicativos de infraestrutura de nuvem com um documento de configuração baseado em código. Esse processo, quando em execução, automatiza a sequência e o processo de criação de bancos de dados, máquinas virtuais e servidores. Isso melhora a experiência do usuário, reduzindo a frequência de implantações manuais de serviços em nuvem, especialmente para vários serviços idênticos.
Existem duas abordagens distintas para infraestrutura como código: a abordagem Imperativa
e a abordagem Declarativa
.
Quando você está usando a abordagem Declarativa para geração de infraestrutura, você simplesmente detalha suas saídas esperadas/desejadas para que a infraestrutura seja gerada, e então a ferramenta de IaC que você está usando descobre como produzir essa saída.
Por outro lado, a abordagem Imperativa envolve especificar os passos exatos necessários para alcançar o estado de infraestrutura desejado. Embora a abordagem Imperativa pareça mais adequada para configurações de infraestrutura complexas, a abordagem Declarativa pode funcionar tão bem quanto.
Algumas ferramentas são capazes de ambas as abordagens, enquanto outras são adequadas apenas para uma ou outra. Exemplos de algumas das ferramentas de IaC populares usadas globalmente incluem Terraform IaC, AWS Cloud Formation, Ansible, e Pulumi, Chef, entre outras.
Como o nome implica – infraestrutura como código – o código que cria a infraestrutura é escrito em várias linguagens de template dentro do espaço de IaC. Linguagens de template populares incluem JSON, YAML, template ARM, HCL, Heat Scripts, e assim por diante.
Você também pode usar ferramentas de script para executar a infraestrutura de nuvem. Algumas populares incluem Bash e PowerShell. Essas às vezes vêm pré-instaladas na maioria dos computadores pessoais.
De todas essas ferramentas, no entanto, o Terraform se destaca por várias razões – e é o que examinaremos neste artigo.
O que é o Terraform?
O Terraform é uma ferramenta de código aberto desenvolvida pela HashiCorp em 2014. Ele evoluiu ao longo dos anos e agora atua como uma ferramenta de infraestrutura agnóstica em nuvem que permite criar infraestrutura em vários provedores de serviços em nuvem.
O Terraform também oferece o Terraform Cloud, uma ferramenta baseada em nuvem como serviço. Ele permite a implantação baseada em nuvem de ferramentas em nuvem, em vez de usar os métodos locais antigos que tínhamos na ferramenta Terraform CLI desativada.
Além disso, assim como outras ferramentas de IaC que utilizam linguagens de modelo, o framework de modelo usado para criar infraestrutura no Terraform é a linguagem de modelo da HashiCorp (HCL).
Vantagens do Terraform
Agora vou destacar alguns benefícios de usar o Terraform como engenheiro em nuvem, juntamente com o papel-chave da ferramenta no ecossistema em nuvem.
1. Abordagem Declarativa
Esta abordagem para automação de infraestrutura em nuvem garante que toda a infraestrutura necessária a ser implantada (bancos de dados, servidores, etc.) seja declarada explicitamente e executada conforme necessário. Isso ajuda a evitar conflitos.
2. Manipulação de Conflitos
Além de suas eficientes capacidades de automação de ferramentas em nuvem, o Terraform possui propriedades robustas de detecção e tratamento de conflitos. Uma das formas como ele lida com conflitos é através da função Terraform plan
. Esta função destaca quaisquer conflitos percebidos ou potenciais na orquestração da infraestrutura, permitindo fácil correção antes da implantação. Vou discutir isso mais detalhadamente nas seções subsequentes.
3. Cloud Agnostic
O Terraform é um provedor de serviços de automação multiuso e multi-nuvem com eficientes capacidades de automação de infraestrutura nos principais provedores de serviços em nuvem (AWS, GCP e Azure). Ele também permite automação híbrida e entre provedores.
4. Amigável ao Usuário
O Terraform é uma das maiores ferramentas de automação em nuvem com as maiores comunidades de usuários por aí. Ele possui extensos tutoriais amigáveis para iniciantes que ajudam você a se familiarizar rapidamente com a ferramenta. Aqui está um link para a sua documentação para que você possa se aprofundar mais.
5. Capacidades de Gerenciamento de Arquivos
O Terraform cria automaticamente um backup local dos estados de automação em seu computador local para garantir recuperação imediata e manipulação de arquivos no caso de algo dar errado. Ele também oferece opções de backup remoto para provedores de serviços em nuvem remotos, quando necessário.
6. Controle de Versão
Assim como o sistema de controle de versão Git, o Terraform possui um sistema de controle de versão integrado que permite rastrear alterações em um arquivo Terraform. Ele também permite voltar a versões anteriores do seu código se houver erros na versão atual, por exemplo.
7. Reutilização de Código
O Terraform oferece uma ampla variedade de modelos de código para reutilização fácil em sua página de documentação para desenvolvedores.
Agora que destacamos os benefícios do Terraform, vamos aprender alguns termos comuns usados no Terraform e o que significam.
Termos Comuns Usados no Terraform
Antes de começar a usar o Terraform, você deve estar familiarizado com alguns termos-chave que são frequentemente mencionados. Aqui está o que você precisa saber:
-
Provedores: no Terraform, um Provedor é uma interface de programação que permite ao Terraform interagir com várias APIs e serviços em nuvem. Por exemplo, você usaria um provedor para interagir com um provedor de serviços em nuvem como GCP ou Azure.
-
Módulos: Módulos são criados especificamente dentro do framework do Terraform e servem como componentes reutilizáveis que permitem orquestrar facilmente serviços em nuvem. Você também pode armazenar informações-chave sobre serviços em nuvem em um módulo e então modificá-lo para garantir a unicidade usando variáveis de módulo.
-
Recursos: Recursos no Terraform referem-se aos componentes da infraestrutura em nuvem a serem criados. Exemplos incluem redes em nuvem, máquinas virtuais, zonas de disponibilidade e outras infraestruturas.
-
Estado: O conceito de estado no Terraform forma a base para sua eficiência. O estado acompanha a configuração atual dos seus recursos de infraestrutura e contém detalhes sobre cada recurso que o Terraform criou, modificou ou excluiu. O sistema de controle de versão do Terraform o utiliza para rastrear quaisquer mudanças que você faça em um arquivo de código e usa essas informações para destruir e provisionar infraestrutura conforme necessário.
-
Espaço de Trabalho: um Espaço de Trabalho funciona de forma semelhante a um sistema de controle de versão, pois cria uma espécie de restrição em torno de um arquivo de trabalho. Espaços de Trabalho permitem que você gerencie várias instâncias de uma única configuração de infraestrutura de maneira limpa e isolada dentro do mesmo backend. Você pode usar espaços de trabalho para separar ambientes como desenvolvimento, homologação e produção enquanto usa a mesma configuração do Terraform.
Projeto de Demonstração: Como Escrever uma Configuração do Terraform
Nesta seção, vamos nos aprofundar na escrita do nosso primeiro arquivo Terraform para orquestrar uma máquina virtual do Google Cloud com apenas algumas linhas de código. Mas antes de começarmos, vamos discutir os vários comandos que você deve entender antes de implementarmos o projeto de demonstração.
Comandos Comuns do Terraform
-
Terraform init
: Este comando inicializa a ferramenta Terraform e baixa arquivos essenciais específicos do provedor de nuvem. Ele também estabelece uma conexão entre o Terraform e o provedor de nuvem em questão. No nosso caso, é entre o GCP e o provedor Terraform. -
Terraform fmt
: Este comando garante automaticamente a formatação e indentação ótimas do código. Ele garante a execução ordenada do código e minimiza quaisquer erros. -
Terraform plan
: Este comando descreve os passos de execução do código Terraform e detecta quaisquer erros que possam ocorrer durante o processo de execução. Ele também destaca quaisquer erros no código Terraform que possam prejudicar a execução. Por fim, ele trabalha em conjunto com o gerenciamento de estado do Terraform para detectar qualquer alteração de estado e desprovisionar ou gerar quaisquer serviços em nuvem adicionais, se necessário. -
Terraform apply
: Este comando executa o estado planejado do Terraform implementado pelo comandoTerraform plan
. -
Terraform destroy
: Este comando é o comando final no esquema do Terraform que é usado para desativar ou destruir todos os serviços em nuvem criados usando o comando Terraform apply. É importante observar que você deve executar os comandos listados acima sequencialmente para garantir que sua infraestrutura seja criada corretamente.
Criando uma Máquina Virtual GCP com IaC
Agora que você aprendeu esses comandos importantes, vamos testá-los criando nossa primeira máquina virtual GCP com IaC.
No seu editor de código, digite o seguinte código:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
Este código destaca o provedor de nuvem que estamos usando para gerar os recursos em nuvem que precisamos. No nosso caso, é o programa de nuvem da Google. O nome atribuído a ele é apenas “google”. Outros provedores de nuvem como AWS e Azure são “aws” e “azure” respectivamente.
A segunda linha identifica o identificador de assinatura do GCP, que é único para cada conta do GCP (e ajuda a facilitar a integração precisa). Você deve usar o seu no espaço fornecido.
Também será necessário incluir uma região de recurso adequada e uma zona de disponibilidade de recurso. Isso serve como base física para a máquina virtual que criaremos para executá-la. Neste cenário, escolhi a região central dos EUA e a zona de disponibilidade 1-a, respectivamente. Você pode ler mais aqui sobre regiões e zonas de disponibilidade na nuvem.
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
O trecho de código acima especifica o recurso de computação exato que será orquestrado, que no nosso caso é uma instância de máquina virtual codificada como “vm_instance”. 'example-vm'
é o nome que queremos atribuir à máquina virtual que criaremos para este projeto. É importante notar que o nome da máquina virtual também deve ser único. O tipo de máquina virtual que optamos foi o VM tipo E2 (Propósito geral)-médio. Você pode obter mais informações sobre os tipos de máquinas virtuais aqui.
Além disso, especificamos o sistema operacional inicial esperado (“boot_disk”), que é uma imagem do sistema operacional Debian Linux versão 11 no meu caso.
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
Para completar a criação da nossa máquina virtual, precisamos configurar uma Rede Virtual para permitir o acesso remoto à VM. O bloco da interface de rede conecta a máquina virtual à rede VPC (Nuvem Privada Virtual) padrão fornecida pelo GCP. Não conseguiremos interagir com nossa máquina virtual sem a rede VPC. O bloco de saída também exibe o endereço IP de acesso padrão no terminal, que podemos usar para nos conectar à máquina virtual.
Aqui está o código final esperado:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
A partir daí, agora estaremos executando este código usando os comandos destacados na imagem abaixo:
O comando terraform -v
confirma que o Terraform foi instalado com sucesso no terminal. A saída esperada será a versão da ferramenta Terraform instalada.
O próximo comando executado é a função terraform init
, que inicializa uma comunicação com o provedor de serviços em nuvem, que no nosso caso é o GCP. Todas as dependências necessárias também são instaladas.
O comando terraform fmt
também é executado para garantir um formato e indentação adequados do código. Em seguida, o comando terraform plan
é executado sequencialmente.
A partir da imagem acima, você pode ver os passos que o Terraform pretende usar para gerar a máquina virtual esperada.
Após a execução bem-sucedida do plano do Terraform, então executaremos a função terraform apply
para executar os passos delineados pelo plano do Terraform.
Isso gerará um prompt pedindo confirmação da execução do Terraform, conforme mostrado acima. Digitando “Sim” permitirá que a operação prossiga sem problemas.
Ao executar com sucesso, uma mensagem de sucesso será exibida conforme mostrado acima. Com isso, criamos nossa infraestrutura em nuvem apenas com código. O comando terraform destroy
pode ser chamado para remover as máquinas virtuais criadas.
Conclusão
Neste artigo, você aprendeu o básico sobre infraestrutura como código. Discutimos o Terraform, seus benefícios e algumas de suas principais características e comandos. Também ilustramos seu uso em um projeto de demonstração.
Para aprimorar ainda mais seu conhecimento, você pode consultar a documentação do Terraform para mais exemplos de código. Também recomendaria utilizar seu novo conhecimento para automatizar um projeto com aplicações na vida real.
Sinta-se à vontade para me enviar qualquer comentário ou dúvida. Você também pode conferir meus outros artigos aqui. Até a próxima, continue codificando!
Source:
https://www.freecodecamp.org/news/a-beginners-guide-to-terraform-infrastructure-as-code-in-practice/