Infrastructure as Code is one of the most talked-about subjects in enterprise IT these days. But what is IaC? Infrastructure as Code is the process of managing your infrastructure via code or scripts, rather than taking on this task manually.
IaC admins and developers use configuration files that are then distributed to systems on a network through a manager. By provisioning and configuring your systems this way, you ensure the process is not only repeatable but dependable and can even be automated. Once you’ve achieved an automated level of provisioning/configuration, your systems will run more reliably across the board.
With IaC it becomes possible to ensure all systems are always found at a specified state (such as always running the latest versions of various software). The IaC process generally includes the following steps:
- Define and write specifications for systems, which are domain-specific.
- Files are created and sent to the IaC management system.
- The management system takes the steps to distribute the specifications to connected assets.
Typical benefits you’ll find with IaC include:
- Cost reduction
- Efficiency
- Reduced risk
- Improved testing
- More stable and scalable environments
- Accountability
- Consistency
- Better system documentation
- Heightened system security
You’ll find numerous major companies that depend on IaC, companies like Uber, Udemy, Slack, Instacart, Robinhood, Twitch, Delivery Hero, LaunchDarkly, DISH, Freedom Financial, JPMorgan Chase, and Square, among others.
That’s an impressive list, one your company would do well to be a part of. But how? What is your best route to employing Infrastructure as Code?
In a word, Terraform.
What is Terraform?
Terraform is Hashicorp’s take on Infrastructure as Code that allows businesses to build, change, and version infrastructure securely and efficiently. With Terraform, you can more easily manage things like computing instances, storage, networking, DNS entries, and SaaS features.
With Terraform, your admins/developers describe your infrastructure with a high-level configuration language, in human-readable declarative configuration files. These files serve as a blueprint for your infrastructure and can be versioned, shared, and reused.
It’s important to understand, however, that this solution uses a specific language for its’ configuration files. Terraform Language is used within Terraform CLI, Terraform Cloud, and Terraform Enterprise and is the primary user interface with the platform.
The syntax of the Terraform language shouldn’t be all that difficult for most developers and uses the following elements:
- Blocks: containers for other content and usually represent the configuration of an object.
- Arguments: assign values to a name.
- Expressions: represent a value, either literal or referencing/combining other values.
And because the Terraform language is declarative, most developers should be able to get up to speed quickly.
Typical use-cases for Terraform include:
- Multi-tier application deployment/configuration
- Self-service clusters
- Software demonstrations
- Disposable environments
- Software-defined networking
- Resource schedulers
- Multi-cloud deployment
Hiring Guide
To hire Terraform users and managers, you’ll need to set your sights on more than just developers and administrators. You need those familiar with DevOps, automation, provisioning, cloud-native, Terraform Language, and Infrastructure as Code.
You’ll also want to hire those who are familiar with your primary vendors, operating systems, and the various software stacks you deploy. Because there are so many moving parts to Infrastructure as Code, you need multi-talented team members who can immediately be thrown into the mix and not feel lost.
Should you hire a team member who isn’t familiar with the fundamentals of IaC, they will be way behind the curve. On the contrary, you might be safe hiring a new team member who has a solid understanding of IaC and other provisioning tools (such as Ansible and Puppet), who could then learn Terraform language fairly quickly.
The important thing here is to make sure anyone you hire has a solid foundation of using management tools for the provisioning and configuration of company assets.
Interview Questions
Define Terraform Init
The Terraform Init command is used to initialize the working directory containing the Terraform configuration files.
Name some of the major competitors of Terraform
- Packer
- Cloud Foundry
- Ansible
- Kubernetes
- Puppet
What is a Terraform provider?
A Terraform provider is accountable for API interactions and revealing resources.
How do you check for the installed version of Terraform?
You can check for the installed version with the command terraform -version.
How do you check if a Terraform configuration is valid?
You can test a Terraform configuration file with the command terraform validate.
How do you find information for providers in a current Terraform configuration?
You can view provider information with the command terraform providers.
What is a null resource in Terraform?
A null resource implements that average resource lifecycle but takes no further action.
What is a Terragrunt?
A Terragrunt is a thin wrapper that provides extra tools for:
- Keeping configurations “dry.”
- Working with multiple Terraform modules.
- Managing a remote state.
Job Description
We are looking for an experienced engineer to lead our Infrastructure as Code efforts. The ideal candidate will design, develop, document, test, and debug new and existing configuration management (Terraform) infrastructure as code.
You should have experience with Jenkins, AWS, Terraform, and Git, as well as be responsible for contributing to documenting operational and security standards.
Responsibilities
- Work with hosting and divisional resources to develop and implement automation around cloud-based infrastructure as a service.
- Work with business partners to design and implement new product solutions and processes for use in the cloud.
- Maintain a written knowledge base for the purposes of transferring knowledge to those who will be tasked with long-term monitoring and maintenance of implemented clients/products/processes/solutions.
- Develop automation to perform installation, configuration, and maintenance of Windows and Linux servers, as well as applications in a virtualized (public/private cloud) infrastructure.
- Review and interpret ongoing business report requirements.
- Provide timely scheduled management reporting.
- Investigate exceptions concerning asset movements.
- Write reusable, testable, and efficient Terraform configurations.
- Implement security and data protection.
- Integrate data storage solutions.
Skills And Qualifications
- 5+ years of system administration experience.
- 4+ years of practical Public Cloud (AWS, Azure, Google) hosting and deployment experience.
- 3+ years of practical infrastructure as code architecture, development, and automation.
- Extensive experience with the following technologies preferred: IAM administration, EC2, S3, EBS, ELB, SES, Route 53, AWS regions and Multi-AZ Deployments, Systems Manager, Cloud Formation, Terraform, Puppet / Chef, Powershell, Shell Scripting, Perl, JSON Strong scripting skills for system administration
- AWS Certification(s) a plus
- Excellent written and verbal communication and customer service skills
- Excellent problem-solving and analytical skills
- The ability to independently troubleshoot and solve complex technical issues in a fast-paced environment.
- Good organizational skills.
- Ability to work as part of a team.
- Attention to detail.
- Understanding the nature of asynchronous programming and its quirks and workarounds
- A positive attitude.
Conclusion
Most enterprise companies are already employing Infrastructure as Code. These tools have been around for some time and make the process of deploying and configuring infrastructure exponentially easier than doing it manually. If your business isn’t already in the process of hiring an IaC team, you are behind the curve.