Getting Started with Terraform for Azure

Getting Started with Terraform for Azure

This blog post is an attempt by myself to learn Terraform and share insights on getting started with Terraform for managing Azure resources.

1. Installation

Follow these steps to install Terraform:

  1. Download Terraform from the official Terraform downloads page.
  2. Extract the downloaded file and move the Terraform executable to a directory included in your system's PATH.
  3. Verify the installation by running:
    terraform --version

2. Setting Up Azure CLI

You need the Azure CLI to authenticate Terraform with Azure. Install it by following the instructions on the Azure CLI installation page.

Log in to your Azure account using:

az login

3. Initialize a Terraform Project

Create a directory for your Terraform configuration files and navigate to it:

mkdir terraform-azure-demo
cd terraform-azure-demo

Create a file named main.tf to define your infrastructure.

4. Basic Terraform Commands

Here are some basic Terraform commands you will use:

  • terraform init: Initializes the working directory with necessary plugins.
  • terraform plan: Previews the actions Terraform will take.
  • terraform apply: Applies the configuration to create resources.
  • terraform destroy: Deletes the resources defined in your configuration.

5. Terraform State

Terraform uses a state file to keep track of the resources it manages. By default, this file is stored locally as terraform.tfstate. For team collaboration, use a remote backend like Azure Storage to store the state file.

To configure a remote backend, add the following to your main.tf:

{
  "terraform": {
    "backend": "azurerm",
    "config": {
      "storage_account_name": "",
      "container_name": "tfstate",
      "key": "terraform.tfstate"
    }
}

6. Sample Terraform Repository

To quickly get started with Terraform on Azure, you can refer to the following GitHub repository:

https://github.com/rt-public/az-terraform.git

7. Key Terraform Configuration Files

Here are the essential files you will use in a typical Terraform project:

7.1 provider.tf

This file defines the provider configurations, which specify the infrastructure provider (e.g., Azure, AWS, Google Cloud) Terraform will interact with. Providers are plugins that allow Terraform to manage resources. They handle API interactions and abstract the complexities of resource management.

For Azure, the provider configuration looks like this:

provider "azurerm" {
  features {}
}

The features block is mandatory for the Azure provider but can remain empty. It enables additional capabilities of the provider if configured.

7.2 main.tf

This file contains the main configuration for your resources. It defines the infrastructure components you want to create or manage, such as virtual networks, virtual machines, or resource groups.

For example, to create a resource group in Azure:

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "East US"
}

Here, azurerm_resource_group is the resource type, example is the resource name, and the block defines its attributes like name and location.

7.3 variables.tf

Use this file to define input variables for your project. Variables allow you to make your Terraform configurations reusable and configurable. For example:

variable "resource_group_name" {
  description = "The name of the resource group."
  type        = string
}

You can then reference these variables in other files using var.. For example:

resource "azurerm_resource_group" "example" {
  name     = var.resource_group_name
  location = "East US"
}

7.4 outputs.tf

This file defines the outputs of your Terraform project, which are the values you want to retrieve after applying your configuration. Outputs are useful for sharing information like resource IDs, connection strings, or endpoints.

output "resource_group_name" {
  value = azurerm_resource_group.example.name
}

8. Sample Terraform Code

Here is a complete example using the above files:

// provider.tf
provider "azurerm" {
  features {}
}

// main.tf
resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "East US"
}

// variables.tf
variable "resource_group_name" {
  description = "The name of the resource group."
  type        = string
}

// outputs.tf
output "resource_group_name" {
  value = azurerm_resource_group.example.name
}

9. References

Comments

Popular posts from this blog

Check SQL Server Database Status

PowerShell and Azure Resource Graph

Static Code Analysis: Some Tools