Este projeto implementa um sistema de encurtamento de URLs usando microserviços, aproveitando a infraestrutura da AWS, incluindo S3, Lambda e API Gateway. O projeto consiste em dois microserviços principais: um para criação de URLs encurtadas e outro para redirecionamento dessas URLs.
- AWS Lambda: Funções para criação e redirecionamento das URLs.
- AWS S3: Armazenamento dos metadados das URLs encurtadas.
- API Gateway: Exposição das APIs REST para interagir com as funções Lambda.
- Java 17: Linguagem utilizada para o desenvolvimento dos microserviços.
- Maven: Gerenciador de dependências e construção do projeto.
-
Microserviço de Criação de URL
- Descrição: Gera uma URL encurtada a partir de uma URL original e define o tempo de expiração.
- Funcionalidade:
- Recebe uma URL original e um tempo de expiração.
- Armazena os dados em um bucket S3.
- Retorna o código encurtado.
-
Microserviço de Redirecionamento
- Descrição: Redireciona o usuário para a URL original com base no código encurtado.
- Funcionalidade:
- Recebe o código encurtado.
- Valida o tempo de expiração.
- Redireciona o usuário ou retorna erro, caso a URL esteja expirada.
- AWS CLI configurado.
- Bucket S3 criado (ex:
garciajops-url-shortener-storage). - IAM Role com permissões de acesso ao S3 e Lambda.
-
Construir o Projeto:
mvn clean package
-
Criar as Funções Lambda:
- Faça o upload dos pacotes gerados para a AWS Lambda.
- Defina o handler correto (
com.garciajops.redirecturlshortner.Main::handleRequestecom.garciajops.createurlshortener.Main::handleRequest).
-
Configurar o API Gateway:
- Crie duas rotas:
- POST /create: Aponta para a função Lambda de criação.
- GET /{shortUrlCode}: Aponta para a função Lambda de redirecionamento.
- Crie duas rotas:
- Método: POST
- Endpoint:
/create - Corpo da Requisição:
{ "originalUrl": "https://www.exemplo.com", "expirationTime": "1700000000" } - Resposta:
{ "code": "abc12345" }
- Método: GET
- Endpoint:
/{shortUrlCode}(ex:/abc12345) - Resposta:
- 302: Redirecionamento para a URL original.
- 410: URL expirada.
O projeto utiliza as seguintes dependências Maven:
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.17.106</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
</dependencies>