- A ShortURL represents a URL that has been shorten. They will be uniquely identified by a shortId.
Entity | PK | SK | GSI1PK | GSI1SK |
---|---|---|---|---|
ShortURL | SHORTURL#<shortId> | SHORTURL#<shortId> |
Access pattern | Target | Parameters | Notes |
---|---|---|---|
ShortURL (CRUD) | Main table | shortId | Uniqueness requirement on shortId |
-
dynampdb-local requires
Java Runtime Engine (JRE) version 6.x or newer
-
AWS account configured (default credential in ~/.aws or AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY set in terminal)
-
clone the repo
-
cd to/repo/path
-
npm install
-
npx serverless dynamodb install
-
npm run start:offline
dynamodb shell: http://localhost:8000/shell/
curl -X POST "http://localhost:3001/dev/shorten" -d '{"url":"https://www.zermatt.ch/en/Webcams"}' | jq
curl -X GET "http://localhost:3001/dev/shorten/cKFT4QP" | jq
curl -X GET "http://localhost:3001/dev/shorten" | jq
open "http://localhost:3001/dev/cKFT4QP"
The list operation returns up to 50 shortURLs and then the LastEvaluatedKey
allows to run a new scan starting this last key.
Encoding the nested object for a querystring:
const querystring = require('querystring');
const LastEvaluatedKey = {
SK: {
S: 'SHORTURL#cKFT4QP',
},
PK: {
S: 'SHORTURL#cKFT4QP',
},
};
querystring.escape(JSON.stringify(LastEvaluatedKey));
// outputs
// '%7B%22SK%22%3A%7B%22S%22%3A%22SHORTURL%23cKFT4QP%22%7D%2C%22PK%22%3A%7B%22S%22%3A%22SHORTURL%23cKFT4QP%22%7D%7D'
➜ aws-lambda-url-shortener git:(master) npx serverless deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
........
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service URL-shortener.zip file to S3 (39.3 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
......................................................................................................
Serverless: Stack update finished...
Service Information
service: URL-shortener
stage: dev
region: eu-west-1
stack: URL-shortener-dev
resources: 29
api keys:
None
endpoints:
POST - https://cxxxxxxxxb.execute-api.eu-west-1.amazonaws.com/dev/shorten
GET - https://cxxxxxxxxb.execute-api.eu-west-1.amazonaws.com/dev/shorten/{shortId}
GET - https://cxxxxxxxxb.execute-api.eu-west-1.amazonaws.com/dev/{shortId}
GET - https://cxxxxxxxxb.execute-api.eu-west-1.amazonaws.com/dev/shorten
functions:
createShortRL: URL-shortener-dev-createShortRL
getShortURL: URL-shortener-dev-getShortURL
redirectShortURL: URL-shortener-dev-redirectShortURL
listShortURL: URL-shortener-dev-listShortURL
layers:
None
Serverless: Deprecation warning: Starting with version 3.0.0, following property will be replaced:
"provider.iamRoleStatements" -> "provider.iam.role.statements"
More Info: https://www.serverless.com/framework/docs/deprecations/#PROVIDER_IAM_SETTINGS
**************************************************************************************************************************************
Serverless: Announcing Metrics, CI/CD, Secrets and more built into Serverless Framework. Run "serverless login" to activate for free..
**************************************************************************************************************************************
Anyone and everyone is welcome to contribute.
Find a bug or want to request a new feature? Please let me know by submitting an issue.
Licensed under the MIT License
A copy of the license is available in the repository's LICENSE file.