Skip to content

Latest commit

History

42 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sharp for AWS Lambda Layers

GitHub releaseBuild action

About

The prebuilt sharp node module for AWS Lambda layer.

Features

  • Built and tested automatically using GitHub Actions
  • Automatically releases sharp updates with GitHub Actions
  • Separated builds for arm64 and x64
  • Minified and bundled with esbuild
  • Minimum 6.98 MB zip file to optimize cold start time

Why use a bundled Lambda function? / Why separate build for arm64?

Please check out Optimizing Node.js dependencies in AWS Lambda for details. A bundled and minified lambda function can be up to 70% faster for cold starts. The package size is also crucial for cold start performance.

Download

Releases

Download latest release-arm64.zip or release-x64.zip

Usage

importsharpfrom'sharp'

Check out aws: Creating and sharing Lambda layers for more details.

This package can be used with sst. Check out docs.sst.dev: Lambda Layers and sst.dev: Resize Images for examples.

Setting arm64 for sst functions

function: {handler: '{handler}',runtime: 'nodejs18.x',architecture: 'arm_64',nodejs: {esbuild: {external: ['sharp'],},},layers: [newlambda.LayerVersion(stack,'SharpLayer',{code: lambda.Code.fromAsset('layers/sharp'),compatibleArchitectures: [lambda.Architecture.ARM_64]}),]}

Setting up a lambda layer for AWS SAM

Providing a zip file locally actually works, even though it's not mentioned in the documentation.

## LambdaImageFunction:
Type: AWS::Serverless::FunctionProperties:
CodeUri: image-lambda/Handler: app.handlerRuntime: nodejs18.xArchitectures:
- arm64Timeout: 30MemorySize: 1024Layers:
- !RefSharpLayerMetadata:
BuildMethod: esbuildBuildProperties:
# Check these two issues for problems related to esm and esbuild# https://github.com/evanw/esbuild/issues/1921# https://github.com/evanw/esbuild/pull/2067#issuecomment-1503688128# Switch to cjs when esm doesn't workFormat: esmOutExtension:
- .js=.mjsEntryPoints:
- app.tsExternal:
- '@aws-sdk/*'# @aws-sdk 3.x is installed globally for nodejs18.x
- sharp # use layer## Lambda layerSharpLayer:
Type: AWS::Serverless::LayerVersionProperties:
LayerName: sharpContentUri: layers/sharp/release-arm64.zip # zipCompatibleArchitectures:
- arm64CompatibleRuntimes:
- nodejs18.x
- nodejs16.x

Build

Fork this repo -> Actions -> Run build.yml

References

Umkus/lambda-layer-sharp - another maintained sharp lambda layer

aws: Creating and sharing Lambda layers

aws: Working with layers

aws: Building layers

sharp: Installation - AWS Lambda

About

npm sharp for AWS Lambda layers, separated builds for arm64 and x64, minified and bundled with esbuild

Topics

Resources

Stars

119 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages