GNU Make is an automation tool that produces executables and other non-source assets. It can be used to coordinate a variety of tasks, from the compilation of code to the transcoding of media files.
Make uses a file called Makefile to determine what needs to be built when it needs to be built, and how.
In the upcoming series of articles, I will show examples of using make to orchestrate builds of JavaScript apps. Today, I want to talk about using make to build Node.js-based Lambda functions.
A Node.js – based Lambda function is deployed as a zip file to AWS. It has a single main entry point, typically index.js, and it has a handler function. I won’t get into the details of building Node.js Lambdas because you can find many more details in AWS Documentation.
Suppose you have a Lambda structured as follows:
./lambda
index.js
package.json
Makefile
Your goal is to rebuild the lambda.zip file only if the source files change. Your Makefile will look like this:
lambda.zip: *.js package.json
npm install
zip -r lambda.zip *.js *.json node_modules/*
If you modify any JavaScript files, or package.json, and type make, it will determine that lambda.zip is outdated and rebuild it.
What you also want to do is create a clean target:
clean:
rm -f lambda.zip
Finally, you can add a deploy target to deploy the zip file to AWS:
deploy: lambda.zip
$(info "Run AWS Commands to deploy this Lambda")
Note how deploy target depends on lambda.zip target — if there is no zip file, there is nothing to deploy. I will leave it up to you to figure out how to deploy Node.js AWS Lambda functions
The complete Makefile now looks like this:
lambda.zip: *.js package.json
npm install
zip -r lambda.zip *.js *.json node_modules/*
clean:
rm -f lambda.zip
deploy: lambda.zip
$(info "Run AWS Commands to deploy this lambda")
Some final thoughts
You can find more documentation on make here. make is available on UNIX-like operating systems, i.e. Linux and Mac OS X, and can be installed on Windows.
In upcoming posts, I will discuss using make for Node.js Docker services and front-ends.