Skip to main content

Build Azure LoadBalancer by Terraform

To create an Internal Load Balancer (ILB) in Azure using Terraform, you need to define the necessary resources in a Terraform configuration file. Below is an example of how you can achieve this based on the details you provided.

Step 1: Define the Provider

First, you need to specify the Azure provider in your Terraform configuration.

provider "azurerm" 
{
features {}
}

Step 2: Define the Resource Group

Ensure the resource group already exists or create it if necessary.

resource "azurerm_resource_group" "rg" {
name = "rg-webmethods-uat-001"
location = "Australia East"
}

Step 3: Define the Virtual Network and Subnet

Create the virtual network and subnets if they don't already exist.

resource "azurerm_virtual_network" "vnet" {
name = "vnet-webmethods-uat-001"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
}
resource "azurerm_subnet" "snet_ilb" {
name = "snet-ilbwebmethods-uat-001"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = ["10.0.1.0/24"]
}
resource "azurerm_subnet" "snet_backend" {
name = "snet-webmethods-uat-001"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = ["10.0.2.0/24"]
}

Step 4: Define the Internal Load Balancer

Create the internal load balancer with the specified configuration.

resource "azurerm_lb" "ilb" {
name = "ilb-webmethods-uat-001"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
sku = "Standard"
frontend_ip_configuration {
name = "fep-webmethods-uat-001"
subnet_id = azurerm_subnet.snet_ilb.id
private_ip_address_allocation = "Static"
private_ip_address = "10.0.1.10" # Replace with the desired IP address
}
}
resource "azurerm_lb_backend_address_pool" "backend_pool" {
loadbalancer_id = azurerm_lb.ilb.id
name = "bep-webmethods-uat-001"
}
resource "azurerm_lb_probe" "probe" {
loadbalancer_id = azurerm_lb.ilb.id
name = "probe-webmethods-uat-001"
port = 80
}
resource "azurerm_lb_rule" "rule" {
loadbalancer_id = azurerm_lb.ilb.id
name = "rule-webmethods-uat-001"
protocol = "Tcp"
frontend_port = 80
backend_port = 80
frontend_ip_configuration_name = "fep-webmethods-uat-001"
backend_address_pool_ids = [azurerm_lb_backend_address_pool.backend_pool.id]
probe_id = azurerm_lb_probe.probe.id
}

Step 5: Associate Backend VMs with the Load Balancer

Assuming you have existing VMs, you can associate them with the backend pool.

resource "azurerm_network_interface_backend_address_pool_association" "vm1" {
network_interface_id = "/subscriptions/your-subscription-id/resourceGroups/rg-webmethods-uat-001/providers/Microsoft.Network/networkInterfaces/vmwmisuat001-nic"
ip_configuration_name = "ipconfig1"
backend_address_pool_id = azurerm_lb_backend_address_pool.backend_pool.id
}
resource "azurerm_network_interface_backend_address_pool_association" "vm2" {
network_interface_id = "/subscriptions/your-subscription-id/resourceGroups/rg-webmethods-uat-001/providers/Microsoft.Network/networkInterfaces/vmwmisuat002-nic"
ip_configuration_name = "ipconfig1"
backend_address_pool_id = azurerm_lb_backend_address_pool.backend_pool.id
}

Step 6: Apply the Configuration

Finally, apply the Terraform configuration to create the resources in Azure.

terraform init
terraform apply

Notes:

  • Replace your-subscription-id with your actual Azure subscription ID.
  • Ensure the VMs (vmwmisuat001 and vmwmisuat002) and their network interfaces already exist or create them as part of your Terraform configuration.
  • Adjust the IP addresses, ports, and other configurations as per your specific requirements.
  • This Terraform configuration will create an internal load balancer in Azure with the specified frontend and backend configurations, and associate the backend VMs with the load balancer.