Instalando o Terraform no Debian 12.0 “bookworm“
Tags: terraform, docker, infrastructureascode, linux
Published: 2024-02-27 00:34:15

O Terraform é uma ferramenta de infraestrutura como código (IaC) desenvolvida pela HashiCorp. Ele permite aos desenvolvedores provisionar e gerenciar recursos de infraestrutura de forma automatizada e repetível, utilizando arquivos de configuração declarativa. Sua importância reside na capacidade de aumentar a eficiência, padronizar processos e promover a colaboração entre equipes de desenvolvimento e operações (DevOps), facilitando a criação e manutenção de ambientes de infraestrutura escaláveis e confiáveis.

Nessa série de artigos, irei mostrar formas de utilização, usando ambientes Cloud, e on-premise

Começando pela instalação do Terraform em um Debian 12. 

Para mais informações, ou dúvidas consulte a [documentação oficial](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).  

### Instalação


#### Certificar-se que o sistema está atualizado: 
```shell-session
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
```
#### Instalar a chave - HashiCorp GPG:
```shell-session
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```
#### Para verificar a impressão digital da chave:
```shell-session
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
```

#### O `gpg`comando reportará a impressão digital da chave:
```plaintext
/usr/share/keyrings/hashicorp-archive-keyring.gpg ------------------------------------------------- pub rsa4096 XXXX-XX-XX [SC] AAAA AAAA AAAA AAAA uid [ unknown] HashiCorp Security (HashiCorp Package Signing) <security+packaging@hashicorp.com> sub rsa4096 XXXX-XX-XX [E]

```

#### Agora adicione o repositório oficial HashiCorp ao Debian. O `lsb_release -cs` comando encontra o codinome da versão de distribuição do seu sistema atual, como `buster`, `groovy`ou `sid`.
```shell-session
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
```

#### Atualize, baixando as informações do pacote da HashiCorp.
```shell-session
 sudo apt update
```

#### Instale o Terraform do novo repositório.
```shell-session
sudo apt-get install terraform
```

#### Para verificar a instalação 
```shell-session
 terraform -help
```
#### ou use
```shell-session
terraform -version 
```
### Testando com Docker e Nginx

Com o Terraform configurado, podemos efetuar um teste, subindo uma aplicação em Docker e NGINX.

Crie um diretório, por exemplo: _**learn-terraform-docker-container**_

```shell-session
sudo mkdir learn-terraform-docker-container 
```

Este diretório irá abrigar os arquivos de configuração usados para descrever a infraestrutura que você deseja que o Terraform crie e gerencie. 

Quando você inicializa e aplica a configuração aqui, o Terraform usa este diretório para armazenar plug-ins, módulos (configurações pré-escritas) necessários e informações sobre a infraestrutura que ele criou.

Navegue até o diretório de trabalho.

```shell-session
cd learn-terraform-docker-container 
```

Crie um arquivo chamado _**main.tf**_ 

```shell-session
nano main.tf 
```
e cole a seguinte configuração nele.

```
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0.1"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.image_id
  name  = "tutorial"

  ports {
    internal = 80
    external = 8000
  }
}

```

Inicialize o projeto, ele irá baixar um plugin chamado _**provedor**_ que permite que o Terraform interaja com o Docker.

```shell-session
 terraform init
```

![terraform_init](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5kwqkg6iyel99dls2lx.png)

Provisione o contêiner do servidor NGINX com arquivos _**apply**_.

```shell-session
 terraform apply
```


![terraform_apply](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w0qoyzgm1b2arwdy90gk.png)

Quando o Terraform solicitar que você confirme, digite _**yes**_ e pressione _**ENTER**_.

Verifique a existência do contêiner NGINX em _**localhost:8000**_ em seu navegador da web ou executando:

```shell-session
docker ps -a
```
para ver o contêiner em execução.

![nginx_localhost](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a748kg826rh2xg9sk8vh.png)

Para destruir o contêiner, execute:

```shell-session
terraform destroy
```

Quando o Terraform solicitar que você confirme, digite _**yes**_ e pressione _**ENTER**_ para destruir o contêiner.



Esses são os primeiros passos usando o _**Terraform**_. 

#### See you later 🤘🏻