J'ai traité cela un peu et j'ai trouvé ça assez frustrant. Si vous déployez à partir de votre configuration, à quoi ressemble votre API? Avec des fichiers individuels serverless.yaml
, vous obtenez des points d'extrémité api indépendants (en supposant que vous déclenchiez avec des appels api et pas quelque chose comme s3).
J'ai fini avec une structure comme celle-ci:
|- serverless/
|--- serverlsss.yml
|--- web pack.config.js
|--- dist/
|--- node_modules() /* dev and common code */
|--- src/
|----- function1/
|-------- node_modules
|-------- package.json
|-------- index.js
|----- function2/
|-------- node_modules
|-------- package.json
|-------- index.js
J'utilise le plugin webpack serverless pour produire les fonctions individuelles dans le répertoire dist/
. Le serverless.yaml
pointe ensuite vers ceux-ci.
Le webpack.config.js
ressemble à ceci:
const nodeExternals = require('webpack-node-externals');
const path = require('path');
module.exports = {
entry: {
'function1': './src/function1/index.js',
'function2': './src/function2/index.js',
},
target: 'node',
output:{
libraryTarget: 'commonjs2',
path: path.join(__dirname, './dist'),
filename: '[name].js'
},
externals: [nodeExternals()],
module: {
loaders: [
/* Babel is nice, but it's adding a some bulk and I don't need it
{
test: /\.js$/,
loaders: ['babel'],
include: __dirname,
exclude: /node_modules/,
}, */
{
test: /\.json$/,
loaders: ['json']}
],
},
};
// externals: [nodeExternals()],
// nodeExternals seems to break aws-sdk when serving locally
// aws-sdk should be in dev-dependencies of root folder
// that way it's available in dev but doesn't get packaged.
// It's available to the lambdas when deployed.
Après cela assurez-vous de mettre le drapeau individuel dans serverless.yml
package:
individually: true
Le plugin webpack est tout à fait agréable et fait la plupart du levage de charges lourdes. Avec cela, je peux faire un déploiement unique et toutes les fonctions se terminent comme des fonctions lambda individuelles sous un point d'extrémité API. Vous obtenez également le serveur de développement Webpack afin que vous puissiez exécuter serverless webpack serve
pour tester vos fonctions.
C'était un peu difficile à installer, mais ça a plutôt bien fonctionné.