Question:
I want to create a package to deploy on AWS using serverless and webpack.
In serverless.yml
I want to declare all the resources (mainly DynamoDb tables) and the functions. I want to use external node.js
libraries.
The folder structure is:
1 2 3 4 5 6 7 |
|- serverless.yml |- webpack.config.js |- package.json |- src \ - file1.js | - file2.js |
Extract from serverless.yml
1 2 3 4 5 6 |
functions: function1: handler: src/file1.f1 function2: handler: src/file2.f2 |
Extract from webpack.congfig.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
module.exports = { entry: { file1: './src/file1.js', file2: './src/file2.js', }, target: 'node', output: { libraryTarget: 'commonjs', path: path.join(__dirname, '.webpack'), filename: '[name].js', }, module: { loaders: [ { test: /\.json$/, loaders: ['json-loader'], }, ], }, }; |
When doing a serverless deploy
everything is ok, but when testing the lambda I get an error:
1 2 3 4 5 6 7 8 9 10 |
{ "errorMessage": "Cannot find module '/var/task/src/file1'", "errorType": "Error", "stackTrace": [ "Function.Module._load (module.js:276:25)", "Module.require (module.js:353:17)", "require (internal/module.js:12:17)" ] } |
Can you tell me what am I doing wrong?
Given that I am a newbie with serverless, can you suggest me some “better practice” for the code and development organisation? (serverless and nodejs are imposed, webpack and everything else is not)
Answer:
I would recommend using the serverless-webpack plugin. It’s hard to tell without seeing the entire serverless.yml
file, but I would assume that serverless is trying to deploy the functions listed under functions:
, which in your case are written in a syntax not understood by the Node.js 4.3 runtime on AWS lambda.
A good walk through on how to set up a project using the serverless-webpack
plugin has been detailed by Serverless Stack: