Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

marcusvoltolim/localstack-aws

Repository files navigation

Motivação

Projeto SpringBoot Web com Groovy/Java mostrando como configurar o LocalStack coexistindo com a configuração de "produção" que acessa a AWS real.

LocalStack é um emulador de serviços em nuvem que pode ser executado na sua máquina fornecendo uma estrutura de teste/simulação fácil de usar para desenvolver seus aplicativos em nuvem.

Já testei: S3, SQS, SNS, Event-Bridge (events), KMS, IAM, STS.

Tecnologias

  • SpringBoot 2.6.7
  • AWS 2.17.181
  • Java 11
  • Groovy 3.0.10
  • Gradle 7.4.1

Explicação

Necessário conhecimento prévio sobre Spring, injeção de dependência...

Temos 2 configurações para instanciar os beans dos clients AWS de acordo o desejado: real ou local e uma configuração para criar os recursos no LocalStack.

Vamos usar o enviroment do Spring adicionando a configuração application.localstack no application.yaml para informar se vamos executar localmente ou não.

  • AwsConfig.groovy
    • Usado se application.localstack é false (ou quando não tem a config matchIfMissing = true)
    • Responsável por instanciar os beans dos clients AWS usando as credenciais informadas nas variáveis de ambiente:
      • AWS_ACCESS_KEY_ID
      • AWS_SECRET_ACCESS_KEY
  • AwsConfigLocal.groovy
    • Usado se application.localstack é true
    • Responsável por instanciar os beans dos clients AWS apontando para http://localhost:4566
  • LocalStackConfig.groovy
    • Usado se application.localstack é true
    • Responsável por criar os recursos no LocalStack, vamos criar 2 filas no SQS e 2 tabelas no DynamoDB.
    • Os nomes das filas e tabelas estão no application.yaml

Executando

LocalStack - docker-compose

  • Necessário ter docker e docker-compose instalados;
  • Execute o seguinte comando na raiz do projeto: docker-compose -up;
  • Após iniciar, os recursos do LocalStack estarão disponíveis na porta: 4566 e região: sa-east-1
  • As configurações podem ser alteradas no arquivo docker-compose.yaml, além de (des)ativar os serviços desejados.

Aplicação

  • Existem diversas maneiras de iniciar uma aplicação SpringBoot;
  • Pode usar sua IDE de preferência (eu uso IntelliJ);
  • Ou executar o seguinte comando na raiz do projeto: ./gradlew bootRun
  • Independente de como executar, em caso de sucesso terá o log: Tomcat started on port(s): 8080 (http) with context path '', informando que a aplicação (endpoints) está sendo exposta na porta: 8080.

Endpoints

DynamoDb

No DynamoDbController temos 2 endpoints:

  • Listar todas as tabelas:

    curl --location --request GET 'http://localhost:8080/dynamo/list-tables'
    

    img.png

  • Inserir um item (json) na tabela:

    curl --location --request POST 'http://localhost:8080/dynamo?tableName=Table1' \
    --header 'Content-Type: application/json' \
    --data-raw '{
     "Id": 935,
     "Value": "content"
    }'
    

    img.png


SQS

No SqsController temos 2 endpoints:

  • Listar todas as filas:

    curl --location --request GET 'http://localhost:8080/sqs/list-queues'
    

    img.png

  • Postar uma mensagem (json) na fila:

    curl --location --request POST 'http://localhost:8080/sqs?queueName=Queue1' \
    --header 'Content-Type: application/json' \
    --data-raw '{
     "Id": 935,
     "Value": "content"
    }'
    

    dynamo-postman-2.png

Validando

Podemos usar as seguintes aplicações node, que são interfaces visuais para DynamoDb e SQS para verificar se os recursos foram criados localmente.

Instalando (necesário ter node/npm já instalado):

  • npm install dynamodb-admin -g
  • npm install sqs-admin -g

Executando via terminal (macOS):

  • DYNAMO_ENDPOINT=http://localhost:4566 AWS_REGION=sa-east-1 dynamodb-admin --open &
  • SQS_ENDPOINT=http://localhost:4566 AWS_REGION=sa-east-1 sqs-admin & open http://localhost:8002 &

Após executar as aplicações podemos consultar e manipular os recursos criados no navegador:


dynamodb-admin-1


dynamodb-admin-2


sqs-admin-1


sqs-admin-2


Para mais detalhes segue os respectivos repositórios dos projetos:

About

LocalStack with SQS and DynamoDB examples

Topics

Resources

Stars

Watchers

Forks

Languages

AltStyle によって変換されたページ (->オリジナル) /