Skip to content

⭐ Projeto básico para trabalhar com Spring Boot + LocalStack + AWS

Notifications You must be signed in to change notification settings

thomasdacosta/spring-boot-localstack

Repository files navigation

Spring Boot com Localstack

Vamos criar uma aplicação com Spring Boot que funciona com os recursos do LocalStack e da AWS. Iremos mostrar passo a passo como criar e configurar a aplicação do ZERO.

Video do YouTube:

Vídeo do YouTube

Capítulos do Video:

00:00 Introdução
00:31 O que é o Spring Cloud?
01:31 Qual versão usar do Spring Cloud em seu projeto Spring Boot?
03:01 Qual versão usar do Spring Cloud AWS em seu projeto Spring Boot?
03:41 Criando o projeto com Spring Initializr
05:46 Gerando o projeto e descompactando
06:19 Abrindo o projeto na IDE
08:15 Incluindo as dependências do Spring Cloud e Spring Cloud AWS
11:16 Incluindo a dependência do AWS Parameter Store
12:45 Criando o arquivo bootstrap.yml
15:20 Ajustando o application.properties
15:53 Incluindo o profile localstack para a inicialização do Spring Boot
16:55 O que é um profile no Spring Boot?
17:52 Criando o docker-compose.yml do LocalStack
19:09 Inicializando o LocalStack
21:03 Criando a configuração do Parameter Store no LocalStack
24:44 Executando a aplicação
26:55 Criando a classe de configuração
29:31 Criando a classe Controller
32:33 Executando a aplicação para o teste final
33:24 Executando o teste no Insomnia
34:43 EASTER EGG!!!!

Passo a passo para criar e configurar o projeto

  • Gerar projeto no Spring Initialzr:
    • Nome: spring-boot-localstack
  • Incluir dependência do Spring Cloud AWS:
<dependency>
    <groupId>io.awspring.cloud</groupId>
    <artifactId>spring-cloud-aws-dependencies</artifactId>
    <version>${spring.cloud-aws}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  • Incluir versão do Spring Cloud AWS no properties:
<spring.cloud-aws>2.4.2</spring.cloud-aws>
  • Incluir dependência do Spring Cloud AWS Starter:
<dependency>
    <groupId>io.awspring.cloud</groupId>
    <artifactId>spring-cloud-starter-aws</artifactId>
</dependency>
  • Incluir dependência do Spring Cloud Starter Bootstrap:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  • Incluir dependência do Parameter Store:
<dependency>
    <groupId>io.awspring.cloud</groupId>
    <artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId>
</dependency>
  • Incluir bootstrap.yml:
spring:
  application:
    name: spring-boot-localstack
---
spring:
  config:
    activate:
      on-profile: localstack
aws:
  paramstore:
    enabled: true
    endpoint: http://localhost:4566
  • Atualizar application.properties:
### Server
server.port=8080

### Log
logging.file.path=@logs.path@
logging.path=@logs.path@

### Proxy
proxy.host=
proxy.port=
proxy.enabled=

### Spring
server.error.whitelabel.enabled=false
spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false
management.endpoints.web.exposure.include=health, info

### Info
info.app.name=@artifactId@
info.app.version=@version@
info.app.description=@name@
info.app.contact=thomasdacosta@gmail.com
info.app.ip=${spring.cloud.client.ip-address}
info.app.profile=${spring.profiles.active}

### AWS
s3.bucket=awslocalstack
  • Adicionar na inicialização o profile do localstack
  • Incluir docker-compose.yml do LocalStack na aplicação:
version: "3.8"

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559"  # external services port range
    environment:
      - DEBUG=${DEBUG-}
      - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR-}
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
  • Inicializar LocalStack
  • Incluir diretório de log no pom.xml:
<logs.path>./logs</logs.path>
  • Criar uma configuração no Parameter Store:
@echo off
aws --endpoint http://localhost:4566 --profile localstack ssm put-parameter --name "/config/spring-boot-localstack_localstack/helloWorld" --value "Hello World Parameter Store" --type String
  • Executar aplicação
  • Criar classe para obter configuração do Parameter Store
  • Criar classe de Controller
  • Executar aplicação
  • Executar no Insomnia

Subindo na AWS com Academy Learner Lab:

Nesse exemplo utilizamos AWS Academy Learner Lab nas aulas do AWS Academy

  • Iniciar o Lab;
  • Criar uma máquina EC2;
  • Gerar a chave do Putty;
  • Alterar os Security Groups para acessar a porta 8080;
  • Incluir LabInstanceProfile no EC2 para acesso as outros recursos;
  • Acessar via Putty;
  • Atualizar o SO:
    sudo yum update
    
  • Instalar o Java:
    sudo yum install java-17-amazon-corretto
    
  • Executar os scripts do arquivo localstack-production.bat no AWS Cloud Shell;
  • Copiar o arquivo JAR para a máquina;
  • Enviar o start.sh e spring-boot-localstack.service para a máquina;
  • Executar o script de subida;
  • Copiar o arquivo spring-boot-localstack.service para /etc/systemd/system
  • Criar serviço no Linux:
    sudo systemctl enable spring-boot-localstack.service
    sudo systemctl start spring-boot-localstack.service
    sudo systemctl stop spring-boot-localstack.service
    
  • Criar o RDS usando o Free Tier;
  • Atribuir o Security Group do EC2 para as Inbound Rules do RDS para funcionar corretamente.

Thomás da Costa - https://thomasdacosta.com.br

About

⭐ Projeto básico para trabalhar com Spring Boot + LocalStack + AWS

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published