Much has been said about what is DevOps and how it works, such as defining it as a set of tools and techniques to manage IT infrastructure.
Others define it as a philosophy for the whole company or a mindset for your working teams, in summary, as a key change factor for companies who want to optimise efficiency for both technology and human processes. It is based on the ITIL methodology diagram that you can find above this text which has its origin in application development.
DevOps, a cloud-based infrastructure
Having this lifecycle in mind, we would like to focus on the strengths that brings DevOps to a cloud-based infrastructure in contrast to an on-premises infrastructure.
Planning Phase of a DevOps Project
A planning phase is common in both cases, because it will help you provision the appropriate resources and estimate a budget. At the time of hardware purchase for an on-premises architecture, it is to be taken into account that a huge investment has to be made upfront and there will be little possibility to change it once it has all been bought and set up.
A public cloud brings the flexibility to modify the resources according to the needs of the project at any stage, and even more important: resources are available immediately. This flexibility also allows architects to plan various infrastructures which can cover every possible scenario.
Code and Build Stages of a DevOps Project
The code and build stages are difficult to carry out at an on-premises system. It would be necessary to build an IaaC (Infrastructure as a Code) layer over the real infrastructure to manage it with DevOps techniques.
On the other hand, on a cloud-based infrastructure it feels more natural to handle infrastructure that cannot be touched or seen using scripts and commands remotely, which brings automatization and robustness to the system.
Moreover, a public cloud like Amazon provides useful services to perform this operations and they become integrated with the full system, such as AWS CloudFormation to build infrastructure and AWS OpsWorks to coordinate it.
Testing phase of a DevOps Project
Testing is a very important phase which can be performed automatically with some coding on a cloud infrastructure, which in turn can launch the release and deploy phases. With an on-premises system, there will be checks which have to be performed manually; moreover release and deploy phases are difficult to apply.
Operate and Monitor Stages of a DevOps Project
Operate and monitor stages can be performed successfully with both infrastructures thanks to tools such as Chef, AWS OpsWorks and Puppet. They have reduced significantly the complexity and the time to execute them.
Taking Operations as an example on a cloud infrastructure, there are certain tasks which will not happen:
- there will be no hardware patching because you can always launch new machines, which is faster and less prone to errors
- it will not be needed to send a technician to replace a broken disk on the cabin, the cloud provider will care about it
- by using an Autoscaling group there will be no downtime when performing operations either on hardware or software, and degraded hosts will be detached and replaced automatically for new healthy ones
- also, some very important features like ensuring High Availability for the given services or applications running on top of servers are only possible in public cloud infrastructures
Summing up: you will be able to focus on the results and optimization instead of performing mantainance tasks, which will bring your company an OPEX reduction.
On an on-premises infrastructure you will be responsible for all the previously mentioned tasks and more.
AWS’s Shared Responsibility Model
It is worth mentioning also the benefits of AWS’s Shared Responsibility Model, which clearly separes the obligations and responsibilities both for customers and AWS:
- Customers will have to take care of the guest operating system, associated application software and the configuration of the AWS provided security group firewall
- AWS assumes responsibilities regarding operation, management and control of the components from the host operating system and virtualization layer down to the physical security of the facilities
Most of the stages can be certainly performed on the two types of infrastructures, but we have to point out that DevOps on an on-premises architecture is less agile compared to the cloud, due to the number of required human interactions, steps which cannot be automatized or directly cannot be performed, as opposed to a cloud infrastructure with all the native services which help implement DevOps at all stages.
Maybe you'll find this ebook interesting: