Terraform — Criando infraestrutura na AWS

Tutorial criando recursos na AWS como ECS com a ferramenta DevOps Terraform da HashCorp

Dan Vitoriano
4 min readJan 10, 2023
Photo by Teng Yuhong on Unsplash

O que é Terraform

Software de infraestrutura de código de código aberto criado pela HashiCorp.

Os usuários definem e fornecem infraestrutura de dados e Cloud usando a linguagem de configuração declarativa “HashiCorp Configuration Language” (HCL).

Instalação

Para instalar o Terraform, acesse https://developer.hashicorp.com/terraform/downloads e siga as instruções de acordo com seu sistema operacional.

Neste exemplo, vamos utilizar o MacOS com o Brew. O Brew é um gerenciador de pacotes para MacOS. Para saber mais, comenta se você tem interesse que eu compartilho um vídeo chamado “Instalando softwares no MacOS com Homebrew”.

Para instalar o Terraform com Brew, digite no terminal:

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

Para testar a instalação, informe no terminal terraform –help.

Instale também o autocomplete com o comando terraform -install-autocomplete.

Criando o arquivo principal de configuração

Para criarmos nossa estrutura inicial, vamos utilizar o Docker para criar um servidor web com NGNIX em poucos minutos.

Este meu outro conteúdo “Docker” traz informações sobre como instalar o Docker e criar containers.

Inicie o Docker através do terminal com o comando open -a Docker.

Crie uma pasta para reunir os seus arquivos de configuração do Terraform:

mkdir learn-terraform-docker-container

Em seguida, acesse a pasta com cd learn-terraform-docker-container.

Vamos utilizar o editor de código VS Code, que é gratuito e nos ajudará a escrever nossos arquivos do Terraform. Para instalar o Code na sua máquina, consulte meu outro tutorial “Visual Studio Code

Na pasta criada, digite code . e crie um novo arquivo chamado main.tf.

É neste arquivo que iremos definir os nossos recursos.

Terraform Registry

Para instalar novos recursos, podemos consultar o site do Terraform Registry.

Por exemplo, no link https://registry.terraform.io/providers/hashicorp/aws/latest/docs, você encontra a documentação completa sobre o recurso (provider) da AWS.

Para adicionar recursos com a AWS, edite o arquivo main.tf inserindo o seguinte código:

terraform { 
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}

# Configure the AWS Provider
provider "aws" {
region = "us-east-1"
}

Instale a extensão do Terraform para o VS Code chamada HashiCorp Terraform (https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform) e tenha a sintaxe colorida.

Criando um servidor web com a imagem do NGNIX no Docker

Para o nosso exemplo, vamos utilizar um código de configuração já pronto, que irá criar um servidor web na porta 8000 utilizando uma imagem do NGNIX no Docker. Salve tudo no arquivo main.tf:

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

provider "docker" {}

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

resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}

Você pode encontrar o provider do Docker no Terraform Registry também.

Aplicando as configurações do Terraform

Inicialize o projeto, que baixará um plugin e irá permitir que o Terraform interaja com o Docker:

terraform init

Em seguida, execute sua configuração com o comando terraform apply no terminal.

Isto irá aplicar sua configuração e iniciar o container Docker com a imagem do NGNIX rodando na porta 8000.

Observe que ele apontou uma configuração como obsoleta, mas não impediu de instalar os recursos. Acesse o endereço no navegador com http://localhost:8000 e confira se tudo funcionou. Você deverá ver a página de boas-vindas no NGNIX.

Utilizando o Terraform com AWS CLI

Para o nosso exemplo, você precisa criar uma conta na AWS. Acesse o endereço https://aws.amazon.com/free para adquirir uma versão gratuita, suficiente para nosso estudo.

Em seguida, utilize o AWS CLI com suas credenciais IAM de usuário para criar recursos com o Terraform direto do seu terminal.

Para instalar o AWS CLI e configurar suas credenciais, confira o conteúdo “AWS CLI no terminal”.

Após a autenticação com seu Access key ID e secret-access-key.

Criando infraestrutura na AWS

Agora vamos substituir o nosso arquivo main.tf pelo provider da AWS utilizando a criação do recurso EC2, que irá gerar instância direto na AWS Console.

Lembrando que a documentação completa do provider da AWS encontra-se no link https://registry.terraform.io/providers/hashicorp/aws/latest/docs.

A configuração que iremos utilizar é a seguinte:

# escolhe o provider aws
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}

# utiliza a opção Oregon de região
provider "aws" {
region = "us-west-2"
}

# cria um recurso único chamado aws_instance.app_server
# com um tier t2.micro (free) no EC2
resource "aws_instance" "app_server" {
ami = "ami-830c94e3"
instance_type = "t2.micro"
tags = {
Name = "ExampleAppServerInstance"
}
}

Após as alterações no main.tf, certifique de estar logado na AWS CLI com suas credenciais e informe os comandos:

terraform init
terraform plan
terraform apply

Para este último, se tudo estiver correto, você deve confirmar a alteração respondendo yes no terminal.

Ao final, é possível acessar o AWS Console em https://us-west-2.console.aws.amazon.com/ec2 e verificar a criação da instância do ECS tamanho t2.micro.

Outros recursos que podem compor o arquivo de configuração principal, por exemplo, é o data source, que aponta uma configuração externa ao arquivo do Terraform.

Exemplo: o terraform_remote_state: cria o estado mais recente de um back-end para recuperar os valores de output do módulo root de alguma outra configuração do Terraform.

data "terraform_remote_state" "project" {
backend = "s3"
}

Comenta se você achou útil e deixa sua curtida, assim eu posso criar uma parte 2 configurando mais recursos, beleza?!

Valeu migles! Me segue nas outras redes sociais: https://danvitoriano.com.br

--

--

Dan Vitoriano
Dan Vitoriano

Written by Dan Vitoriano

📱💻 Engenheiro de software, professor e LinkedIn Creator. Tutoriais e artigos sobre tecnologia e programação. Eu era o Idman na blogosfera gay dos anos 2000.

No responses yet