1 | #!/usr/bin/env node
|
2 | var aws = require('aws-sdk')
|
3 | var async = require('async')
|
4 | var region = process.env.AWS_REGION || 'us-east-1'
|
5 | var lambda = new aws.Lambda({region:region})
|
6 | var chalk = require('chalk')
|
7 | var isUndefined = require('lodash').isUndefined
|
8 | var exists = require('path-exists').sync
|
9 | var join = require('path').join
|
10 |
|
11 | function invoke(name, alias, payload, callback) {
|
12 |
|
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 |
|
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 |
|
22 | var fn = require(path).name
|
23 | if (isUndefined(fn)) callback(Error('package.json missing "name" key'))
|
24 |
|
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 |
|
47 | var invoking = require.main === module
|
48 | if (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 |
|
67 | module.exports = invoke
|