rocketseat-education /
ignite-rn-02-ignite-teams
Sgundo projeto desenvolvido na Trilha de React Native 2022 do Ignite
Loading repository data…
daniel-azevedo-maia / repository
Projeto 02 do desafio #50DaysOfCloud, criado por mim. Este repositório contém um encurtador de URLs 100% serverless usando AWS Lambda, DynamoDB e Python. A solução é escalável, sem servidores dedicados, e roda totalmente dentro da camada gratuita da AWS, ideal para portfólio e aprendizado prático em cloud computing.
Desafio: 50DaysOfCloud
Autor: Daniel Azevedo Maia
Este projeto faz parte do desafio #50DaysOfCloud e implementa um encurtador de URLs 100% serverless utilizando AWS Lambda, DynamoDB e Python. O objetivo é construir uma aplicação útil, escalável, sem custo fixo e totalmente dentro da camada gratuita da AWS.
Criar um encurtador de links é um excelente exemplo de uso da arquitetura serverless, ideal para aplicações de baixo custo e alta escalabilidade.
url-shortenershortId (tipo String)On-DemandOutros campos como originalUrl e createdAt são adicionados dinamicamente na aplicação.
shortenUrlFn{
"url": "https://www.lojaexemplo.com/produto/oferta?id=8934757&utm_campaign=linkedin&utm_source=referral&utm_medium=social"
}
{
"shortId": "23gpWj",
"shortUrl": "/u/23gpWj"
}
shortenUrlFn-role-xxxxAmazonDynamoDBFullAccess (idealmente, poderia ser mais restritiva no futuro)Foi realizado um teste manual pelo console do AWS Lambda com o seguinte payload:
{
"body": "{"url": "https://www.lojaexemplo.com/produto/oferta?id=8934757&utm_campaign=linkedin&utm_source=referral&utm_medium=social"}"
}
A função gerou corretamente um identificador curto, salvou no DynamoDB e retornou os dados esperados.
https://www.lojaexemplo.com/produto/oferta?id=8934757&utm_campaign=linkedin&utm_source=referral&utm_medium=social
https://xxxxxx.execute-api.amazonaws.com/dev/u/rfeLta
Mesmo sem domínio próprio, a URL já é consideravelmente mais curta. Em produção, pode-se usar algo como https://dani.io/u/xyz123.
No post anterior, mostrei como criei uma função Lambda que recebe uma URL em JSON, gera um hash curto e salva no DynamoDB.
Até então, usava o botão de Test no console do Lambda. Mas chegou a hora de expor um endpoint HTTP público real. Usei o API Gateway para isso.
1️⃣ Criei uma API HTTP no API Gateway chamada url-shortener-api
2️⃣ Escolhi a função shortenUrlFn como integração
3️⃣ Configurei a rota: POST /shorten
{
"shortId": "ML9FGd",
"shortUrl": "/u/ML9FGd",
"originalUrl": "https://www.lojaexemplo.com/produto/oferta?id=8934757&utm_campaign=linkedin&utm_source=referral&utm_medium=social"
}
OBS.: fiz o Deploy do estágio chamado prod com deploy automático.
Agora, podemos chamar esse endpoint com POST:
https://iycunk6cod.execute-api.us-east-1.amazonaws.com/prod/shorten
Criei uma segunda função Lambda chamada redirectUrlFn.
TABLE_NAME = url-shortenerGET /u/{shortId}redirectUrlFnSe você acessar diretamente:
https://www.lojaexemplo.com/produto/oferta?id=8934757&utm_campaign=linkedin&utm_source=referral&utm_medium=social
A página abrirá normalmente.
Mas se acessar:
https://iycunk6cod.execute-api.us-east-1.amazonaws.com/prod/u/ML9FGd
Você será redirecionado para a mesma página original — agora com link mais curto, limpo, e sem precisar de nenhum servidor!
✅ Função Lambda shortenUrlFn
✅ Tabela no DynamoDB (url-shortener)
✅ Permissão para shortenUrlFn gravar no DynamoDB
✅ API Gateway com rota POST /shorten integrada
✅ Deploy automático para o estágio prod
✅ Função redirectUrlFn para leitura e redirecionamento
✅ Rota GET /u/{shortId} conectada ao redirectUrlFn
✅ Redirecionamento HTTP 301 implementado
✅ Tratamento de erro 404 para shortId inexistente
✅ Testes com curl e navegador validados com sucesso
Gostei muito de montar esse encurtador de URLs apenas para praticar. Já deletei as Lambdas e os recursos, então sem problemas com questões de segurança. Mas, se fosse um ambiente real, penso ser necessário:
AWS Lambda DynamoDB Serverless Python Cloud API Gateway DevOps Free Tier InfraComoCódigo Portfólio
Desafio: #50DaysOfCloud por Daniel Azevedo de Oliveira Maia
Selected from shared topics, language and repository description—not editorial ratings.
rocketseat-education /
Sgundo projeto desenvolvido na Trilha de React Native 2022 do Ignite
beerandcode-oficial /
Projeto referente à live Arquitetura multi-tenancy com Laravel do dia 08/02/2021 19:00
samlucax /
Projeto do video Pair Testing #02
lucaslattari /
Repositório do projeto apresentado no vídeo "Bot que cria podcast sozinho?? - Python Faz Pra Mim 02" do canal Universo Discreto
rocketseat-creators-program /
Projeto que ensina como criar um Producer escutando um consumer do servidor do Kafka
fcte-pi1 /
Repositório de PI1 do Grupo 02 da turma do prof. Lui Habl, focado no desenvolvimento do projeto MicroMouse.