While deploying your same terraform code manually multiple times you must have got through the thoughts:
If we can automate the whole deployment process and replace the whole tedious process with few clicks.
If we can dynamically change the values of terraform.tfvars.
If we can restrict the regions of deployments.
If we can limit our VM types to maintain better cost optimization.
In this article, we will touch upon these problems and try to resolve them in a way that the same concepts can also be applied to similar requirements.
Soo… Let’s Get Started !!!
First of all, we need to know what is Terraform & Azure DevOps.
Talking About Terraform: HashiCorp Terraform is an infrastructure as a code tool that lets you define both cloud and on-prem resources in human-readable configuration files that you can version, reuse, and share. You can then use a consistent workflow to provision and manage all of your infrastructures throughout its cycle. Terraform can manage low-level components like compute, storage, and networking resources, as well as high-level components like DNS entries and SaaS features.
Let’s assume a scenario in which you are repeating a few tasks from your pipeline into multiple stages and/or pipelines or projects. In that case, it gets really tiring to repeat and configure each task individually over and over again. Azure DevOps provides the feature of Task Group in which we can encapsulate a sequence of tasks from our build or release pipelines and reuse those tasks in other pipelines.
What is Azure DevOps?
Now, let’s talk about Azure DevOps, it is a mixture of the simplest technologies and best practices. Therefore we can go as far as saying that it is the Next Big Thing in the IT Industry. Azure DevOps is a Software as a service (SaaS) platform from Microsoft providing an end-to-end DevOps toolchain for developing and deploying software. Microsoft launched this as they understood the fact that DevOps has become vital to a team’s success.
A task group facilitates the encapsulation of a sequence of tasks, defined already in a build or a release pipeline, into a single reusable task that can be added to a build or release pipeline (like any other task). We can, as per our choice, extract parameters from the encapsulated tasks as configuration variables, and abstract the rest of the task information.
The new task group is automatically added to the task catalog, ready to be added to other releases and build pipelines. At the project level, the task groups are stored and are not accessible outside the project scope.
Azure DevOps is an integrated service provided by Azure. In recent times, it is observed that Azure DevOps is increasing its penetration into the DevOps community. Being a SaaS service, it doesn’t come with a pre-configured host or better say, an agent to execute its commands. That’s why whenever we want to use our Azure DevOps Pipeline we need to have an agent configured in our Agent Pool. In this blog, we will learn how to configure an agent and later on how to create a service for our host.
Let’s Get Started
Configuring a self-hosted Agent might seem complicated but by following the below steps we can easily configure an agent in our Agent Pool. So let’s get started.
What is Azure DevOps?
Now, let’s talk about Azure DevOps, it is a mixture of the simplest of technology and therefore the application of best practices. We can say, it is the Next Big Thing in the IT Industry. Azure DevOps is a Software as a service (SaaS) platform from Microsoft that provides an end-to-end DevOps toolchain for developing and deploying software. Microsoft recently launched this as they understand that DevOps has become vital to a team’s success.
Azure Self-hosted Agent
An agent that you set up and manage on your own to run jobs is a self-hosted agent. Though we can use a Microsoft Hosted Agent, we prefer a self-hosted Agent. This is to have more control to install dependent software needed for our builds and deployments, machine-level caches and configuration persist from run to run, boosting speed and maintaining the backup of our logs. You can use self-hosted agents in Azure Pipelines or Azure DevOps Server, formerly named Team Foundation Server (TFS). To successfully configure a self-hosted Agent we need an Agent Pool, download & unzip the package, Personal Access Token (PAT) and execute a few shell commands. Let’s move step by step.
Let’s consider a scenario in which you are deploying your infrastructure using a Terraform code (infrastructure-as-code) which is stored in a remote git repository. Now working in an organization you need to make sure that all your deployments are always tracked without an exception, an add-on to that whether your Terraform code is following your security and compliance policies or not. Or maybe what is the monthly cost that you can expect with that infra and whether it lies under your budget or not. You may also want to take note that all your resources are being created in the same region… etc… etc.
Sounds magical right !!! We all know that these concerns are very important when you’re looking for a highly consistent, fully tracked, and automated approach. That’s why in this article we are going to look for a simple step-by-step way to automate and streamline our Terraform code using Azure DevOps (ADO).