A complete, serverless, full-stack application built on AWS Lambda, AWS HTTP API, Express.js, React and DynamoDB.
Live Demo: https://www.serverless-fullstack-app.com
Clone this repo.
Run npm i in all subdirectories that contain package.json
Add your AWS credentials in .env file in the root directory, like this:
AWS_ACCESS_KEY_ID=JAFJ89109JASFKLJASF
AWS_SECRET_ACCESS_KEY=AJ91J9A0SFA0S9FSKAFLASJFLJ
tokenSecret=yourSecretKey
# Only add this if you want a custom domain. Purchase it on AWS Route53 in your target AWS account first.
domain=serverless-fullstack-app.com
In the root folder of the project, run serverless deploy --all
After initial deployment, we recommend deploying only the parts you are changing, not the entire thing together (why risk deploying your database with a code change?). To do this, cd into a part of the application and run serverless deploy.
When working on the ./api we highly recommend using serverless dev. This command watches your code, auto-deploys it, and streams console.log() statements and errors directly to your CLI in real-time!
If you want to add custom domains to your landing pages and API, either hardcode them in your serverless.yml or reference them as environment variables in serverless.yml, like this:
inputs:
domain: ${env:domain}domain=serverless-fullstack-app.com
Support for stages is built in.
You can deploy everything or individual components to different stages via the --stage flag, like this:
serverless deploy --stage prod
serverless deploy --all --stage prod
Or, you can hardcode the stage in serverless.yml (not recommended):
app: fullstack
component: express@0.0.20
name: fullstack-api
stage: prod # Put the stage in hereLastly, you can add separate environment variables for each stage using .env files with the stage name in them:
.env # Any stage
.env.dev # "dev" stage only
.env.prod # "prod" stage onlyThen simply reference those environment variables using Serverless Variables in your YAML:
app: fullstack
component: express@0.0.20
name: fullstack-api
inputs:
domain: api.${env:domain}And deploy!
serverless deploy --stage prod
Enjoy! This is a work in progress and we will continue to add funcitonality to this.
For more details on each part of this fullstack application, check out these resources:
