UNPKG

1.84 kBJavaScriptView Raw
1#!/usr/bin/env node
2var aws = require('aws-sdk')
3var async = require('async')
4var region = process.env.AWS_REGION || 'us-east-1'
5var lambda = new aws.Lambda({region:region})
6var chalk = require('chalk')
7var isUndefined = require('lodash').isUndefined
8var exists = require('path-exists').sync
9var join = require('path').join
10
11function invoke(name, alias, payload, callback) {
12 // all params required
13 if (isUndefined(name)) callback(Error('name required'))
14 if (isUndefined(alias)) callback(Error('alias required'))
15 if (isUndefined(payload)) callback(Error('payload required'))
16 if (isUndefined(callback)) callback(Error('callback required'))
17 // name needs to be a valid node project
18 var path = join(process.cwd(), name, 'package.json')
19 var missing = !exists(path)
20 if (missing) callback(Error(name + ' package.json not found'))
21 // the name of the lambda function
22 var fn = require(path).name
23 if (isUndefined(fn)) callback(Error('package.json missing "name" key'))
24 // we're good!
25 var params = {
26 FunctionName: fn,
27 LogType: 'Tail',
28 Payload: payload,
29 Qualifier: alias
30 }
31 lambda.invoke(params, function wrap(err, res) {
32 if (err) {
33 callback(err)
34 }
35 else {
36 var r = JSON.parse(res.Payload)
37 if (r.errorMessage) {
38 callback(Error(r.errorMessage))
39 }
40 else {
41 callback(null, r)
42 }
43 }
44 })
45}
46
47var invoking = require.main === module
48if (invoking) {
49
50 var name = process.argv[2]
51 var alias = process.argv[3]
52 var payload = process.argv[4]
53
54 console.log(chalk.green(' λ ') + chalk.dim('invoking ' + chalk.cyan(name)))
55
56 invoke(name, alias, payload, (err, res)=> {
57 if (err) {
58 console.error(chalk.red(err))
59 }
60 else {
61 var j = JSON.stringify(res, null, 2)
62 console.log(chalk.green(j))
63 }
64 })
65}
66
67module.exports = invoke