Destaque

LinkShortener

Encurtador de URLs serverless desenvolvido na AWS, com rastreamento de acessos, autenticação por API Key, infraestrutura como código e expiração automática de dados.

Principais pontos
  • Arquitetura serverless com AWS Lambda
  • API Gateway e Lambda Authorizer
  • DynamoDB com TTL
  • Rastreamento assíncrono de acessos
  • Infraestrutura como código com CloudFormation
  • CI/CD com GitHub Actions
  • Observabilidade com CloudWatch
  • Alertas automáticos via SNS
  • IAM com princípio do menor privilégio
Tecnologias utilizadas
LinkShortener

Visão geral

O LinkShortener é um encurtador de URLs construído sobre uma arquitetura serverless na AWS.

O projeto foi desenvolvido para colocar em prática diversos conceitos de infraestrutura em nuvem em uma única aplicação: Lambda, API Gateway, DynamoDB, S3, CloudFormation, IAM, CI/CD, observabilidade e processamento assíncrono.

Apesar de possuir uma funcionalidade simples para o usuário, sua infraestrutura envolve vários serviços independentes trabalhando em conjunto.

Como funciona

O sistema possui três fluxos principais.

Criação de links

O cliente envia uma URL para a API. Antes de chegar à função principal, a requisição passa pelo Lambda Authorizer, que valida a API Key.

Depois disso, a Lambda valida os dados, gera o identificador curto e armazena o registro no DynamoDB.

Redirecionamento

Quando alguém acessa o identificador curto:

  1. API Gateway recebe a requisição.
  2. A Lambda consulta o DynamoDB.
  3. O registro é localizado através do slug.
  4. A aplicação retorna um redirecionamento HTTP 301.
  5. O registro de acesso é processado de forma assíncrona pela Lambda de analytics.

Analytics

A função de analytics registra os acessos em uma tabela separada do DynamoDB.

Esse fluxo mantém o redirecionamento independente do processamento das métricas.

Arquitetura

A arquitetura utiliza serviços gerenciados da AWS para evitar a necessidade de servidores persistentes.

                 ┌──────────────┐
                 │    Cliente   │
                 └──────┬───────┘
                        │
                        ▼
                 ┌──────────────┐
                 │ API Gateway  │
                 └──────┬───────┘
                        │
             ┌──────────┴──────────┐
             ▼                     ▼
      Lambda Authorizer      Lambda Principal
                                   │
                                   ▼
                              DynamoDB
                                   │
                                   ▼
                           Lambda Analytics
                                   │
                                   ▼
                              Clicks Table

A infraestrutura é definida como código através do CloudFormation.

O frontend estático é hospedado no Amazon S3, enquanto as funções backend são executadas pelo AWS Lambda.

Funcionalidades

  • Encurtamento de URLs através de identificadores curtos.
  • Redirecionamento HTTP 301 para os endereços originais.
  • Contagem de acessos através de uma função de analytics.
  • API Key para proteger a criação de links.
  • Validação de payloads e limites de tamanho.
  • Expiração automática de links e registros de analytics através do TTL do DynamoDB.
  • Dashboard de observabilidade no CloudWatch.
  • Alertas de erros através do SNS.
  • Deploy automatizado com GitHub Actions.
  • Infraestrutura reproduzível com CloudFormation.

Decisões técnicas

Arquitetura Serverless

A utilização de Lambda, API Gateway e DynamoDB elimina a necessidade de manter servidores dedicados para a aplicação.

DynamoDB com TTL

O TTL permite que links e registros antigos sejam removidos automaticamente, sem a necessidade de workers ou tarefas periódicas de limpeza.

Lambda Authorizer

A autenticação da rota de criação fica separada da lógica principal da aplicação.

IAM com menor privilégio

Cada função Lambda possui apenas as permissões necessárias para executar sua responsabilidade, evitando acesso desnecessário aos demais recursos.

Infraestrutura como código

O CloudFormation concentra a definição dos recursos da aplicação e permite reproduzir a infraestrutura através do pipeline de deploy.

Processo

O projeto foi utilizado para praticar uma visão mais completa do ciclo de desenvolvimento de uma aplicação serverless.

Além da implementação das funções, foram trabalhados:

  • definição de infraestrutura através de CloudFormation;
  • testes automatizados com pytest;
  • pipeline de CI/CD;
  • deploy de backend e frontend;
  • leitura dinâmica dos recursos criados pelo CloudFormation;
  • monitoramento através do CloudWatch;
  • alertas de falha com SNS;
  • aplicação de princípios de segurança através do IAM.