Before cloud and virtual machines, provisioning an IT infrastructure was an arduous task. What is provisioning? Provisioning means making the hardware, software resources available for a business application for its deployment so that users can access it over the network. For this, one needed to purchase hardware, servers and other related components permanently with capital investment.
Cloud computing, especially the virtualization, changed the game of provisioning of IT infrastructure completely. We started getting what is called as ‘elastic infrastructure’ with which we were able to scale up or scale down anytime based on our need. Even, the mode of making payment for the IT infrastructure changed to pay-per-use. That means, we started paying only for the infrastructure hired/used for our business. Many cloud service providers came into limelight like AWS, Microsoft Azure etc. More companies started adopting cloud. They started building data centers using public, private and hybrid cloud technologies. The infrastructure started becoming more complex.
How the provisioning of IT environment is done? One needs to raise a request to operations/ production team for the resources like server, memory etc. In technical terms it is called as ‘raising a ticket’. In a ticketing system software, the user enters the details for a resource he/she wants. For example, a request for an Apache web server for purpose of creating a test environment. Someone who is system administrator from operations team, reads the ticket and makes a virtual machine available for this deployment of Apache webserver. To do all this, the System administrator has to login into the management portal or ticketing system and perform this manually.
This is perfectly fine, if you are handling small number of systems and changes to the system are not very frequent. However, that is not the case today. Ten years back, a new software or an update was getting released once in few months. But now with agile and DevOps technologies, companies like Amazon, Facebook release software updates thousand times a day. Will this be possible without automation.
Just imagine one needs to fire up a thousand virtual machines, containers like docker and install some application software on them. Doing this manually is a nightmare. Secondly, this entire deployed configuration does not last long. In a few days, I may need to do many changes or may even need to just remove everything and start a fresh configuration. How to cope up with such fast changes manually?
This is possible only and only If you can have scripts or command sequences which can automatically create such huge infrastructure and perform quick configuration. You can to run the script to fire up virtual machines, servers and whatever you need at whichever place. These scripts or code is called as Infrastructure as code or IaC.
Infrastructure as code (IaC)
Infrastructure as code (IaC) is the process of managing and provisioning computer data centers through machine-readable definition files, rather than physical hardware configuration or interactive configuration tools.
With IaC, the entire IT infrastructure setup is kind of encrypted and encapsulated inside the code. The additional advantage with infrastructure as code is its ‘versioning’. Imagine you have configured 100 servers with different software versions a month back. There were many changed done in the configuration over the past month. Today, client asks you to roll back to the configuration which was used a month back. Are you kidding? 100 servers and multiple teams doing countless changes to software.
This next to impossible task can be done with ease if you have older version of ‘infrastructure code’ available in your version control system. Just take that version and run the script to re-create the exact infrastructure which was there one month back.
Why system admins should care about IaC
If you are already working as system administrator, then I need not explain you the importance of automation and infrastructure as code(IaC). For smaller level of automation, shell scripts would be good. When you start handling more complex systems, a powerful automation tool is needed.
Currently if you look at any medium size deployment, it contains hundreds of virtual machines, containers, micro-services, orchestrators etc. As a next generation System Admin/administrator, if you start mastering tools which are based on IaC, you will work at the cutting edge of the technology.
There are many tools like Terraform, AWS CloudFormation, Chef, Puppet, Saltstack, Ansible, docker etc. which are popular. Learning these tools and automation is very crucial for the survival and growth in today’s job market.
Even if you are a fresher who wants to do career in latest technologies like Cloud and DevOps, learning the automation is must. As a fresh graduate, you need to start learning most widely used operating system like Red Hat Linux. Once you start understanding how system administration is done, how to configure user management, how to install and configure different application like web servers, how to set networks and configure them etc. The next step to learn is how to create scripts to automate some of the tasks you do daily.
Experienced professionals or aspiring young IT infrastructure specialist (system admins), automation is the key for success!