Giter Site home page Giter Site logo

lambda-express's Introduction

logo

Lambda Express

NPM version

AWS Lambda function to integrate with Express from AWS API Gateway

overview

Install with npm install --save lambda-express

Express Integration

var lambdaExpress = require('lambda-express');
var express       = require('express');
var app           = express();

// ... initialize the app as usual ...


// create a handler function that maps lambda inputs to express
exports.handler = lambdaExpress.appHandler(app);

// or, if you want to do some preprocessing before delegating, pass a function in:
exports.handler = lambdaExpress.appHandler(function(event,context) {
    // ... do some cool stuff here ...

    return app;
});

API Gateway Integration

The request expects the following attributes in the event:

    event['queryString'] = 'name=value&foo=bar';        // query string from URL
    event['headers']     = '{key1=val1, key2=val2}';    // string with header values from API Gateway
    event['user-agent']  = '...';                       // string with user agent
    event['source-ip']   = '...';                       // string with source ip for request
    event['api-id']      = '...';                       // id of the api in API Gateway
    event['pathParams']  = '{key1=val1, key2=val2}';    // list of path param values
    event['http-method'] = '...';                       // http request method
    event['resource-path'] = '...';                     // the path for the API Gateway path

In API Gateway, this is accomplished with the following integration request mapping template:

{
  "stage": "$context.stage",
  "request-id": "$context.requestId",
  "api-id": "$context.apiId",
  "resource-path": "$context.resourcePath",
  "resource-id": "$context.resourceId",
  "http-method": "$context.httpMethod",
  "source-ip": "$context.identity.sourceIp",
  "user-agent": "$context.identity.userAgent",
  "account-id": "$context.identity.accountId",
  "api-key": "$context.identity.apiKey",
  "caller": "$context.identity.caller",
  "user": "$context.identity.user",
  "user-arn": "$context.identity.userArn",
  "queryString": "$input.params().querystring",
  "headers": "$input.params().header",
  "pathParams": "$input.params().path",
  "allParams": "$input.params()"
}

On success, the following data structure is returned to Lambda:

{
    contentType: '',    // string with Content-Type header from express response
    payload:     ''     // base64 encoded string of the output from express response
}

In API Gateway, this is handled with an integration response mapping template of:

$util.base64Decode( $input.path('$.payload') )

And a header mapping for Content-Type of integration.response.body.contentType

If you want more headers on the return request, then add a responseHeaders key to the integration request mapping, separating headers by a :. For example:

  ...
  "pathParams": "$input.params().path",
  "allParams": "$input.params()",
  "responseHeaders": "Set-Cookie:X-Custom-Header"

Remember, don't forget the ,. Then do the same as you did for Content-Type in the header mapping, e.g. integration.response.body.Set-Cookie.

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.