Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



    REST GET from DynamoDB via Lambda

    Continuous Integration Coverage Status Downloads Version License


    $ npm init
    $ npm install marchio-lambda-get --save

    Lambda Setup



    Create Test Role

    • Browse to:
    • Click: Roles (from the left column)
    • Click: Create new role
    • Step 1: Select role type
    • Expand Section: AWS Service Role
    • For AWS Lambda, click: Select
    • Step 2 is automatically skipped
    • Step 3: Attach policy
    • Select AmazonDynamoDBReadOnlyAccess policiy
    • Click: Next Step
    • Create a name for the role (like lambda-db-get-only)
    • Click: Create role

    Create Lambda Function

    • Browse to:
    • Click: Create a Lambda Function
    • Select: Blank Function
    • Click: Next
    • Name: marchio-get
    • Description: Marchio service
    • Runtime: Node.js 4.3
    • Set the Role
    • Role: Choose and existing role
    • Existing role: service-role/(name of role you created earlier)
    • Click: Next
    • Click: Create Function

    Setup API Gateway

    • Browse to:
    • Click: Create API
    • Select: New API
    • API name: marchio-get
    • Description: Marchio service
    • Click: Create API
    • Click on the slash (/)
    • Drop down: Actions
    • Select: Create Resource
    • Check: Configure as proxy resource
    • (Optionally enabled CORS)
    • Click: Create Resource
    • For Integration type select: Lambda Function Proxy
    • Lambda Region: For example: us-east-1
    • Lambda Function: marchio-get
    • Click: Save
    • Add Permission to Lambda Function: OK
    • Drop down: Actions
    • Select: Deploy API
    • Define a new stage (call it "test")
    • Click: Deploy
    • Save the Invoke URL

    Create DynamoDB Table

    If you've already setup a demo for marchio-lambda-post then you may have this table already. If not, create it and load it with a few test records.

    • Browse to:
    • Click: Create Table
    • Table name: mldb
    • Primary key: eid
    • The type should be the default (string)
    • Click: Create
    • After some churning, click the Capacity tab
    • Set the Read / Write capacity units to 1 to save money while testing
    • Click: Save

    Example and Deploy

    See the deployment example located in the repo under:

    • examples/deploy

    It contains a deployment script and an example lambda source file.

    • Install the dependencies by running:
    $ npm install

    To run the script you must first make it runnable:

    $ chmod +x

    To test:

    • Deploy the API via API Gateway
    • Create an environment variable called AWS_HOST_MARCHIO_GET which is set to the invocation url
    • Test the deployment using curl (substitute a valid eid value):
    $ curl -i -X GET -H "Accept: applications/json" \
    • The response should contain a 200 status code and a copy of the record.





    Factory module




    Factory module

    marchio-lambda-get-factory.create(spec) ⇒ Promise

    Factory method It takes one spec parameter that must be an object with named parameters

    Kind: static method of marchio-lambda-get-factory
    Returns: Promise - that resolves to {module:marchio-lambda-get}

    Param Type Description
    spec Object Named parameters object
    spec.event Object Lambda event
    spec.context Object Lambda context
    spec.callback function Lambda callback
    spec.model Object Table model

    Example (Usage example)

    // Lambda root file
    "use strict";
    var mlFactory = require('marcio-lambda-get'); 
    exports.handler = function(event, context, callback) {
        var model = {
            name: 'mldb',   // must match DynamoDB table name
            partition: 'eid', // primary partition key - cannot be reserved word (like uuid)
            // sort: 'gid',
            fields: {
                eid:      { type: String },  // return eid / primary partition in GET results
                // gid:      { type: String },  // return gid / primary sort in GET results
                email:    { type: String, required: true },
                status:   { type: String, required: true, default: "NEW" },
                password: { type: String, select: false },  // select: false, exclude from query results
            event: event, 
            context: context,
            callback: callback,
            model: model
        .catch(function(err) {


    To test, go to the root folder and type (sans $):

    $ npm test



    In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.

    Version History

    Version 0.3.1

    • updated deploy example

    Version 0.3.0

    • removed model/table name from url
    • updated deploy-build examples

    Version 0.2.2

    • removed comment from demo

    Version 0.2.1

    • Added support for primary sort key

    Version 0.2.0

    • Change model.primary to model.partition

    Version 0.1.5

    • Updated doc and demo deploy to show how to return primary key if required

    Version 0.1.4

    • Integrated module documentation into readme

    Version 0.1.3

    • Updated role documentation

    Version 0.1.2

    • Updated service to only return record and not Item wrapper.

    Version 0.1.1

    • Fixed issue with object passed to DynamoDB.getItem

    Version 0.1.0

    • initial release




    npm i marchio-lambda-get

    Downloadsweekly downloads








    last publish


    • avatar