Epsagon sponsored this post.
One of the splendid results of containers, serverless managed services and other modern tools and platforms has been faster software delivery. But aside from reinventing the wheel — which we do not recommend — some production and deployment pipelines may lack a critical element for achieving even faster development and deployments: automation.
But while automation is certainly the buzzword today, many organizations still have not fully taken advantage of what is possible. Here is a breakdown of how automation works and how it turbo-charges deployments, testing, the creation of environments and stages and even monitoring.
Among the ways to automate the production and deployment pipeline, automating development is one of the most powerful steps that you can take. It will also benefit the next phases in your production pipeline.
You can automate your development simply by utilizing managed services and APIs that are provided by third parties as well as by reutilizing existing services. This saves a lot of time, both during new software development processes, as well as in the future, since you won’t have to maintain the code and infrastructure for that project.
For example, you could use a managed service such as Amazon Cognito to manage your users instead of coding your authorization and authentication service from scratch. By using Cognito, you save a huge amount of development time, which you can instead use to develop other business-specific features that will produce more value for your stakeholders.
Automating deployment is the first thing that most people think about when considering the automation of their software development process. Automated deployment is usually referred to as continuous integration/continuous delivery (CI/CD).
When working in the cloud, with serverless or containers and with multiple managed services, having an automated deployment is crucial. In this environment, it is very important to have all of your infrastructure defined as code because the number of different moving parts in your infrastructure is very high. Performing manual deployments and manual environment creation is very prone to error and will slow down the release of new features.
For example, when creating a simple new AWS cloud application, there are a lot of cloud services involved, such as DynamoDB tables, AWS Lambdas, S3 buckets, IAM roles and API Gateways. If you want to create all of these AWS resources manually when you first create the application, you will need to invest a lot of time to configure everything together. You then also have to manually deploy your functions. And what happens when you release a new version of the function or when you update, say, the DynamoDB table? You will then need to go and perform changes in your table and then maybe have to manually redeploy all the functions that are affected by this change. With a framework like AWS SAM or Serverless Framework, the infrastructure can be defined in a few lines of code and then deployed to AWS with a simple command.
If you are interested in learning the best practices for CI/CD, check out this article.
Testing is a crucial aspect to automate. Modern cloud applications are mostly based on microservices architecture, and there are a lot of things that can go wrong. With this kind of application, the risk of failure moves from the code to the integration and configuration of the different microservices and managed services. In addition, working in the cloud makes it extremely easy and cheap to create and destroy testing environments as needed. This was a problem in the past, as it was expensive to create testing environments and hard to maintain them.
With these two things in mind, we need to pay a lot of attention to integration tests, as these tests are critical to making sure that your application is working. Fast delivery also means deploying new versions of your application many times, sometimes multiple times in one day. You don’t want to spend hours after a deployment having to test a new version to make sure that it works. You want to test prior to deployment and execute a rollback if necessary. And for this, you need a set of tests that you can trust as well as run again and again.
If you want to learn more about how to properly test your serverless applications, take a look at this article.
Another important part of the software development process that you should automate is monitoring. There are a lot of moving parts in cloud applications. For example, in serverless applications, there can be numerous functions. Manually adding monitoring to each of these functions can be error-prone, especially as humans can simply forget or lack time to complete the process in a timely way. You thus need to have an automatic way to instrument your code so that when a new function is created, it is automatically added to the monitoring system.
You also need your monitoring system to notify you if something is not right–you need to trust that it will notice issues that arise and will send you the relevant alert.
Automatically identifying issues instead of manually defining thresholds [source: Epsagon].
When developing cloud applications that use a lot of managed services, you may not have a clear picture of how your system looks. Having a monitoring system that understands your application and can show you in a diagram of your architecture —a diagram that also automatically reflects changes in your infrastructure — can be a tremendous help. Epsagon is a tool that you can get started within five minutes to have end-to-end monitoring and tracing for your microservices and serverless applications.
Why is automation critical when working in modern software development? The short answer is that it will help you to deliver faster and more reliable software deployments and updates. But it will also help you have a more maintainable code base, where the processes are otherwise repetitive and people can go on vacation worry-free because every process is documented in scripts. Automation enables an environment in which developers can feel safe to deploy code knowing that numerous automatic tests are in place and hey will receive alerts if something goes wrong. Automation is critical for a productive workspace —for having a happy team that produces great things.
If you wish to automate the monitoring and the tracing for your microservices and serverless applications, try Epsagon’s free trial.
Feature image via Pixabay.