[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