Giter Club home page Giter Club logo

localstack-aws's Introduction

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:

localstack-aws's People

Contributors

marcusvoltolim avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

valdyrtorres

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.