Artem Pabacham
08/05/2021, 7:45 AMfunction prepare_node_modules_lambda_layer() {
echo "Cleaning up workspace ..."
rm -rf lambda-layers-node_modules
echo "Creating layer ..."
mkdir -p lambda-layers-node_modules/nodejs/node_modules
echo "Prepare server node_modules lambda layer ..."
cp -r ../../node_modules/knex lambda-layers-node_modules/nodejs/node_modules
...
then
layers: [
new lambda.LayerVersion(stack, 'NodeModulesLayer', {
code: lambda.Code.fromAsset('./lambda-layers-node_modules'),
}),
],
The idea was taken from https://dev.to/eddeee888/how-to-deploy-prisma-in-aws-lambda-with-serverless-1m76
But ultimately I don't find it an elegant solution. Any ideas?Simon Reilly
08/05/2021, 8:30 AMnew sst.Function(this, '', {
handlers: 'src/lambda.main',
layers: [
{
layerName: 'knex-layer',
type: 'nodejs'
node_modules: [
'knex'
]
}
]
})
Artem Pabacham
08/05/2021, 9:28 AMSimon Reilly
08/05/2021, 9:29 AMthdxr
08/05/2021, 10:45 AMSimon Reilly
08/05/2021, 10:47 AMthdxr
08/05/2021, 10:50 AMArtem Pabacham
08/05/2021, 12:05 PMthdxr
08/05/2021, 12:09 PMesbuild
bundler will help with that by only including code that's actually used and minifying everything. Putting things in a layer doesn't necessarily help at runtime because AWS will still have to load the layer and including all node_modules for every function probably results in a larger net size than just relying on bundlingthdxr
08/05/2021, 12:09 PM