1 | #!/usr/bin/env node
|
2 | var async = require('async')
|
3 | var aws = require('aws-sdk')
|
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 lodash = require('lodash')
|
8 | var startsWith = lodash.startsWith
|
9 | var padEnd = lodash.padEnd
|
10 | var padStart = lodash.padStart
|
11 | var filtering = process.argv[2] || ''
|
12 |
|
13 | function info(txt) {
|
14 | console.log(chalk.green(' λ ') + chalk.cyan.underline.dim(txt))
|
15 | }
|
16 |
|
17 | function list(callback) {
|
18 | lambda.listFunctions({}, (err, fns)=> {
|
19 | console.log(chalk.green(' λ ') + chalk.grey.dim('listing deployed lambdas'))
|
20 | var name = f=> f.FunctionName
|
21 | var start = name=> startsWith(name, filtering)
|
22 | var names = fns.Functions.map(name).filter(start).sort()
|
23 | callback(err, names)
|
24 | })
|
25 | }
|
26 |
|
27 | function aliases(names, callback) {
|
28 | var handlers = names.map(name=> {
|
29 | return function getAliasesFor(callback) {
|
30 | var params = {
|
31 | FunctionName: name,
|
32 | }
|
33 | lambda.listAliases(params, (err, na)=> {
|
34 | var readable = na.Aliases.map(a=> {
|
35 | return {
|
36 | name:a.Name,
|
37 | version:a.FunctionVersion
|
38 | }
|
39 | })
|
40 | callback(err, {name:name, aliases:readable})
|
41 | })
|
42 | }
|
43 | })
|
44 | |
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 | async.parallel(handlers, callback)
|
54 | }
|
55 |
|
56 | async.waterfall([list, aliases], function complete(err, result) {
|
57 | result.forEach(row=> {
|
58 | info(row.name)
|
59 | row.aliases.forEach(a=> {
|
60 | var latest = a.version === '$LATEST'
|
61 | var ver = padStart(a.version, 25, '.')
|
62 | var ca = chalk.green(' λ ')
|
63 | var cb = chalk.grey(' - ' + padEnd(a.name, 10, '.'))
|
64 | var cc = latest? chalk.dim.grey(ver) : chalk.dim.yellow(ver)
|
65 | console.log(ca + cb + cc)
|
66 | })
|
67 | console.log(chalk.green(' λ '))
|
68 | })
|
69 | })
|