Infrastructure as Code – Lessons learned from Dev to Ops
What is Infrastructure as Code (IaC)? At DevOps Con, we spoke with Emma Button from nubeGo about IaC, what agile methods are needed, the best tools for the job, and what her advice is for people coming into infrastructure from the development world.
Infrastructure as Code (IaC) is an important concept for DevOps teams. In this Interview from DevOps Conference 2019, Emma Button (nubeGo) talks about how agile methods should not just be put to use in development, but also for building IaC systems.
JAXenter: Today I am talking to Emma Button from nubeGO about Infrastructure as Code (IaC). Thank you for taking the time to talk with us Emma! Let’s start off with a simple question: What is Infrastructure as Code?
Emma Button: Infrastructure as Code is when you define the resources that you need for your infrastructure estate. You write them in code and then you use an infrastructure provisioning engine to create and configure those resources.
JAXenter: Can you tell us a little bit about how this relates to DevOps?
Emma Button: So if you automate the creation of your resources and you remove the human hands-on element, it helps to reduce friction during your pipeline of delivery. You can use Infrastructure as Code as part of your continuous integration and continuous delivery pipeline.
Infrastructure as Code is like the foundation building the resources on which you then build your application.
JAXenter: With DevOps it’s always about how you do it and how you work on it. Are there other agile principles you should keep in mind and adopt when working on Infrastructure as Code?
Emma Button: My talk at DevOps Con was about the agile lessons that I’ve learned through software engineering and how I apply them now to Infrastructure as Code. To me, the one which stands out is simplicity: the act of doing as little as possible to get your end goal and maximizing the things you don’t do.
For IoC, I see that as reusing code libraries and consulting external registries so that if there’s somebody that’s already done what you’re trying to do, then you can use their expertise. You reduce complexity and duplication by reusing code.
JAXenter: Do you have any advice for people coming from development?
Emma Button: I’ve spoken to several people at DevOps Con who’ve come from a development background. The advice that I would give them is to keep your eyes open. The challenges that we face in the infrastructure world can be very different than the challenges that you face in development.
That said, there’s still the same challenges of creativity, timeliness, and the ability to refactor. The challenges have got the same shape, but the pressure on you might be different. So a good agile developer will learn to inspect and adapt. So we inspect and adapt our tooling; we inspect and adapt our behaviors.
JAXenter: About the reusable code you mentioned, what kind of tools are there? How do you choose the right tools?
Emma Button: At nubeGO we use Terraform. The reason why we use Terraform is because it’s widely adopted. We tend to find that it is the fastest tool for our clients to adopt if they’ve gone from a standing start. And Terraform for us is platform-agnostic since we work in the cloud we need to be able to use Terraform across multiple different cloud providers and also on-premise.
The tools that I discussed today are tools that you can use alongside Terraform to instill quality in what you do. So, unit testing frameworks using inspect testing on top of Terraform to validate that your server is in the correct state.
JAXenter: Unit testing is an important keyword that you just mentioned. Are there differences in how developers from different backgrounds do testing?
Emma Button: There’s no right or wrong way to do unit testing and arguably the sorts of testing which you would apply on infrastructure probably aren’t strictly unit testing. But the challenge is to ensure, how do I know that my system is in the correct state for me to proceed? How do I ensure that I haven’t made a glaringly obvious mistake?
So once again, it’s about how the challenges of software development are very similar to the challenges of infrastructure. So we can take the learnings from running lots and lots of unit tests quickly to get a fast feedback loop. We can do that with the infrastructure code as well.