Table of Contents
- Introduction
- Prerequisites
- Installing and Configuring Terraform
- Setting Up Your Terraform Project in VS Code
- Writing the Terraform Configuration
- Initializing and Applying the Terraform Configuration
- Retrieving the VM's Public IP and Connecting via SSH
- Destroying the VM
- Conclusion
Introduction
This guide walks you through the step-by-step process of provisioning Azure resources using Terraform, deploying a virtual machine, retrieving its IP, connecting via SSH, and finally destroying the VM. We'll use VS Code to edit our Terraform scripts for a smooth development experience.
Prerequisites
Before we begin, ensure you have the following installed on your machine:
- Terraform (Download here)
- Azure CLI (Download here)
- VS Code (Download here)
- An active Azure subscription
Installing and Configuring Terraform
First, verify that Terraform is installed by running:
terraform -v
If Terraform is not installed, download and install it from Terraform's official site.
Log in to Azure with:
az login
Set your default subscription (replace your-sub-id
with your actual subscription ID):
az account set --subscription your-sub-id
Setting Up Your Terraform Project in VS Code
- Open VS Code
- Create a new folder (e.g.,
azure-terraform-vm
) - Open the folder in VS Code
- Create a new file named
main.tf
Writing the Terraform Configuration
Copy the following Terraform code into main.tf
. Replace your-VM-name
, your-Vnet-name
, etc., with meaningful names of your choice. Don't forget to replace the username and password as well, that's what you will use to SSH into your VM
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "4.3.0" } } } provider "azurerm" { features {} subscription_id = "your-sub-id" } resource "azurerm_resource_group" "your-rg-name" { name = "your-rg-name" location = "East US" } resource "azurerm_virtual_network" "your-Vnet-name" { name = "your-Vnet-name" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.your-rg-name.location resource_group_name = azurerm_resource_group.your-rg-name.name } resource "azurerm_subnet" "your-Subnet-name" { name = "your-Subnet-name" resource_group_name = azurerm_resource_group.your-rg-name.name virtual_network_name = azurerm_virtual_network.your-Vnet-name.name address_prefixes = ["10.0.1.0/24"] } resource "azurerm_public_ip" "your-ip-name" { name = "your-ip-name" location = azurerm_resource_group.your-rg-name.location resource_group_name = azurerm_resource_group.your-rg-name.name allocation_method = "Static" } resource "azurerm_network_interface" "your-NIC-name" { name = "your-NIC-name" location = azurerm_resource_group.your-rg-name.location resource_group_name = azurerm_resource_group.your-rg-name.name ip_configuration { name = "internal" subnet_id = azurerm_subnet.your-Subnet-name.id private_ip_address_allocation = "Static" private_ip_address = "10.0.1.4" public_ip_address_id = azurerm_public_ip.your-ip-name.id } } resource "azurerm_linux_virtual_machine" "your-VM-name" { name = "your-VM-name" location = azurerm_resource_group.your-rg-name.location resource_group_name = azurerm_resource_group.your-rg-name.name size = "Standard_B2ms" admin_username = "your-admin-username" admin_password = "YourSecurePassword!" network_interface_ids = [azurerm_network_interface.your-NIC-name.id] disable_password_authentication = false os_disk { name = "your-OsDisk-name" caching = "ReadWrite" storage_account_type = "Standard_LRS" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts-gen2" version = "latest" } } output "public_ip_address" { description = "The public IP address of the virtual machine" value = azurerm_public_ip.your-ip-name.ip_address }
Initializing and Applying the Terraform Configuration
Run the following commands in the terminal inside VS Code:
terraform init
terraform plan
terraform apply -auto-approve
Terraform will create all the specified resources in Azure.
Retrieving the VM's Public IP and Connecting via SSH
Get the public IP:
echo $(terraform output -raw public_ip_address)
Use SSH to connect to the VM:
ssh your-admin-username@your-vm-public-ip
Destroying the VM
Once you're done, destroy the VM to avoid unnecessary charges:
terraform destroy -auto-approve
Conclusion
Congratulations! 🎉 You've successfully:
- Provisioned Azure resources using Terraform
- Deployed a Virtual Machine
- Retrieved its IP and connected via SSH
- Cleaned up resources by destroying the VM
This is just the beginning of your Terraform journey in Azure! 🚀 Stay tuned for more DevOps guides.
Top comments (0)