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:
|- serverless.yml
|- webpack.config.js
|- package.json
|- src
\ - file1.js
| - file2.js
Extract from serverless.yml
functions:
function1:
handler: src/file1.f1
function2:
handler: src/file2.f2
Extract from webpack.congfig.js
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:
{
"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)
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: