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.
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!!!!
- 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
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