Simulando serviços AWS na sua máquina com LocalStack
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.
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:
- subir o LocalStack e configurar os serviços SNS, SQS, DynamoDB e S3;
- 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;
- 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.