Começando com o Terraform no Windows e Terraform EC2

No espaço de infraestrutura como código (IaC), uma das ferramentas mais úteis que surgiram nos últimos anos é o Terraform da HashiCorp para Windows. A capacidade de versionar infraestrutura, automatizar o provisionamento de recursos e executar em diferentes fornecedores de nuvem é enorme para qualquer fluxo de trabalho de DevOps e automação.

Um caso de uso para o Terraform está em CI/CD. O Terraform permite que você:

Meus Últimos Vídeos

  • crie um ambiente de teste
  • implante uma aplicação
  • execute testes de integração
  • destrua o ambiente de teste

Todos os passos são realizados automaticamente também. E nenhum data center é necessário!

Pré-requisitos

Este artigo é um guia para colocar o Terraform para Windows em funcionamento. Se você deseja seguir adiante, por favor, certifique-se de ter os seguintes pré-requisitos no lugar.

  • A Windows 10 device
  • Uma conta AWS
  • O CLI da AWS instalado e configurado nesse dispositivo. Você pode aprender como instalar aqui e como configurar aqui.
  • (Opcional) Visual Studio Code com a extensão do Terraform

Instalando o Aplicativo Terraform para Windows

Para aproveitar o poder do Terraform, você primeiro precisa instalá-lo no seu sistema operacional de escolha. Neste artigo, vou focar no Windows. Mas saiba que o Terraform pode ser executado em outros sistemas operacionais. Se você não estiver no Windows, dê uma olhada na documentação de instalação.

O Jeito Difícil

Se você não pode usar um gerenciador de pacotes ou deseja entender como funciona o processo de instalação, pode instalar o Terraform manualmente. Você pode instalar o Terraform baixando o binário e adicionando-o ao variável de ambiente do sistema. Se isso parecer intimidante, eu garanto que há uma maneira mais fácil de fazer isso que você aprenderá na próxima seção.

  1. Baixe a versão apropriada do Terraform na página de download da HashiCorp. No meu caso, é a versão de 64 bits para Windows.
  2. Crie uma pasta na unidade C:\ onde você pode colocar o executável do Terraform. Eu prefiro colocar instaladores em uma subpasta (por exemplo, C:\tools) onde você pode colocar binários.
  3. Depois que o download terminar, vá encontrá-lo no Explorador de Arquivos. Extraia o arquivo zip para a pasta que você criou no passo 2.
  4. Abra o Menu Iniciar e digite “ambiente” e a primeira coisa que aparecer deve ser a opção Editar as Variáveis de Ambiente do Sistema. Clique nisso e você deve ver esta janela.
System Properties

5. Clique em Variáveis de Ambiente… na parte inferior e você verá isso:

Windows environment variables

6. Na seção inferior onde diz Variáveis do Sistema, encontre uma chamada Caminho e clique em editar. Você verá uma lista de onde encontrar os binários que o Windows pode precisar por qualquer motivo.

7. Clique em Novo e adicione o caminho da pasta onde está localizado o terraform.exe ao final da lista. Deve ficar assim quando terminar.

Editing the system path

8. Clique em OK em cada um dos menus que você abriu até não haver mais nenhum.

9. Para garantir que o Windows detecte o novo caminho, abra um novo prompt de CMD/PowerShell e digite refreshenv.

10. Verifique se a instalação foi bem-sucedida digitando terraform --version. Se retornar uma versão, está tudo certo.

O Jeito Fácil

Ufa, foi muito trabalho! Seria terrível ter que fazer isso toda vez que você precisasse instalar novo software no seu dispositivo. Vamos usar um gerenciador de pacotes em vez disso. Existem alguns gerenciadores de pacotes que você pode usar para instalar o Terraform no Windows. Para o Windows, meu favorito é o Chocolatey. Ele facilita a instalação, remoção e atualização de software com um comando de uma linha, e o Terraform não é exceção a isso.

Para instalar o Terraform com o Chocolatey, siga as seguintes etapas:

  1. Abra um prompt de CMD/PowerShell como administrador e instale o Chocolatey usando o comando da página de instalação deles.
  2. Assim que isso estiver concluído, execute choco install terraform. Se desejar, você também pode adicionar -y no final para concordar automaticamente com a instalação no seu dispositivo.

Após a execução desse comando, você verá algo assim:

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3. Verifique se a instalação foi bem-sucedida inserindo terraform --version.

O Modo Linux

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

Sim, ainda é possível. Mas uma das características no Windows 10 é o Subsistema Windows para Linux, ou WSL. Isso permite que você execute comandos do Linux no Windows.

  1. Instale o WSL. Não vou entrar em detalhes sobre como instalar e configurar o WSL aqui, mas se quiser acompanhar e ainda não o tiver configurado. Um trecho TechSnips que fiz sobre esse tópico pode ser encontrado abaixo.

2. No seu shell do WSL, execute apt-get install unzip. Você precisará disso para extrair os binários do Terraform posteriormente.

