Shorten Long URL Using CDK And Serverless

Shorten Long URL Using CDK And Serverless


3 min read

- There are many web apps provide the service of shortening your long url (free or charge). This ariticle introduces the way of using serverless with Cloud development toolkit (CDK)

- CDK helps to create this project by coding (python language), What's its benefits?

+ Infra structure as code

+ Update lambda function code and just need to execute cdk deploy, all the code and modules will be up-to-date

+ Create and destroy the structure quickly, and we can manage the structure by separate stacks such dynamodb stack, IAM stack, lambda stack and API Gateway stack.

Alt Text

What’s In This Document

πŸš€ Init CDK project

⚑ $ mkdir shorten-url
⚑ $ cd shorten-url
⚑ $ cdk init -l python

πŸš€ Create source code

  • Source: shorten-url

    ⚑ $ tree
    β”œβ”€β”€ create_src
    β”‚   └──
    β”œβ”€β”€ redirect_src
    β”‚   └──
    β”œβ”€β”€ requirements.txt
    β”œβ”€β”€ shorten_url
    β”‚   β”œβ”€β”€
    β”‚   └──
  • Add python boto3 module for lambda function sources

    ⚑ $ pip install boto3 -t create_src
    ⚑ $ pip install boto3 -t redirect_src
  • Cdk synth to check cdk valid

    ⚑ $ cdk synth
    Successfully synthesized to ~/shorten-url/cdk.out
    Supply a stack id (ShortenUrlDDB, ShortenUrlIAMRole, ShortenURLCreateLambda, ShortenURLRedirectLambda, ShortenURLApiGW) to display its template.
  • List stacks

    ⚑ $ cdk ls

πŸš€ Deploy stacks

⚑ $ cdk deploy '*'
  • Full stacks created in cloudformation: Alt Text

  • Lambda functions: Alt Text

  • Lambda function: create url Alt Text

  • Lambda function: redirect url Alt Text

  • API Gateway Alt Text Alt Text

πŸš€ Demo

  • POST a long url (here is not actually long)

    ⚑ $ curl -L -X POST '' -H 'Content-Type: application/json' --data-raw '{"url": ""}'
    "{\"short_url\": \"\"}"
  • Check dynamodb table Alt Text

    • Note that I add expiry_date attribute for TTL = 7 days
  • Click on the short URL Alt Text

Project vercel: Github Code πŸ‘©β€πŸ’» :

Blog Β· Web Β· Linkedin Β· Group Β· Page Β· Twitter