[Avg. reading time: 6 minutes]

What is Infrastructure as Code

Infrastructure as Code (IaC) means:

Defining cloud resources using code instead of manually creating them.


Without IaC (Not best practice)

  • Click in portal
  • Create resources manually
  • Hard to repeat
  • Error-prone

With IaC (Best Practice)

  • Write code to define resources
  • Reusable and consistent
  • Version controlled

Example (Conceptual)

Instead of:

  • Manually creating VM
  • Manually creating storage

You write code that says:

  • Create 1 VM
  • Create 1 Storage Account
  • Connect them

IaC Tools in Azure

1. ARM Templates

  • Native Azure JSON-based templates

2. Terraform

  • Multi-cloud IaC tool

Why IaC Matters

  • Repeatability : same setup every time
  • Version Control : track changes
  • Automation : faster deployments
  • Reliability : fewer mistakes

Summary

  • Deploy same setup multiple times
  • Maintain consistency
  • Automate environments (Dev / Test / Prod)

Azure Login

az login

Azure Group

az group list --output table

# Create a new Resource Group
az group create --name resgroup_via_cli --location eastus2

# delete the Resource Group
az group delete --name resgroup_via_cli 

# Delete the Resource Group without Prompt
az group delete --name resgroup_via_cli -y

# List all VMs.

az vm list

# Azure List Sizes

az vm list-sizes --location eastus

Sample Basic VM

template.json

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",

  "parameters": {
    "vmName": { "type": "string", "defaultValue": "myVM" },
    "adminUsername": { "type": "string" },
    "adminPassword": { "type": "secureString" }
  },

  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2021-11-01",
      "name": "[parameters('vmName')]",
      "location": "[resourceGroup().location]",

      "properties": {
        "hardwareProfile": {
          "vmSize": "Standard_B1s"
        },

        "osProfile": {
          "computerName": "[parameters('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]"
        },

        "storageProfile": {
          "imageReference": {
            "publisher": "Canonical",
            "offer": "UbuntuServer",
            "sku": "18_04-lts",
            "version": "latest"
          }
        }
      }
    }
  ]
}

Deploy ARM Template using Azure CLI

Step 1: Login to Azure

az login

Step 2: Create a Resource Group

az group create \
  --name myResourceGroup \
  --location eastus

Step 3: Deploy the ARM Template

az deployment group create \
  --resource-group myResourceGroup \
  --template-file template.json \
  --parameters adminUsername=azureuser adminPassword=YourPassword123

#iac #armtemplates #terraformVer 6.0.25

Last change: 2026-04-21