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
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
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
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
Caso você se depare com algum problema de permissão, você pode resolvê-lo da seguinte forma:
sudo chmod 755 /usr/local/bin/localstack
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
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
Iniciando o LocalStack
Para testar se o LocalStack foi devidamente instalado na máquina você pode executar o seguinte comando:
localstack --version
Já para iniciá-lo utilize um dos seguintes comandos:
localstack start # Inicialização em foreground
localstack start -d # Inicialização em background
Agora podemos testar seu uso com o AWSCLI:
aws s3 mb s3://meu-bucket-bonitinho
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"
}
}
Para endpoints de demais serviços da AWS é possível utilizar a documentação oficial do LocalStack.
Top comments (0)