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)