DEV Community

Stefano Martins
Stefano Martins

Posted on

Configurando o Terraform para funcionar corretamente com o LocalStack

Nos últimos anos o LocalStack tem ganho notoriedade como uma ferramenta extremamente útil para a criação de laboratórios para estudos simulando a API da AWS, ainda que não seja 100% compatível. Com seu uso estudantes podem economizar uma quantia razoável de dinheiro utilizando uma stack local.

Entretanto, isso não significa que ela seja 100% compatível com todas as ferramentas, e infelizmente o Terraform é uma delas. Nestes dias ao realizar testes para um projeto de uma nova infraestrutura deparei-me com o seguinte erro ao tentar criar um bucket S3:

Plan: 1 to add, 0 to change, 0 to destroy.
aws_s3_bucket.this: Creating...
╷
│ Error: creating S3 Bucket (stefano-martins-default): operation error S3: CreateBucket, https response error StatusCode: 0, RequestID: , HostID: , request send failed, Put "http://stefano-martins-default.localhost:4566/": dial tcp: lookup stefano-martins-default.localhost: no such host
Enter fullscreen mode Exit fullscreen mode

Neste artigo nós vamos aprender a realizar a instalação do LocalStack, a criação de um profile e como contornar o problema acima mencionado.

Para fins de simplicidade e redução de stack, nós não utilizaremos TFLocal neste artigo.

tl;dr

# Instalando o LocalStack (macOS com Homebrew)
brew install localstack/tap/localstack-cli

# Instalando o LocalStack (Linux amd64)
curl --output localstack-cli-3.6.0-linux-amd64-onefile.tar.gz \
    --location https://github.com/localstack/localstack-cli/releases/download/v3.6.0/localstack-cli-3.6.0-linux-amd64-onefile.tar.gz

# Instalando o LocalStack (Linux arm64)
curl --output localstack-cli-3.6.0-linux-arm64-onefile.tar.gz \
    --location https://github.com/localstack/localstack-cli/releases/download/v3.6.0/localstack-cli-3.6.0-linux-arm64-onefile.tar.gz

# Descompactando o binário para um diretório que está em seu path (Linux amd64/arm64)
sudo tar xvzf localstack-cli-3.6.0-linux-*-onefile.tar.gz -C /usr/local/bin

# Criando um novo profile
cat <<EOF >> ~/.aws/config
[profile localstack]
region = us-east-1
output = json
endpoint_url = http://localhost:4566
aws_access_key_id = blablabla
aws_secret_access_key = blablabla
EOF

# Instalando o awsp (opcional, apenas caso você possua múltiplos profiles da AWS)
npm install -g awsp
alias aws="source _awsp" # Adicione ao seu ~/.bashrc ou ~/.zshrc

# Altere seu profile para o do LocalStack
awsp

# Teste
aws s3 mb s3://meu-bucket-bonitinho
Enter fullscreen mode Exit fullscreen mode

Instalando o LocalStack

A instalação do LocalStack é relativamente simples. Como pré-requisitos é necessário que o Homebrew (macOS) e o Docker estejam instalados na sua máquina.

A instalação pode ser realizada da seguinte forma em máquinas macOS:

brew install localstack/tap/localstack-cli
Enter fullscreen mode Exit fullscreen mode

Em máquinas Linux você pode realizar o download do pacote .tar.gz e descompactá-lo em um diretório listado no $PATH:

# amd64
curl --output localstack-cli-3.6.0-linux-amd64-onefile.tar.gz \
    --location https://github.com/localstack/localstack-cli/releases/download/v3.6.0/localstack-cli-3.6.0-linux-amd64-onefile.tar.gz

# arm64
curl --output localstack-cli-3.6.0-linux-arm64-onefile.tar.gz \
    --location https://github.com/localstack/localstack-cli/releases/download/v3.6.0/localstack-cli-3.6.0-linux-arm64-onefile.tar.gz

sudo tar xvzf localstack-cli-3.6.0-linux-*-onefile.tar.gz -C /usr/local/bin
Enter fullscreen mode Exit fullscreen mode

Caso você se depare com algum problema de permissão, você pode resolvê-lo da seguinte forma:

sudo chmod 755 /usr/local/bin/localstack
Enter fullscreen mode Exit fullscreen mode

Instalando o AWSP

O AWSP é uma ferramenta muito útil para alternarmos facilmente entre profiles da AWS configurados no arquivo ~/.aws/config. Sua instalação é simples e requer a presença do NPM.

npm install -g awsp
Enter fullscreen mode Exit fullscreen mode

Uma vez instalado, é necessária a criação de um alias dentro do seu arquivo ~/.bashrc ou ~/.zshrc (a depender do shell utilizado por você). Você pode fazer isso adicionando a seguinte linha ao arquivo:

alias awsp="source _awsp"
source ~/.zshrc  # Caso você utilize ZSH
source ~/.bashrc # Caso você utilize Bash
Enter fullscreen mode Exit fullscreen mode

Iniciando o LocalStack

Para testar se o LocalStack foi devidamente instalado na máquina você pode executar o seguinte comando:

localstack --version
Enter fullscreen mode Exit fullscreen mode

Já para iniciá-lo utilize um dos seguintes comandos:

localstack start    # Inicialização em foreground
localstack start -d # Inicialização em background
Enter fullscreen mode Exit fullscreen mode

Agora podemos testar seu uso com o AWSCLI:

aws s3 mb s3://meu-bucket-bonitinho
Enter fullscreen mode Exit fullscreen mode

Configurando o seu projeto Terraform

A configuração do seu provider no Terraform ficará ligeiramente diferente com isso. Segue um exemplo:

provider "aws" {
  region = "us-east-1"
  profile = "localstack"
  s3_use_path_style = true
  endpoints {
    s3 = "http://localhost:4566"
  }
}
Enter fullscreen mode Exit fullscreen mode

Para endpoints de demais serviços da AWS é possível utilizar a documentação oficial do LocalStack.

Top comments (0)