3. Baixe o Terraform executando wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zip. Lembre-se de substituir a versão e a arquitetura pela que melhor se adequa ao seu dispositivo. Você pode encontrar a lista completa de lançamentos do Terraform aqui.

4. Execute unzip terraform_0.12.6_linux_amd64.zip terraform para descompactar o conteúdo do arquivo zip em uma pasta chamada terraform.

5. Uma vez que o arquivo ZIP esteja descompactado, você precisará movê-lo para algum lugar acessível pelo caminho do sistema. Felizmente, o Linux possui uma pasta na qual os usuários podem adicionar binários por padrão. Mova o binário do Terraform para lá executando mv terraform /usr/local/bin/. A pasta /usr/local/bin já está configurada no caminho do seu sistema.

6. Verifique se a instalação foi bem-sucedida executando terraform --version.

Automatizando uma Instância EC2 do Terraform AWS

Agora que você instalou o Terraform, pode começar a usá-lo. Neste post, vou demonstrar como construir uma instância EC2 do Terraform AWS simples. Mas saiba que o Terraform pode provisionar centenas de tipos diferentes de infraestrutura.

Para começar, você primeiro precisa de um diretório para executar os scripts do Terraform EC2. É importante ter um diretório separado para cada ambiente. No momento em que estou escrevendo isso, o Terraform não possui uma maneira de filtrar o que ele executa. Ele executará todos os scripts no seu diretório de trabalho atual.

Configurando um Script TF

  1. No seu console cmd ou PowerShell executado como administrador, execute mkdir hello-terraform e depois cd ./hello-terraform.
  2. Assim que você tiver um diretório, precisará de um script Terraform. Abaixo está um exemplo de um que você pode usar. Este é um script Terraform típico usando o fornecedor AWS para criar uma instância AWS recurso.

Se você quiser o script inteiro, copie-o abaixo. Se você quer entender o que este script está fazendo, continue lendo abaixo.

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

3.   Salve o script acima como main.tf no seu diretório de trabalho.

Entendendo os Scripts TF

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

Antes de prosseguir, observe o bloco abaixo e o que ele está declarando.

#Terraform HCL

Este bloco indica ao Terraform EC2 qual fornecedor usar. Existem fornecedores para todos os principais fornecedores de nuvem, bem como alguns fornecedores locais. Se você for mais avançado e souber como escrever Golang, também pode escrever seu próprio fornecedor.

Este bloco indica ao Terraform para usar o fornecedor AWS e as chaves de acesso no arquivo ~/.aws/credentials sob o nome de perfil default. Este arquivo é criado quando você configura o AWS CLI com o comando aws config, conforme mencionado nos pré-requisitos.

Também vale a pena notar que ~/ é a abreviação para o diretório do usuário atual. Se você vem de um ambiente Windows, isso é equivalente a $env:USERPROFILE ou %USERPROFILE%. Mas o Terraform não suporta essa notação no momento da escrita.

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

O bloco a seguir descreve uma instância EC2 Terraform e como construí-la. Se você consultar a documentação Terraform para aws_instance, verá que alguns parâmetros são obrigatórios e outros são opcionais. Neste caso, os parâmetros obrigatórios são o ID da AMI (ami-07d0cf3af28718ef8) para o Ubuntu 18.04 LTS e t2.micro para o tipo de instância.

Ao passar um bloco de tag com a chave Name e o valor HelloTerraform, essa tag também será atribuída à instância que será criada. Isso é opcional.

terraform init

# Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  Construindo a Instância EC2 Terraform da AWS: Testando
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

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

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Agora que o script está configurado, chame-o executando terraform init no seu diretório de trabalho. Isso baixará todas as dependências e provedores para uma pasta chamada .terraform. Se tudo correr bem, você deverá ver algo assim:

Antes de fazer alterações, o Terraform EC2 permite que você veja o que será criado executando terraform plan. Aqui está o que será exibido:

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

  Enter a value:    

# aws_instance.ubuntu será criado

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

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

Construindo a Instância EC2 da AWS: Criando

Agora você está pronto para executá-lo por conta própria, executando terraform apply. Abaixo, você verá uma saída semelhante ao terraform plan, mas com um prompt adicional para confirmar que você realmente deseja aplicar essas alterações.

Assim que você digitar ‘sim’, o Terraform EC2 começará a provisionar a instância do Terraform EC2 chamando as APIs da AWS com a chave de acesso em seu arquivo de credenciais. Isso pode levar algum tempo. Uma vez concluído, você verá algo como abaixo:

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

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

Destruindo a Instância AWS EC2

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

Uma vez que você tenha terminado com o ambiente de teste, você pode destruir a instância.

No seu console cmd/PowerShell, digite terraform destroy. Assim como o comando apply, você verá uma lista de recursos que o Terraform vai destruir e depois um prompt antes de realmente destruí-los.

Assim que você digitar sim, o Terraform EC2 começará a destruir a instância e confirmará quando terminar.

Source:
https://adamtheautomator.com/terraform-windows/