We are working on a project/framework that aids in deploying and maintaining code in AWS Lambda. I want to build/bundle all node.js code for a lambda function into one js file because:
We don't want to create a custom bundler to do this because there are many options already out there (systemjs,browserify,webpack etc). HOWEVER we are concerned with issues with some node modules not playing well with bundlers/builders.
Specifically aws-sdk
has known issues with webpack, says it has browserify support but I've talked to people who have had issues with browserify'ing aws-sdk
We want to pick an existing bundler (or 2), but we want to make sure it works for as many modules/code as possible. We are trying to create a plugin ecosystem for JAWS, so getting this right is important (don't want to turn people off because module X they use wont bundle).
Questions:
You use a deployment package to deploy your function code to Lambda. Lambda supports two types of deployment packages: container images and . zip file archives. To create the deployment package for a .
You can now develop AWS Lambda functions using the Node. js 16 runtime. This version is in active LTS status and considered ready for general use.
In order to update a AWS Lambda Nodejs function with dependencies, follow these steps: Step 1: Open a terminal or shell with the command line. Make sure your local Nodejs version matches the Nodejs version of your function. Step 2: For the deployment package, make a folder. Assume the folder is called my-function in the steps that follow.
The Node.js function runtime gets invocation events from Lambda and passes them to the handler. In the function configuration, the handler value is index.handler . Each time you save your function code, the Lambda console creates a deployment package, which is a .zip file archive that contains your function code.
For instructions, see Using Packages and Native nodejs Modules in AWS in the AWS compute blog. Open a command line terminal or shell. Ensure that the Node.js version in your local environment matches the Node.js version of your function.
1 In the Lambda console, choose your function. 2 Under Function code, for Code entry type, choose Upload a .zip file. 3 Under Function package, choose Upload. 4 Choose the .zip file you created, and then choose Open. 5 At the top of the console, choose Save. ... 6 After uploading is finished, choose Test.
I prefer not to use single file solution, but to upload zip file with all my code packed. I use gulp for this. The code below only uploads production dependencies, excluding development ones and zip archive from previous upload. You may also exclude your test folder or any other file using parameters of gulp.src
.
Just to mention, aws-sdk
library is in my development dependencies as AWS Lambda already has a copy ;)
var gulp = require('gulp');
var lambda = require('gulp-awslambda');
var zip = require('gulp-zip');
var settings = require('./settings');
var argv = require('yargs').argv;
var p = require('./package.json');
gulp.task('default', function () {
var profile = argv.profile;
var src = ['**', '!*.zip', '!node_modules/aws-sdk{,/**}'];
var i;
for (i in p.devDependencies) {
src.push("!node_modules/" + i + "{,/**}");
}
if (!profile) {
profile = settings.aws.defaultProfile;
}
return gulp.src(src)
.pipe(zip('archive.zip'))
.pipe(lambda(settings.aws.lambda, {
region: settings.aws.region,
profile: profile
}))
.pipe(gulp.dest('.'));
});
This doesn't directly answer your question, but the serverless project might be exactly what someone in this situation needs.
It allows you to build projects in a normal webpack-style multi-file architecture, then uses a CLI utility to build your project(s) into Lambda-optimized files.
The CLI also handles function initialization, deployment, and a litany of other functions I've not yet even needed. It will even create/configure your triggers (e.g., s3 object creation or setting up a new REST API thru AWS API service).
I only have a few Lambda functions, but even maintaining those was a pain until I started using serverless
.
(this is a fawning post, but to be clear I'm not affiliated w/ the project)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With