Serverless computing has accelerated software development and simplified coding in recent years. Websites and applications that were once expensive and time-consuming to deploy, host, and scale are now hassle-free thanks to serverless technologies. Serverless computing makes developers less worried about owning infrastructure, like operating servers and hardware, and eliminates the need to pay for idle resources.
AWS Lambda is one of the most popular serverless computing services for building event-driven applications that allows you to run code in the cloud. However, managing lambda functions and their infrastructure manually can be challenging. In this article, we’ll explore how Serverless Framework can help you easily develop lambda functions, how to set up Serverless Framework, and some benefits of using Monorepo tools.
What is Serverless Framework?
Serverless Framework is an open-source command-line tool for developing, packaging, and deploying serverless applications across cloud providers and platforms like AWS, GCP, Kubernetes, Azure, etc. Plus, the framework supports multiple languages like Node.js, Typescript, Python, Java, and others.
You’re not required to build your own infrastructure since serverless architecture is deployed and managed by a third-party provider with code running in the cloud. It can save you a lot of resources, compute time, and lowers the total development cost. The framework allows developers to define their serverless application using a simple YAML file called serverless.yml. What’s more, with Serverless Framework, you can:
- define your function handlers, event sources, and environment variables in a single configuration file
- automatically manage IAM roles and policies required by your functions
- deploy your functions to various environments, including local, staging, and production
- test your functions locally before deploying, using common testing frameworks like Jest or Mocha.
- integrate different AWS services like DynamoDB, S3, Kinesis, etc.
Take a Look at Some Key Benefits of Serverless Framework:
- Fast and easy deployment. As you no longer need to set up your own infrastructure, you can develop your website or application as fast as possible.
- Scalability. If your product has succeeded in the market, making adjustments and optimizing your application for future needs will be easier.
- Flexibility. Serverless Framework allows you to easily and quickly create a project so that you can do more in less time.
- More time to work on design. With Serverless Framework, you have more capacity to focus on UX design, making your app more attractive to the end user.
- A lot of plugins. Serverless Framework offers many plugins that enable you to expand the configuration of the framework.
AWS Lambda Explained
AWS Lambda is an event-driven, serverless computing service that is a part of Amazon Web Services. It runs code in response to requests, automatically administering your compute resources, such as server maintenance, code and security patch deployment, code logging and monitoring, automatic scaling, etc.
AWS Lambda is cost-saving as it makes you pay only for your computing time with no additional charges. Your code is simply arranged into Lambda functions, and the service runs your operation only when required and automatically scales it.
Common Pain Points of Managing AWS Lambda Manually
As with any other technology, the serverless stack has its ups and downs. When it comes to AWS Lambda, developers need to handle various tasks, from creating IAM roles and policies to managing API Gateway integrations, VPC configurations, and environment variables. Some common challenges include:
- Deployment issues especially for larger and more complex projects, where manual function creation can be complicated without automated tools.
- Dode sharing between functions which can be facilitated by using a monorepo (as discussed later in the article).
- Limitations of serverless architecture, such as a maximum execution time, environment variables size, payload size, and artifacts size.
All these can cause a lot of headaches for developers. Moreover, deploying multiple lambda functions requires repeating these configurations, which is error-prone and unproductive.
How Serverless Framework Can Help Develop Lambda Functions
Serverless Framework can address the abovementioned issues by providing higher-level abstractions over AWS Lambda, API Gateway, and other AWS services.
If you’re new to Serverless Framework setup, we’ll explain how to get started:
Prerequisites
Before configuring Serverless Framework, make sure you have Node.js and NPM installed on your machine.
Steps
Once NPM and Node.js are installed, move on to setting up and deploying a simple lambda function using Serverless Framework in seven easy steps:
1. Install Serverless Framework as a global module using the following command: npm install -g serverless.
2. Create a new directory for your project and navigate to it.
3. Initialize your project by typing serverless create –template aws-nodejs –path my-service. This command will generate boilerplate code for a simple Node.js service with a single Lambda function.
4. Navigate to the newly created directory by typing cd my-service.
5. Open the serverless.yml file and check its contents. By default, it should contain configuration for one function named “hello”. You can modify this file to add more functions or configure other AWS services.
6. Set up AWS credentials on your machine.
7. Run the serverless deploy command to deploy your service to AWS.
Serverless Framework automatically creates all the necessary AWS resources (Lambda functions, API Gateways, etc.) required to run the application.
Example of serverless.yml configuration file
Look at an example serverless.yml file configuration for a simple REST API project:
service: name: my-api plugins: - serverless-offline - serverless-domain-manager custom: customDomain: domainName: api.example.com basePath: v1 stage: ${self:provider.stage} createRoute53Record: true provider: name: aws runtime: nodejs14.x region: us-east-1 environment: ENV_VAR: "hello world" iamRoleStatements: - Effect: Allow Action: - s3:* Resource: "*" functions: hello: handler: handler.hello events: - http: path: /hello method: get
In this example, we defined a service named my-API, using two plugins: serverless-offline to run our API locally and serverless-domain-manager to map our API to a custom domain. We also specified a custom IAM role statement that allows our function to access S3. Finally, we defined a single function named “hello” that listens for HTTP GET requests on the “/hello” path.
Using Monorepo with Serverless Framework
If you plan to develop a large-scale serverless project, consider using a monorepo. A monorepo is a repository that contains multiple projects or applications and shares a common codebase and dependencies.
When it comes to serverless context, a monorepo can help you:
- share reusable code between different functions, reducing duplication and maintenance costs
- manage your deployment process more efficiently by deploying all your functions simultaneously
- simplify your testing and CI/CD pipeline with a single configuration file and build process
One practical tool for creating monorepos is NX, which provides powerful support for sharing code and dependencies across multiple projects. By using NX with Serverless Framework, developers can create a more modular and scalable codebase for their serverless applications.
For example, we have two serverless applications that use a common library for authentication. In a monorepo setup, we could store this library in a shared folder, and both applications can reference it as a dependency. This approach eliminates the need to duplicate code and dependencies across multiple projects, making our architecture more maintainable and efficient.
To sum up
Probably every developer wonders not just how to build an application or website but also how to simplify coding and make the development process faster and easier. Among many tools, Serverless Framework has proven itself as a reliable, secure, and cost-effective solution that takes the burden of deploying hardware and software and maintenance costs off the developers’ shoulders. Furthermore, Serverless Framework provides an easy way to develop, deploy, and manage AWS Lambda functions.
For larger serverless applications, consider using Monorepo. It’s a code repository that contains many different projects. This approach lets you simultaneously build, debug, and deploy all your applications. Using a monorepo setup with tools like NX, developers can create modular, scalable, and easily shareable code.
Serverless Framework is a must-have approach for software developers working with AWS Lambda functions. It reveals new possibilities for developing and managing IT projects of any size and complexity.