Building a Serverless solution still comes with its own challenges, especially for teams more familiar with traditional setups. As mentioned in part 2, functions need to be stateless and short running (AWS Fargate presents an interesting alternative for long running operations such as jobs). Also, in order to take full advantage of Serverless, teams should automate as much as possible. This is especially important when you’re using FaaS because the number of functions will quickly grow to a point where it is not feasible to manually create, update, or delete these functions. Furthermore, the more cloud services you use, the more difficult it becomes to run your application locally. While it’s possible to use mocks, small differences in behavior often lead to different results between your local and cloud environment. Therefore, a viable alternative is to automatically provision cloud environments for testing instead. For example, we have a setup, where a new stack is automatically created in the cloud whenever a new feature branch is created in out Git repository. This allows for isolated development and testing. And once the feature is merged into the main branch, the temporary environment is automatically deleted. The following image shows a screenshot of our continuous delivery pipeline of one of our applications.
Serverless components all provide APIs and templating, so they are built for automation. Application teams need to become familiar with these. So, they will be more involved in infrastructure related scripting and/or templating. This is common when moving to a Dev/Ops practice but may present a challenge for more traditional teams.
The transition from physical servers to virtual machines, and then to containers provides us with many benefits. For example, we can save costs by improving utilization, reducing time to market due to faster provisioning, and enhancing scalability and resilience. But DevOps teams still have to invest a significant amount of effort into managing and maintaining servers (even if they come in the form of VMs or containers). With Serverless, architecture teams no longer need to worry about sizing, provisioning, securing, or scaling infrastructure. When implementing Serverless solutions, automation and application architecture are keys to the success. If you’re interested in finding out how you can benefit from a Serverless architecture, please don’t hesitate to contact us.