Local development environments allow you to speed up both development and the feedback cycle for your Serverless apps. The LocalStack plugin gives you the tools to build local development environments quickly, accessing mock AWS services without credentials.
In this article, we’re going to explore how you can leverage LocalStack to create a local development environment for a Serverless application.
Prerequisites
In order to follow along with the example, you will need the following items installed:
-
Docker
-
Node.js + npm
-
Serverless
Getting Started
Start by generating a new Serverless application using the Serverless CLI and change directory into the newly created project folder.
serverless create --template aws-nodejs --path serverless-app-example
cd serverless-app-example
At this point, you have a basic Serverless application scaffolded with a hello
function. Now you need to set up npm in the project.
Run npm init
and follow the prompts to fill out the details in the package.json
file.
Next, you’ll need to install the serverless-localstack
plugin as a dev dependency. You can install the plugin by running npm i -D serverless-localstack
.
Finally, configure the serverless-localstack
plugin by adding the following lines to the serverless.yml
file:
# Enable localstack plugin
plugins:
- serverless-localstack
# Configure localstack plugin
custom:
localstack:
# Only use localstack for the local stage
stages:
- local
# Setup a docker volume for localstack to run code from to improve performance
lambda:
mountCode: true
# Startup localstack automatically
autostart: true
While you’re in here, you might as well set up an HTTP endpoint for your handler. You can do so by updating the hello
function in the serverless.yml
file. It should look something like this:
functions:
hello:
handler: handler.hello
events:
- http: 'GET /hello'
Developing
With all the setup complete, it’s time to get started developing! Run serverless deploy --stage local
, which will automatically deploy your application to LocalStack and print out an endpoint URL that looks like something like http://localhost:4566/restapis/ugpfwxng1p/local/_user_request_
. You can append the path of your function, /hello
in this example, and use curl or your favorite HTTP client to hit the endpoint.
curl http://localhost:4566/restapis/ugpfwxng1p/local/_user_request_/hello
Since you configured the LocalStack plugin to mount your app code into the LocalStack container, changes to your function code will be reflected immediately, without the need to deploy the stack again or rebuild! Just make changes to the handler.js
and hit the endpoint to see your changes take effect. Any changes to the serverless.yml
will require running the deploy command again.
To make it even faster to start up the development environment, you can add an npm script to the package.json
.
"scripts": {
"start": "serverless deploy --stage local"
},
Now you can start up the dev environment by running npm start
.
Conclusion
Congratulations, you now have a Serverless local development environment built with LocalStack. This will allow you to speed up the feedback cycle of development and build your application in an environment where you have access to mock AWS services, allowing you to write integration tests without the need to provision real AWS services or have AWS credentials configured.