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.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs