lessware-aws
v0.3.1
Published
aws middleware for lessware framework
Downloads
7
Maintainers
Readme
lessware-aws
aws middleware for lessware framework
Install
npm i -S lessware-aws
API
waitsForEmptyEventLoop
- a function that returns the middleware function which mutates a Lambda function's callbackWaitsForEmptyEventLoop
property.
- input parameter: an object whose keys determine behavior,
toWait
- a function whose input is thecontext
from the middleware and returns a boolean (defaultfalse
) used to tell Lambda if it should wait for all asynchronous activity to resolvecontextKey
- the key (default"ctx"
) storing a Lambda Function's 2nd parameter often called "context"
- output: the middleware function for lessware's
framework
usage.
service
- a function that returns the middleware function that attaches an instance of a service instance of the AWS SDK.
- input parameter: an object whose keys determine behavior,
service
a string that will be used to store the service instance on thecontext
object under a key calledaws
, e.g.context.aws.secrets
may store theSecretsManager
instance.serviceClass
: a string that identifies the service class in theAWS
SDK to use, e.g.SecretsManager
Example Usage
An API Controller using waitsForEmptyEventLoop
, service
middleware.
-- todo.js --
// define the API controller for 'todo' records.
const { framework } = require('lessware')
const aws = require('lessware-aws')
const databaseConnection = require('./db-setup')
module.exports = framework([
// tell lambda to return before all connections are closed
aws.waitsForEmptyEventLoop(),
// attach `secrets` to `context.aws`
aws.service({
serviceName: 'secrets',
serviceClass: 'SecretsManager'
}),
// example middleware to cache db connection
async context => {
// assumes `context.db` exists
if (!context.db.client) {
// use the `aws.secrets` service
const url = await context.aws.secrets.getSecretValue('db-url')
context.db.client = await databaseConnection(JSON.parse(url.SecretString))
}
return context
},
// example controller using cached database client
async context => {
const doc = await context.db.client.getRecord("todos", event.payload.id)
return {
statusCode: 200,
body: JSON.stringify(doc),
}
}
])
// -- index.js --
const todo = require('./todo')
const router = {todo}
// persist connections setup by middleware
const db = {}
exports.handler = async (event, ctx) => {
const controller = router[event.fieldName]
// invoke the controller that takes one object for framework "context"
return controller({event, ctx})
}
Maintainers
When buidling releases,
npm test
git checkout -b feature-branch
git commit -m "your message"
- bump version
npm version patch
npm version minor
npm publish