serverless-docker
Version:
This is a proof of concept to see if we can replicate Amazon API Gateway using docker images to run lambda
57 lines (47 loc) • 1.37 kB
JavaScript
const data = require('./data')
//
// POST ?Qualifier=Qualifier HTTP/1.1
// X-Amz-Invocation-Type: InvocationType
// X-Amz-Log-Type: LogType
// X-Amz-Client-Context: ClientContext
// Payload
const invoke20150331 = (lambda, db, req, res) => {
const functionName = req.params.functionName
const invocationType = req.get('X-Amz-Invocation-Type')
req.logger(`Looking up ${functionName} in registry`)
// TODO: validate
return data.getFunction(db, functionName).then((functionConfig) => {
const event = req.body || {}
req.logger(`Invoking ${functionName} with ${invocationType}`)
req.logger(JSON.stringify(functionConfig))
const invokePromise = lambda.invoke(functionConfig, event, req.logger)
switch (invocationType) {
case 'Event':
res.status(200)
res.send()
break
case 'RequestResponse':
default:
invokePromise
.then((result) => {
res.status(200)
res.send(result)
})
.catch((err) => {
req.logger('Invoking Lambda failed with error')
req.logger(err)
res.status(500)
res.send()
})
}
}).catch((err) => {
req.logger('Invoking Lambda failed with error')
req.logger(err)
res.status(500)
res.send()
})
}
module.exports = {
invoke20150331,
}