Easily host entire web applications on a single AWS Lambda function using this Serverless Component.
- Designed to make it easy to host pre-existing web frameworks (e.g. Express.js, Hapi) or any large web application on a single AWS Lambda Function.
- Blazing Fast Uploads via AWS S3 Accelerated Transfer and Multi-Part.
- Dependencies are automatically put in AWS Lambda Layers, reducing cold-start time and further reducing upload time.
- Simple shim for receiving and responding to HTTP requests.
- Supports specifying custom domains.
$ npm install -g serverless$ mkdir backend && cd backendThe directory should look something like this:
|- serverless.yml # required
|- index.js # required
|- package.json # optional
|- .env # your AWS api keys
# .env
AWS_ACCESS_KEY_ID=XXX
AWS_SECRET_ACCESS_KEY=XXX
You must include an index.js file that looks like this:
module.exports = async (e, ctx, cb) => {
return { statusCode: 200, body: 'backend app deployed.' }
}
// you could also just return an object
// which would return it as body with
// 200 status code by default
// module.exports = () => ({ hello: 'world' })
// or just a string
// module.exports = () => 'success'
// or a status code number
// module.exports = () => 404 // not found!
// you don't even need to export a function!
// module.exports = { hello: 'world' } // great for mocking!
// module.exports = 'success'
// module.exports = 500All the following inputs are optional. However, they allow you to configure your Lambda compute instance and pass environment variables.
# serverless.yml
backend:
component: '@serverless/backend'
inputs:
code:
root: ./code # The root folder containing the backend code.
src: dist # The folder within your 'src' directory containing your built artifacts
hook: npm run build # A hook to build/test/do anything
region: us-east-1
runtime: nodejs10.x # The runtime for the lambda. Only nodejs10.x or nodejs8.10 are allowed
memory: 128
timeout: 10
description: A function for the registry backend.
bucketName: myBucket # (Optional) The Bucket name where `src` files/folder will be upload.
# If not provided, it will create random bucket name prefixed by `backend-`
env:
TABLE_NAME: my-table
# You can specify a custom domain name for your backend.
# You must have a public hosted zone available for this domain in AWS Route53.
# This is done automatically for you if you've purchased the domain via AWS Route53.
domain: api.example.com$ serverlessAll requests to this root url will be proxied directly to your lambda function, giving you full control of the http layer.
Checkout the Serverless Components repo for more information.