Projeto desenvolvido para estudo e portfólio com foco em:
- Java 21 + Spring Boot
- JPA / Hibernate
- PostgreSQL
- AWS SQS
- AWS S3
- Terraform
- LocalStack
- Ambiente híbrido: WSL (infraestrutura) + Windows (aplicação)
Fluxo da aplicação:
-
POST /documents -
Documento salvo no PostgreSQL
-
Evento publicado na fila SQS
-
Consumer realiza polling da fila
-
Status do documento evolui:
- RECEIVED → PROCESSING → DONE
-
Resultado salvo no S3
API → PostgreSQL → SQS → Worker → S3
- Aplicação Spring Boot
- PostgreSQL rodando via Docker (WSL)
- Docker
- LocalStack
- AWS CLI
- Terraform
Dentro do WSL:
docker start postgres
docker psDentro do WSL:
docker run -d \
--name localstack \
-p 4566:4566 \
-e LOCALSTACK_AUTH_TOKEN=SEU_TOKEN_AQUI \
localstack/localstackVerifique se está rodando:
docker psDocumentação oficial: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
Comandos utilizados:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --versionaws --endpoint-url=http://localhost:4566 sqs list-queues
aws --endpoint-url=http://localhost:4566 s3 lssudo apt update
sudo apt install terraform
terraform -versionCriar diretório:
mkdir document-processor-infra
cd document-processor-infra
touch main.tfprovider "aws" {
access_key = "test"
secret_key = "test"
region = "us-east-1"
s3_use_path_style = true
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
sqs = "http://localhost:4566"
s3 = "http://localhost:4566"
sts = "http://localhost:4566"
}
}Aplicar:
terraform init
terraform applyConfirmar:
aws --endpoint-url=http://localhost:4566 sqs list-queues
aws --endpoint-url=http://localhost:4566 s3 lsspring.application.name=file-processing
server.port=8080
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://localhost:5432/seu_banco
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.DriverPOST http://localhost:8080/documents
Body:
{
"fileName": "teste.pdf"
}No WSL:
aws --endpoint-url=http://localhost:4566 sqs receive-message \
--queue-url http://localhost:4566/000000000000/document-queueaws --endpoint-url=http://localhost:4566 s3 ls s3://document-resultsAWS CLI: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
LocalStack: https://docs.localstack.cloud/aws/integrations/aws-native-tools/aws-cli/
Obrigada!