Simulando serviços AWS na sua máquina com LocalStack

James G Silva
Serasa
Published in
4 min readMar 8, 2022

Desenvolver e testar na sua própria máquina aplicações que dependem de serviços da nuvem AWS não são tarefas fáceis, ainda mais se você estiver sem acesso à internet ou sem permissão para criar recursos na cloud.

Arquitetura do projeto

O LocalStack fornece um ambiente AWS offline na sua própria máquina e sem surpresas na fatura do cartão. Na versão grátis é possível simular mais de 25 serviços e na paga você tem acesso a todos os serviços.

O intuito deste artigo é ajudar você a:

  1. subir o LocalStack e configurar os serviços SNS, SQS, DynamoDB e S3;
  2. desenvolver scripts para publicar mensagens em tópico SNS, consumir mensagens de filas SQS, enviar arquivos para um bucket S3 e adicionar itens em uma tabela DynamoDB;
  3. gerenciar serviços por meio de interfaces gráficas.

Subindo o LocalStack

Devemos criar o arquivo docker-compose.yml, e definir a variável SERVICES com a lista de serviços (dynamodb, s3, sqs, sns) que serão iniciados quando o LocalStack subir, conforme exemplo abaixo:

Instale o Docker e o Docker compose e inicie o container com o comando abaixo:

Podemos verificar a saúde dos serviços acessando http://localhost:4566/health. A resposta deve ser um JSON no seguinte formato:

Serviços rodando, estamos prontos para criar tópicos, assinaturas, filas, tabelas e buckets. Instale a Interface da Linha de Comando da AWS e execute os comandos abaixo.

Para facilitar existe um wrapper AWS cli local para executar os comandos acima sem a necessidade de informar a opção — endpoint-url.

Desenvolvendo nosso projeto

Com nossa infraestrutura de pé, estamos prontos para desenvolver nossos scripts. Instale o python e execute os comandos abaixo para criar e ativar um ambiente virtual:

Para facilitar a integração com os serviços AWS, instale o pacote boto3 executando o comando abaixo:

Produzindo mensagens no tópico SNS

Vamos obter um cliente SNS e publicar mensagens no tópico TOPICO_MENSAGENS. Crie o arquivo sns_producer.py conforme exemplo abaixo:

Execute o comando abaixo para gerar uma mensagem:

Os logs de envio devem ser parecidos com a imagem abaixo:

Consumindo mensagens e adicionando no DynamoDB

Nosso primeiro consumidor deve inserir as mensagens em uma tabela do DynamoDB. Crie o arquivo dynamo_sqs_consumer.py.

Execute o programa para consumir as mensagens da fila FILA_DYNAMO.

Acompanhe os logs das mensagens adicionadas à tabela TabelaMensagens.

Consumindo mensagens e subindo para o S3

Nosso segundo consumidor deve subir o conteúdo das mensagens para um bucket no S3. Crie o arquivo s3_sqs_consumer.py.

Execute o programa para consumir as mensagens da fila FILA_S3.

Acompanhe os logs dos objetos criados no bucket bucket-mensagens.

Interfaces gráficas

Também podemos usar interfaces para gerenciar tópicos, assinaturas, filas, tabelas e buckets.

DynamoDB admin gerencia tabelas e itens do DynamoDB local.

aws-sqs-sns-client gerencia tanto tópicos e assinaturas SNS quanto filas SQS.

localstack-s3-ui exibe itens de um bucket S3 no LocalStack.

Conclusão

O objetivo deste artigo foi ajudar você a simular AWS localmente com LocalStack, para poder testar os serviços gratuitamente.

Poderíamos ter usado qualquer linguagem de programação, instalar o kit de desenvolvimento da AWS e apontar para o endpoint do LocalStack.

Espero que tenha gostado. Para sugestões ou troca de experiências, deixe um comentário. Será um prazer conversar sobre o assunto.

--

--

James G Silva
Serasa
Writer for

Especialista em desenvolvimento de software na Serasa