Development

When developing applications with the Serverless Container Framework (SCF), you can take advantage of the Dev Mode feature which provides a local development environment that closely mirrors your production setup. It provides the following benefits:

  • Develop AWS Lambda and AWS Fargate containers rapidly with true local emulation
  • Route and simulate AWS ALB requests via localhost
  • Accelerate development with instant hot reloading
  • Inject live AWS IAM roles into your containers
  • Enjoy an elegant logging and debugging experience

Command

To start Dev Mode for your SCF project:

serverless dev

--stage

By default, the project will deploy all containers in the dev stage. You can target a different stage by using the --stage flag: serverless dev --stage prod.

--debug

This flag will enable debug logging. If you encounter an issue, please enable debug logging and provide the logs to the Serverless team.

--port-proxy

This option will set up the local proxy that emulates the AWS Application Load Balancer (ALB) routing to use a specific port. Otherwise, the default port is 3000.

--port-control

This option will set up the control plan that runs your containers locally to use a specific port. Otherwise, the default port is 3001.

Container Hot-Reloading

Dev Mode supports hot-reloading for:

  • Node.js applications
  • Python applications

When you make code changes, the containers automatically rebuild and restart while maintaining your application state.

Node.js Hot-Reloading

For Node.js applications, Hot Module Reloading (HMR) is enabled by default. Your application will automatically restart when files change.

By default, SCF uses a file-watching tool (chokidar) to monitor changes in the source code.

However, the container’s entrypoint script first checks for a "dev" command in the project's package.json and, when found, runs it to start the development process instead of the default HMR. If you want to customize your HMR or you are working with a framework that offers its own HMR, you can do so by adding a "dev" command to your project's package.json.

Python Hot-Reloading

Python applications use watchdog to monitor file changes and trigger rebuilds automatically.

Custom Dockerfiles

When using custom Dockerfiles, Dev Mode will still watch for file changes and trigger rebuilds.

AWS IAM Role Testing

When developing locally, SCF enables testing with live AWS IAM roles, if they are configured for a container in containers and the architecture has been deployed to AWS in that stage.

For clarity, if you have deployed into a dev stage, and you run Dev Mode locally within that dev stage, the AWS IAM Roles for your project within that stage will be located in the live AWS account, temporary credentials for them will be created, and those credentials will be injected into your containers, allowing you to test exact IAM permissions that will be used in production.

If you have not deployed your stage to AWS, no AWS IAM Roles will be available and therefore no temporary credentials will be created.

This provides several key benefits:

  • Test exact IAM permissions that will be used in production
  • Catch permission issues before deployment
  • Use and validate AWS service integrations locally

For example, if your container needs to access AWS S3 buckets or AWS DynamoDB tables, you can test these permissions locally using the actual IAM role that will be used in production.

IMPORTANT: Local development requires a specific AWS IAM trust policy to be injected into IAM roles. This trust policy allows the local development environment to assume the role. If you have already deployed your architecture to AWS, the dev command will automatically inject the trust policy into the IAM roles for your containers. You'll want to ensure that you do not do this in your production environment.

Edit this page