This article teaches you how to create a Serverless RESTful API on AWS with the Serverless Framework. DynamoDB is used to store the data. The example’s source code is available on GitHub and can be used to speed up your project.

Implementing a RESTful API with API Gateway, Lambda, and DynamoDB

API Gateway provides a HTTP API endpoint that is fully configurable. You define the HTTP resources (like /user ), the HTTP methods on that resources (like POST , GET , DELETE , …) and the integration (e.g. Lambda function) that should be called to process the request. The Lambda function can then run whatever logic is needed to answer the request. API Gateway responds to the caller with the result of the Lambda function. The following figure demonstrates this flow.

Wiring together and deploying API Gateway and Lambda is time-consuming and error-prone. The Serverless Framework does all the heavy lifting for you. With just one command you get started.

The Serverless Framework

The Serverless Framework is under active development by Serverless, Inc., which was recently funded by the investors behind Docker, New Relic and Meteor.

To setup a new project you first need to install the Serverless Framework:

npm install -g serverless @ 1 . 0 . 0 - rc . 1



Now it’s time to create a new project folder:

mkdir my - first -service && cd my - first -service

serverless create



As a user of the framework you will get in touch with a YAML configuration file called serverless.yml .

The first part of the configuration defines the runtime:

service: aws-nodejs

provider: aws

runtime: nodejs6 .10



After that the interesting part starts: functions:

functions:

getUsers:

handler: handler.getUsers

events:

- http:

path: user

method : get



Let’s look at them line by line:

getUsers: Name of the function.

handler: handler.getUsers Maps to a JavaScript file handler.js exporting the function getUsers .

The magic happens inside the events: section where API Gateway is defined as an event source. HTTP GET requests on resource /user are mapped to the getUsers function.

The implementation of the function in handler.js is the same as with plain AWS Lambda.

module .exports.getUsers = ( event, context, cb ) => cb( null , {});



With one command you can deploy your service.

serverless deploy



This will package all the Source files, upload the zip file to S3 and create everything that is needed to do what you described in the configuration file. You can serverless deploy multiple times to update your service.

To remove the deployed service you run: