Skip to content

NPM package to enable running Clojurescript code on AWS Lambda NodeJS runtime

License

Notifications You must be signed in to change notification settings

vharmain/nbb-lambda-adapter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

THIS MODULE IS NO MORE NECESSARY

As of 6.1.2022 AWS Lambda NodeJS 14.x Runtime supports top-level await for es-modules. It's now possible to just let nbb to load cljs code on the top-level without the adapter.

Example index.mjs

import { loadFile } from 'nbb';

const { handler } = await loadFile('./example.cljs');

export { handler }

See also https://github.com/vharmain/nbb-serverless-example


Old README

nbb-lambda-adapter

NPM package to enable running Clojurescript code on AWS Lambda NodeJS runtime using nbb.

Major benefit with this library is rapid Lambda development directly in the Lambda Console. There's no need to compile CLJS to JS so the feedback loop is very quick.

This approach is also compatible with all existing tooling for node. Use CDK, SAM, Serverless or whatever build/deployment tool.

index.js

const handlerProxy = require("nbb-lambda-adapter");

module.exports = {
  handler: handlerProxy("demo.cljs", "handler"),
};

demo.cljs

(ns demo)

(defn handler [event _ctx]
  (js/console.log event)
  (js/Promise.resolve #js{:hello "world"}))

;; Exports
#js {:handler handler}

Setup

  • npm init
  • npm install --save nbb-lambda-adapter
  • Create index.js according to example above
  • Create demo.cljs according to example above
  • zip -r app.zip .
  • Go to AWS Console -> Lambda -> Author from Scratch -> Runtime Node.s 14.x + arm64, configure with 512mb or more (for fast startup)
  • Upload app.zip to your Lambda, test and start hacking in the inline code editor

Tips & tricks

  • nbb loads slowly with 128MB of memory. Increase the timeout or add more memory. Startup will speed up significantly when more memory is added because Lambda gets also more CPU power with the extra memory.
  • ARM64 architecture provides cost and speed benefits over x86
  • aws-sdk is available on the NodeJS runtime and it can be required (require '["aws-sdk$default" :as AWS])

AWS SDK example

(ns example
    (:require ["aws-sdk$default" :as AWS]))

(def s3-client (AWS/S3.))

(defn handler [event _ctx]
  (-> s3-client
      (.listObjects #js{:Bucket "nbb-adapter-test"})
      .promise
      (.then js/console.log)))

;; Exports
#js {:handler handler}

About

NPM package to enable running Clojurescript code on AWS Lambda NodeJS runtime

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published