Code Monkey home page Code Monkey logo

aws-lambda-url-shortener's Introduction

Deploy to AWS

Serverless URL shortener

Motivation

The idea of building myself a URL shortener had crossed my mind a few times before. However the idea was always dismissed as I usually didn't know where to start.

My main goal was to be able to create short and memorable URLs for personal things like my dotfiles install script (something the likes of migueli.to/dotfiles). In other words, URLs should be "branded", i.e. have my name on it, and customizable.

In the last few months I made up for the lack of technical knowledge by getting some training in Amazon Web Services (AWS). I found particularly interesting the section on serverless and AWS Lambda and decided that it was a good fit for my project.

Architecture

There are a bunch of AWS services supporting this project such as S3, CloudFront, API Gateway and Lambda. To glue everything together a CloudFormation stack is sitting on the driver seat as infrastructure-as-code (IaC) solution.

But none of this is necessarily complicated or has to be created by hand thanks to the Serverless Framework that allows you to decouple from the specifics of your cloud provider.

The actual code that runs in the cloud to provide the shorten functionality is written in Python 3.

The above is just a very rough overview of how everything actually works so I wrote down some more detailed notes for my future self.

The cake is a lie

Everyone that has been working in the "cloud" for a while should know that the magic behind it is... well... not that magical. At the end of the day it's just servers hidden somewhere. As the joke runs:

There is no cloud: it's just someone else's computer

Cloud and serverless are definitely buzzwords these days and should be taken with a grain of salt but every now and then it's exciting to take a look under the hood to see what's going on.

In the case of serverless and more especifically AWS Lambda the technology that backs it up is called Firecracker, a microVM (running on a server - where else?) that can launch in a fraction of a second, making it really scalable.

So THERE ARE SERVERS behind serverless. It's just that you don't care.

Acknowledgements

This work is heavily inspired by the following article:

aws-lambda-url-shortener's People

Contributors

mikybars avatar

Watchers

 avatar  avatar

aws-lambda-url-shortener's Issues

Allow users to remove shortened URLs

Problem

Currently there is no way of editing or removing shortened URLs so that they point to a different place. Therefore users that create URLs with meaningful names (aka custom paths, e.g. migueli.to/dotfiles) are stuck with their initial choice till the end of times.

Concerns

In order to support the remove feature we actually require the notion of users first so that a given user can not remove shortened URLs created by others. In addition, provided we implement users we might as well restrict custom paths only to logged in users to prevent "URL hoarding attacks".

Tasks

  • Implement user management via Cognito.
  • Map the Cognito configuration to the Serverless framework format.
  • Implement a new Lambda function to list all the shortened URLs created by a user.
  • Implement "My list of URLs" in the UI.
  • Implement a new Lambda function to remove a URL.
  • Modify the UI to include a remove button next to each URL.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.