Amplify Your IT Career by Building Infrastructure Development Skills
This blog post was written by Mike Pfeiffer
Public and private cloud platforms have changed the IT landscape. With virtualization and cloud computing, it’s easier than ever to spin up a fully functional application environment with a single button click or API call. The world of server deployment and administration is much different than it was ten years ago, and it will never be the same.
This is great news because businesses can now move much faster than ever before. And the reality is, many of them must do so in order to keep up with their competitors.
The challenge is, you’ll want to start thinking like a software developer if you plan to stay in the trenches over the long term in the tech industry.
Here’s why. Most technologies are shifting to a new paradigm where software development practices are being applied to infrastructure. Speed, agility, consistency, and predictability are all characteristics of platforms that power modern day applications. The infrastructure engineers of the future will be expected to have deep automation expertise.
IT pros who want to thrive in the tech industry in the coming years should learn the core principles of infrastructure development. Those who do will hold in-demand skills in a world where almost everything is software defined.
Here are four areas to focus on to start building infrastructure development skills.
Infrastructure as Code
Imagine being able to click a button in a web console, and like magic, you have a fully built server environment, complete with Domain Controllers, SQL Servers, and a new SharePoint farm ready to serve users.
Sounds far-fetched, but this is something that you can do today using an Azure Resource Manager (ARM) template.
Here’s how it works. All the infrastructure required to power the servers is declared in a plain text file. Technically, it’s a JSON template, which means it’s really just a set of key/value pairs. Think of it as a list of resources with their required settings. For example, in the file, there are blocks of code that describe the virtual network, storage, servers, and along with all of their detailed settings.
All of the infrastructure for the deployment is referenced in the template. It’s human readable, and anyone with a basic understanding of the syntax can look at the template and understand it’s intent.
These templates can be deployed interactively in a web browser, or via an API call as part of an automated process.
With infrastructure written in code, you always know exactly how the environment is supposed to be configured. You literally have a blue-print of the entire environment that you can execute if you ever need to rebuild it.
Imagine the possibilities this opens up when you want to test something.
Your first step to becoming an infrastructure developer is to start learning the basics of infrastructure as code. If you’re working with Azure, start educating yourself about ARM templates. Try to build one that does something simple, like building a standalone server.
Servers that are launched from an infrastructure template also need to be configured. They need software installed and configured, and there needs to be a mechanism to keep them in their desired state. That’s where configuration management comes into play.
For example, that ARM template that spins up the SharePoint environment is mostly focused on building the server infrastructure. It’s creating the virtual network, storage, VM’s, and so on. The servers actually boot with a plain operating system.
Once the servers are up and running, a configuration management solution is used to boot strap the applications. In this case, the technology happens to be PowerShell DSC.
Most configuration management solutions follow similar patterns. Like infrastructure templates, configuration management code tells each server what software should be installed, and how it should be configured.
As an infrastructure developer, you’ll need skills with a configuration management solution like PowerShell DSC. The good news is that once you’ve learned one, it’ll be easier to pick up another. For example, DSC implements many patterns used in other configuration management tools like Chef, Puppet, and Ansible, to name a few.
Infrastructure as code templates, along with startup scripts or configuration management scripts, can provide an end-to-end automated solution for an application and all of its dependencies.
When developers build applications, they typically do so in teams. In order to make life easier for everyone, the code is typically stored in a central location, like a version control repository.
It’s a common practice for developers to make very small, incremental changes to the code base for an application. Those changes get committed into the code base in the version control repository. If there’s an issue, the change can be reverted easily, since it was a small change.
Each time code is committed to the repository, meaningful notes are included about the change. This gives everyone a clear picture of what changed from one version to the next. Teams can even compare the new version of the code with the previous one side-by-side to see what was done.
This is exactly what infrastructure developers need to do as well. All of your infrastructure templates and configuration management scripts should live in a version control repository. Git-based version control systems, like GitHub, are widely used.
As an infrastructure developer, you’ll want to learn how to use Git, which is a version control tool. You can use it to store your code in a repository on GitHub, which is simply a platform for hosting git-based version control repositories.
Continuous Integration and Delivery (CI/CD)
When a software developer commits a small code change to a version control repository, that change is often tested. For example, if it’s a C# application, an automated process can take the code and make sure it compiles without any errors. It can also run other tests to make sure the code was written correctly. This process is known as continuous integration (CI).
The idea with CI is that developers get fast feedback on whether or not their changes are working. If they get build errors or the tests fail, they know they need to address thing right away.
Once the code has passed through those basic checks, it might be useful to perform further analyses, like performance or user interface tests. This, of course, requires infrastructure to run the code.
As a next step in the process, the team could invoke an infrastructure as code template to build a clone of the production environment. Once the servers are up and running, the latest version of the code can be deployed and tested.
If everything checks out, the team knows they have a known-good version of the code that is production ready, which is the basis for Continuous Delivery (CD).
As an infrastructure developer, you’ll want to be able to work with software developers and understand their world. To do that, learn the basics of the CI/CD release pipeline workflow. It’s simply a chain of events that takes code committed in version control to being fully validated and considered ready for production use. Azure focused infrastructure developers will want to look into the Azure DevOps platform.
Where to go from here
There’s a lot to learn as an infrastructure developer. The good news is; most organizations are still in the very early stages of figuring out how to do this efficiently. There will be big opportunities for those who decide to take advantage of this shift in the industry.