Over the past few years, all kind of companies, ranging from start-ups to giant enterprises, have started their move to public cloud providers in order to save their costs and reduce the operational effort needed to keep their shops open. While this movement was applied with just a lift and shift strategy, keeping their software architecture the same and only changing where they are hosting it, some companies opted for a mindset change, modifying their software to take advantage of native cloud services other than virtual machines, changing their team structures, and adopting DevOps practices. This opened the door to many changes in the software industry, and it is definitely possible to say that the world after the introduction of cloud computing is not the same as before.
Starting with AWS Lambda's launch in 2014, a new approach to software development came on the scene. Lambda designed to run code pieces responding to external or internal cloud events, without needing to set up any infrastructure upfront, and it brought a real, managed, and pay-per-go infrastructure model. In a short time, the "serverless computing" term was coined, and the same model was adopted by Microsoft, Google, and even IBM in an open source fashion. With the Lambda functions, it is now even possible to craft a complex software system consisting of many independent micro-functions that will run only when they are needed, without needing to maintain individual servers. The Lambda functions can now support a large number of native cloud services, which removes the need of building custom solutions for common needs, and it not only reduces the infrastructure's running and maintenance costs, but also software development costs.
The focus of this book is to design serverless architectures, and weigh the advantages and disadvantages of this approach, along with a few decision factors to consider. You will learn how to design a serverless application, get to know the key points of services that serverless applications are based on, and known issues and solutions. In this book, you will not only learn the AWS Lambda functions, but you will also see how to use the Lambda functions to glue other AWS services together. You will learn how easy it is to build a scalable software system is, taking a CRUD application as an example.
The book addresses key challenges, such as how to slice out the core functionality of the software to be distributed in different cloud services and cloud functions. It covers the basic and advanced usage of these services, testing and securing the serverless software, automating deployment, and more.
Throughout this book, we will only use the Java programming language, and we will build a homegrown deployment system to easily deploy our software.
This book does not intend to cover all the details of the AWS ecosystem, but I believe it will perfectly show you the path through the serverless computing world.