| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Creates an AWS Lambda Layers structure that is optimized for: Lambda Layer directory structure, compiled library compatibility, and minimal file size.
Note: This script requires Docker and uses a container to mimic the Lambda environment. If you also want to use the publish.sh script, make sure you have the AWS CLI and jq installed as well
This function can be cloned for standalone use, into a parent repo or added as a submodule.
Clone for standalone use or within a repo:
# If installing into an exisiting repo, navigate to repo dir
git clone --depth 1 https://github.com/tobilg/nodejs-lambda-layer-builder _build_layerAlternatively, add as a submodule:
cd {repo root}
git submodule add https://github.com/tobilg/nodejs-lambda-layer-builder _build_layer
# Update submodule
git submodule update --init --recursive --remote$ ./build.sh -h
AWS Lambda Layer Builder for Node libraries
Usage: build.sh [-l NODEJS_RUNTIME_VERSION] [-n NAME] [-r] [-h] [-v]
-l NODEJS_RUNTIME_VERSION : Node runtime version to use: 8.10, 10.x, 12.x (default 10.x)
-n NAME : Name of the layer
-r : Raw mode, don't zip layer contents
-h : Help
-v : Display build.sh version
You can use the included publish.sh script to publish your newly built layer.
$ ./publish.sh -h
AWS Lambda Layer Publisher
Usage: publish.sh [-l NODEJS_RUNTIME_VERSION] [-n NAME] [-b BUCKET_NAME] [-c] [-h] [-v]
-l NODEJS_RUNTIME_VERSION : Node runtime version to use: 8.10, 10.x, 12.x (default 10.x)
-n NAME : Name of the layer
-b BUCKET_NAME : Name of the S3 bucket to use for uploading the layer contents
-c : Create S3 Bucket for layer upload
-h : Help
-v : Display publish.sh version
For example, we would like to build a Node Lambda layer for the sharp image processing module. This module needs some OS-specific (meaning: Amazon Linux) libraries, which means you can't just zip your node_modules directory on a Mac or Windows machine.
First step is to create a package.json in the same folder you cloned or checked out this repo.
{
"name": "sharp-layer",
"description": "Dependencies for building the sharp layer",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"sharp": "0.25.2"
}
}Second step is to run the build.sh script with the proper parameters:
$ ./build.sh -n sharpThis will create a zip file named sharp_node10.x.zip.
Third step is to publish the newly created layer contents to AWS via the publish.sh script:
$ ./publish.sh -n sharp -cThis will create a new S3 bucket named layer-uploads-$AWS_ACCOUNT_ID, upload the zip file created in step two, and trigger the layer publishing. The output will be something like
Creating S3 bucket
Layer file sharp_node10.x.zip found
Uploading layer file to S3
Publishing layer
Publish successful
Layer ARN: arn:aws:lambda:us-east-1:$AWS_ACCOUNT_ID:layer:sharp-lambda-layer:1
where $AWS_ACCOUNT_ID is your AWS account id.
You can edit the _clean.sh file if you want to add custom cleaning logic for the build of the Lambda layer. The above part of the file must stay intact:
#!/usr/bin/env bash
# Change to working directory
cd $1
# ----- DON'T CHANGE THE ABOVE -----
# Cleaning statements
# ----- CHANGE HERE -----
rm test.xtThe _make.sh script will then execute the commands after the Python packages have been installed.
If installed as submodule and need to be removed:
# Remove the submodule entry from .git/config
git submodule deinit -f $submodulepath
# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/$submodulepath
# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f $submodulepath
# remove entry in submodules file
git config -f .git/config --remove-section submodule.$submodulepath| Back | FazBrowse Home | New Git URL |