Começando com Terraform Windows e Terraform EC2

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

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

Meus Vídeos Mais Recentes

  • criar um ambiente de teste
  • implantar uma aplicação
  • executar testes de integração
  • destruir o ambiente de teste

Todos os passos são executados automaticamente. E nenhum centro de dados é necessário!

Pré-requisitos

Este artigo é um passo a passo para instalar e executar o Terraform Windows. Se você deseja acompanhar, certifique-se de ter os seguintes pré-requisitos em vigor.

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

Instalando o aplicativo Terraform Windows

Para aproveitar o poder do Terraform, primeiro você precisa instalá-lo no seu sistema operacional de escolha. Neste artigo, vou me concentrar 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 Modo Difícil

Se você não pode usar um gerenciador de pacotes ou quer entender como funciona o processo de instalação, você pode instalar o Terraform manualmente. Você pode instalar o Terraform baixando o binário e adicionando-o ao caminho do sistema variável de ambiente. Se isso parecer intimidante, eu lhe asseguro 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 64 bits do Windows.
  2. Crie uma pasta no seu C:\ drive 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 seu 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 está escrito 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 no final da lista. Deve parecer 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 pronto.

Do Jeito Fácil

Ufa, foi muito trabalho! Seria terrível ter que fazer isso toda vez que você precisasse instalar um 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 torna a instalação, remoção e atualização de software tão simples quanto um comando de uma linha, e o Terraform não é exceção a isso.

Para instalar o Terraform com o Chocolatey, siga estas etapas:

  1. Abra um prompt de comando/PowerShell como administrador e instale o Chocolatey usando o comando da página de instalação deles.
  2. Depois que isso estiver completo, execute choco install terraform. Se preferir, você também pode colocar -y no final para concordar automaticamente em instalá-lo no seu dispositivo.

Após a execução desse comando, você obterá 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 digitando terraform --version.

O caminho do 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, e ainda é. Mas uma das características no Windows 10 é o Subsistema Windows para Linux, ou WSL. Isso permite que você execute comandos Linux no Windows.

  1. Instale o WSL. Eu não vou entrar em detalhes sobre como instalar e configurar o WSL aqui, mas se você quiser seguir adiante e ainda não o tiver configurado. Um snip do TechSnips que eu fiz sobre este tópico pode ser encontrado abaixo.

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

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 adapta ao seu dispositivo. Você pode encontrar a lista completa de versões 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 estiver descompactado, você precisará movê-lo para algum lugar acessível pelo caminho do sistema. Felizmente, o Linux tem 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á definida no caminho do sistema.

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

Automatizando uma Instância EC2 do Terraform da AWS

Agora que você instalou o Terraform, pode começar a usá-lo. Neste post, vou demonstrar a construção de uma instância EC2 simples do Terraform da AWS. 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 EC2 do Terraform. É importante ter um diretório separado para cada ambiente. No momento em que estou escrevendo isso, o Terraform não tem 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. Uma vez que você tenha um diretório, precisará de um script Terraform. Abaixo está um exemplo que você pode usar. Este é um script Terraform típico usando o provedor AWS provider para criar uma instância AWS resource.

Se você quiser o script completo, copie abaixo. Se desejar 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.

Compreensão dos Scripts do 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 informa ao Terraform EC2 qual provedor usar. Existem provedores para todos os principais fornecedores de nuvem, bem como alguns fornecedores locais. Se você for mais avançado e souber como escrever em Golang, também pode criar seu próprio provedor.

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

Vale ressaltar que ~/ é uma abreviação para o diretório do usuário atual. Se você vem do ambiente Windows, isso é equivalente a $env:USERPROFILE ou %USERPROFILE%. No entanto, o Terraform não suporta essa notação no momento da redação.

#Terraform HCL

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

  tags = {
    Name = "HelloTerraform"
  }
}

O próximo bloco abaixo descreve uma Instância EC2 do Terraform e como construí-la. Se você der uma olhada na documentação do Terraform para aws_instance, poderá ver que alguns parâmetros são obrigatórios; 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 do Terraform 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 do seu diretório de trabalho. Isso baixará todas as dependências e provedor para uma pasta chamada .terraform. Se tudo correr bem, você deve obter algo assim:

Antes de fazer quaisquer alterações, o Terraform EC2 permite ver o que será criado executando terraform plan. Aqui está o que isso irá produzir:

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 do AWS: Criando

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

Uma vez que você digite ‘sim’, o Terraform EC2 começará a provisionar a instância do Terraform EC2 chamando as APIs da AWS com a chave de acesso no 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.

Quando terminar com o ambiente de teste, você pode destruir a instância.

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

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

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