@microbackend/plugin-serverless-aws
Microbackend plugin to add support for the serverless framework.
Installation
npx microbackend plugin add @microbackend/plugin-serverless-aws
Usage
Serverful/Serverless switch
import createPluginConfig from "@microbackend/plugin-core/build/webpack.build";
await createPluginConfig({
pluginOptions: {
"@microbackend/plugin-serverless-aws": {
isEnabled: process.env["INFRASTRUCTURE"] === "serverless",
serverfulConfig: {
entry: path.resolve("src", "index.ts"),
mode: "development",
output: { path: path.join(__dirname, "build"), filename: "index.js" },
},
serverlessConfig: {},
},
},
});
This plugin allows running the application in both serverful and serverless
modes, depending on whether isEnabled
is true or false. In the entry file,
we will need to make some modification to the server start code:
import { createExpressApp } from "@microbackend/plugin-express";
import startServerfulApp from "@microbackend/plugin-serverless-aws";
import express from "express";
import { Server } from "http";
let server: Server;
export const handler = startServerfulApp({
getApp: () => {
return createExpressApp().then((app) => {
app.get("/", (...[, res]) => {
res.sendStatus(204);
});
app.use(((err, _req, res, _next) => {
res.status(err.status || 500).json({ error: err.message });
}) as express.ErrorRequestHandler);
return app;
});
},
startApp: async ({ app }) => {
const port = process.env["PORT"] || 3001;
server = app.listen(port, () => {
console.log("Started example server on port", port);
});
},
});
The startServerfulApp
function abstracts away the work needed to switch
between serverful and serverless. We can then add some scripts to our
package.json
:
{
"scripts": {
"build": "webpack",
"build:sls": "cross-env INFRASTRUCTURE=serverless sls package",
"deploy": "cross-env INFRASTRUCTURE=serverless sls deploy",
"start": "webpack --watch",
"start:sls": "cross-env INFRASTRUCTURE=serverless sls invoke local--function core"
}
}
In the above example, the serverful/serverless switch is determined using the
process.env["INFRASTRUCTURE"]
flag, but it is up to us how we want to
implement it.
Configuration generation
Running:
npx microbackend gen
will generate a serverless.yml
file in the current project directory, if
there is not yet an existing file. It serves as a base for you to add on, and
is not meant to be an one-size-fits-all configuration.