A handful of gulp commands typical to building AWS Lambda functions
Much of this was inspired/borrowed from Adam Neary's post here.
npm i --save-dev lambduh-gulp
Pass your instance of gulp into lambduh-gulp somewhere in your gulpfile.js
.
//gulpfile.js
var gulp = require('gulp');
var lambduhGulp = require('lambduh-gulp');
lambduhGulp(gulp);
Optionally, you don't need to require your own gulp
... but if you want to add any of your own tasks, you'll want your own instance.
The task you'll use the most – runs gulp lambda-zip
, then gulp upload
. See the next two funcs for details.
- Runs a
clean
to remove anydist/*
ordist.zip
- Pipes your
index.js
,bin/*
, andpackage.json
into adist
folder - Installs your production node-modules in
dist/
- Zips it up into a
dist.zip
- Creates and uploads a new Lambda function. If one exists, this will update the function's configuration, then re-upload the latest code.
This function assumes you have a local ./lambda-config.js
file with details on your lambda function. The parameters match those used by the (current) JS aws-sdk:
//lambda-config.js
module.exports = {
FunctionName: 'funcName',
Description: 'descrip',
Handler: 'index.handler',
Role: 'arn:aws:iam:etcetc',
Region: 'us-east-1',
Runtime: 'nodejs',
MemorySize: 320,
Timeout: 60,
Environment: 'production'
}
Uploading also assumes your have permissions to update lambda functions from your machine. This takes time to configure via the AWS CLI, but the resulting workflow is worth it. And besides, AWS's interface is much easier to use from the commandline relative to the non-sense they present in the console.
Note that if you're not careful, you may overwrite some of the gulp tasks this module uses. If any of these are silly (i.e. this module shouldn't own the namespace), let me know and I can prefix all of them:
clean
js
bin
node-mods
zip
lambda-zip
upload
zipload
I'd love some feedback/PRs/whatever - open an issue and let's talk.