Awesome
Serverlessizer (S12R)
Serverlessize your Node.js backend application to main clouds providers. With this package you can run your application on the Function as a Service on many cloud providers with the same configuration.
📑 Overview
- 📥 Installation
- ☁️ Supported Cloud Providers
- 🧩 Supported frameworks
- ⚡️ Serverless Framework
- 🎲 Examples
- 💪 Contributing
- 📜 Licensing
📥 Installation
Serverlessizer library for Node can be installed via package manager.
# npm
npm install @satheler/s12r
# yarn
yarn add @satheler/s12r
☁️ Supported Cloud Providers
The following is a list of the currently support cloud providers:
✅ AWS Lambda
✅ Azure Functions
🧑💻 Google Cloud Functions [WIP]
⏱ IBM Cloud
🧩 Supported frameworks
The following sections is the currently support frameworks.
Adonis
- Add the code below in
serverlessizer.ts
on your project root.
import 'reflect-metadata'
import { Ignitor } from '@adonisjs/core/build/standalone'
import Serverlessize from '@satheler/s12r'
process.on('unhandledRejection', (reason) => {
console.error(reason)
})
process.on('uncaughtException', (reason) => {
console.error(reason)
})
let server: Function
async function bootstrapServer() {
const ignitor = new Ignitor(__dirname)
const httpServer = ignitor.httpServer()
await httpServer.application.setup()
await httpServer.application.registerProviders()
await httpServer.application.bootProviders()
await httpServer.application.requirePreloads()
const serverCore = httpServer.application.container.use('Adonis/Core/Server')
serverCore.errorHandler('App/Exceptions/Handler')
serverCore.optimize()
const server = serverCore.handle.bind(serverCore)
return server
}
export const handle = async (...args: any[]) => {
if (!server) {
server = await bootstrapServer()
}
const { request, response } = Serverlessize(args)
return server(request, response)
}
Express (Coming soon)
Hapi (Coming soon)
LoopBack (Coming soon)
⚡️ Serverless Framework
The Serverless Framework uses new event-driven compute services, like AWS Lambda, Google Cloud Functions, and more. It's a command-line tool, providing scaffolding, workflow automation and best practices for developing and deploying your serverless architecture.
Below has a example of serverless configuration with typescript. The project output in tsconfig.json
is set as build
.
Amazon Web Services (AWS)
This example already includes the Lambda Layer
with node_modules folder.
serverless.aws.yml
service: your-service-name
provider:
name: aws
region: ${opt:region, 'sa-east-1'}
stage: ${opt:stage, 'development'}
runtime: nodejs14.x
timeout: 10
memorySize: 256
versionFunctions: false
environment:
NODE_ENV: production
MY_ENV_VARS: true
functions:
app:
handler: build/serverlessizer.handle
layers:
- { Ref: NodeModulesLambdaLayer }
events:
- http:
cors: true
path: '/'
method: any
- http:
cors: true
path: '{proxy+}'
method: any
package:
include:
- build/**
exclude:
- '**/*.ts'
- node_modules/**
layers:
NodeModules:
name: ${self:provider.apiName}-layer
path: tmp/layers
description: "node_modules dependencies"
Microsoft Azure
serverless.azure.yml
service: your-service-name
provider:
name: azure
location: ${opt:location, 'brazilsouth'}
runtime: nodejs14
stage: ${opt:stage, 'develop'}
memorySize: 256
apim:
backends:
- name: satheler-survey-backend
url: ''
environment:
NODE_ENV: production
MY_ENV_VARS: true
functions:
build:
handler: build/serverlessizer.handle
apim:
backend: satheler-survey-backend
operations:
- method: '*'
urlTemplate: '/satheler-survey'
displayName: SathelerSurvey
events:
- http: true
route: '{*proxy}'
authLevel: anonymous
package:
patterns:
- build/**
- '!.github/**'
- '!.vscode/**'
- '!app/**'
- '!commands/**'
- '!config/**'
- '!contracts/**'
- '!database/**'
- '!providers/**'
- '!scripts/**'
- '!start/**'
- '!tests/**'
- '!tmp/**'
plugins:
- serverless-azure-functions
🎲 Examples
- satheler-survey - A multicloud serverless application for undergraduate thesis
- adonis-serverless - Example repository for running AdonisJS on AWS Lambda.
💪 Contributing
We welcome community contributions and pull requests. See CONTRIBUTING.md for information on how to set up a development environment and submit code.
📜 Licensing
Serverlessizer is licensed under the MIT License.
All files located in the node_modules and external directories are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms in the MIT License.