MSDN Documentation

Azure Load Balancer APIs

This document provides an overview and reference for the Azure Load Balancer REST APIs. These APIs allow you to programmatically manage your Azure Load Balancers, including their configuration, health probes, and backend pools.

Overview

Azure Load Balancer is a Layer 4 (TCP/UDP) load balancer that enables you to distribute network traffic across multiple virtual machines or services. It supports both public and internal load balancing scenarios. The REST APIs provide a comprehensive way to interact with and control Azure Load Balancer resources.

Key functionalities accessible via the APIs include:

  • Creating, updating, and deleting Load Balancer resources.
  • Configuring frontend IP configurations.
  • Defining backend address pools.
  • Setting up load balancing rules.
  • Configuring health probes.
  • Managing inbound NAT rules.
  • Retrieving diagnostic information and metrics.

Core Resource Types

The primary resource for managing load balancing is the Microsoft.Network/loadBalancers resource type.

Load Balancer Resource Object

Represents an Azure Load Balancer.


{
    "name": "myLoadBalancer",
    "location": "eastus",
    "sku": {
        "name": "Standard" // or "Basic"
    },
    "properties": {
        "frontendIPConfigurations": [...],
        "backendAddressPools": [...],
        "loadBalancingRules": [...],
        "inboundNatRules": [...],
        "healthProbes": [...]
    }
}
                        

Common API Operations

The following table outlines some of the most commonly used REST API operations for Azure Load Balancer.

API Reference Summary

  • GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}?api-version=2023-05-01 - Retrieve details of a specific load balancer.
  • PUT /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}?api-version=2023-05-01 - Create or update a load balancer.
  • DELETE /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}?api-version=2023-05-01 - Delete a load balancer.
  • GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers?api-version=2023-05-01 - List all load balancers within a resource group.

Sub-Resources and Configurations

Load balancers are composed of various sub-resources that define their behavior and connectivity. These can often be managed individually or as part of the main load balancer resource.

Frontend IP Configurations

Defines the public or private IP address that the load balancer uses to accept incoming traffic.

Frontend IP Configuration Object

{
    "name": "frontendIPConfig",
    "properties": {
        "publicIPAddress": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPAddresses/myPublicIP"
        },
        "privateIPAllocationMethod": "Dynamic" // or "Static"
    }
}
                        

API Operations: Typically managed via PUT/GET/DELETE on the main load balancer resource under properties.frontendIPConfigurations, or via dedicated PUT/GET/DELETE on /providers/Microsoft.Network/loadBalancers/{loadBalancerName}/frontendIPConfigurations/{frontendIPConfigName}.

Backend Address Pools

A collection of virtual machines or services that will receive traffic from the load balancer.

Backend Address Pool Object

{
    "name": "backendPool",
    "properties": {
        "backendIPConfigurations": [...] // References to NIC IP configs
    }
}
                        

API Operations: Managed similarly to Frontend IP Configurations.

Load Balancing Rules

Define how traffic is distributed. Specifies the frontend IP, protocol, port, and backend pool.

Load Balancing Rule Object

{
    "name": "httpRule",
    "properties": {
        "frontendIPConfiguration": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/myLoadBalancer/frontendIPConfigurations/frontendIPConfig"
        },
        "backendAddressPool": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/myLoadBalancer/backendAddressPools/backendPool"
        },
        "protocol": "Tcp",
        "frontendPort": 80,
        "backendPort": 80,
        "enableFloatingIP": false,
        "idleTimeoutInMinutes": 4,
        "probe": {
            "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/myLoadBalancer/probes/httpProbe"
        }
    }
}
                        

API Operations: Managed similarly to Frontend IP Configurations.

Health Probes

Specify how the load balancer checks the health of backend instances. Supports TCP, HTTP, and HTTPS probes.

Health Probe Object

{
    "name": "httpProbe",
    "properties": {
        "protocol": "Http",
        "port": 80,
        "requestPath": "/",
        "intervalInSeconds": 5,
        "numberOfProbes": 2
    }
}
                        

API Operations: Managed similarly to Frontend IP Configurations.

API Versioning

It is crucial to specify the correct API version when making requests. The latest stable version is generally recommended. You can find a list of available API versions in the Azure REST API browser or documentation.

For this documentation, we are using:

api-version=2023-05-01

Code Examples (Conceptual)

While specific SDK examples are not provided here, the following demonstrates how you might conceptualize an API call using cURL.


# Example: Creating a simple Load Balancer
curl -X PUT \
  'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}?api-version=2023-05-01' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -d '{
    "location": "eastus",
    "sku": { "name": "Standard" },
    "properties": {
        "frontendIPConfigurations": [
            {
                "name": "frontendIPConfig",
                "properties": {
                    "publicIPAddress": {
                        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPAddresses/myPublicIP"
                    }
                }
            }
        ],
        "backendAddressPools": [
            { "name": "backendPool" }
        ],
        "loadBalancingRules": [
            {
                "name": "httpRule",
                "properties": {
                    "frontendIPConfiguration": { "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/frontendIPConfigurations/frontendIPConfig" },
                    "backendAddressPool": { "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/backendAddressPools/backendPool" },
                    "protocol": "Tcp",
                    "frontendPort": 80,
                    "backendPort": 80,
                    "probe": { "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/httpProbe" }
                }
            }
        ],
        "healthProbes": [
            {
                "name": "httpProbe",
                "properties": {
                    "protocol": "Http",
                    "port": 80,
                    "requestPath": "/",
                    "intervalInSeconds": 5,
                    "numberOfProbes": 2
                }
            }
        ]
    }
}'
                    

Further Reading

For detailed information on specific API properties, request/response bodies, and error codes, please refer to the official Azure REST API Reference documentation.

You can also explore the Azure SDKs for various programming languages to simplify interaction with these APIs.