slush-aws-lambda
Version:
A slush generator to scaffold an AWS Lambda function package and upload it to AWS.
68 lines (58 loc) • 1.75 kB
JavaScript
/* eslint-disable no-console */
const clc = require("cli-color")
const { join } = require("path")
const { env = "staging" } = require("simple-argv")
const { role: { assumeRole } } = require("./iam.js")
const { getServiceInstance } = require("./common.js")
module.exports = (next, credentials) => {
let lambdaConfig
try {
lambdaConfig = require(join(__dirname, "..", "lambda-config.js"))(env)
} catch (err) {
if (err.message.indexOf("Cannot find module") !== -1) {
throw new Error(`WARNING! lambda config not found, run command ${clc.cyan("gulp configure")}`)
} else {
throw err
}
}
const { Handler, Environment } = lambdaConfig.ConfigOptions
let payload
try {
payload = require(join(__dirname, "..", "test-payload.js"))
} catch (err) {
if (err.message.indexOf("Cannot find module") !== -1) {
throw new Error("WARNING! \"test-payload.js\" not found!")
} else {
throw err
}
}
const fail = err => {
console.log({ errorMessage: err })
next(err)
process.exit()
}
const succeed = data => {
if(data) console.log(data)
next()
process.exit()
}
const done = (err, data) => {
if (err) fail(err)
else succeed(data)
next()
process.exit()
}
const callback = (err, data) => {
if (err) return fail(err)
succeed(data)
}
const handler = Handler.split(".")
assumeRole(lambdaConfig.ConfigOptions.RoleName, credentials, lambdaConfig.Region)
.then(() => {
const lambda = require(join(__dirname, "..", "src", handler[0]))[handler[1]]
if (Environment && Environment.Variables) {
Object.assign(process.env, Environment.Variables)
}
lambda(payload, { fail, succeed, done }, callback)
})
}