Skip to main content

Load Balancer and Web Server Using Azure Load Balancer and Virtual Machine

Basic example of an Azure Load Balancer fronting an Azure VM accessible over HTTP

This example lives in the pulumi/examples repository. Check out just this directory to use it:

Get started with this example
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examples
git -C pulumi-examples sparse-checkout set azure-py-loadbalancer-vm
cd pulumi-examples/azure-py-loadbalancer-vm

This example deploys an Azure Load Balancer fronting an Azure Virtual Machine and starts an HTTP server on the VM.

Prerequisites#

  1. Install Pulumi
  2. Configure Pulumi for Azure
  3. Configure Pulumi for Python

Deploying and running the program#

  1. Create a new stack:

    Terminal window
    pulumi stack init dev
  2. Set the required configuration for this example. This example requires you to supply a username and password to the virtual machine that we are going to create.

    $ pulumi config set azure-native:location westus # any valid Azure region will do
    $ pulumi config set username webmaster
    $ pulumi config set password --secret <your-password>

    Note that --secret ensures your password is encrypted safely.

  3. Run pulumi up to preview and deploy the changes:

    $ pulumi update
    Previewing update (azuredev):
    Type Name Plan
    + pulumi:pulumi:Stack azure-py-loadbalancer-vm-azuredev create
    + ├─ random:index:RandomString azure-py-loadbalancer-vm-lb-domain-label create
    + ├─ azure-native:resources:ResourceGroup azure-py-loadbalancer-vm-resource-group create
    + ├─ azure-native:network:VirtualNetwork azure-py-loadbalancer-vm-network create
    + ├─ azure-native:network:NetworkSecurityGroup azure-py-loadbalancer-vm-security-group create
    + ├─ azure-native:network:PublicIPAddress azure-py-loadbalancer-vm-lb-public-ip create
    + ├─ azure-native:network:LoadBalancer azure-py-loadbalancer-vm-lb create
    + ├─ azure-native:network:NetworkInterface azure-py-loadbalancer-vm-network-interface create
    + └─ azure-native:compute:VirtualMachine azure-py-loadbalancer-vm create
    Resources:
    + 9 to create
    Do you want to perform this update? yes
    Updating (azuredev):
    Type Name Status
    + pulumi:pulumi:Stack azure-py-loadbalancer-vm-azuredev created (14s)
    + ├─ random:index:RandomString azure-py-loadbalancer-vm-lb-domain-label created (0.28s)
    + ├─ azure-native:resources:ResourceGroup azure-py-loadbalancer-vm-resource-group created (0.90s)
    + ├─ azure-native:network:VirtualNetwork azure-py-loadbalancer-vm-network created (4s)
    + ├─ azure-native:network:NetworkSecurityGroup azure-py-loadbalancer-vm-security-group created (2s)
    + ├─ azure-native:network:PublicIPAddress azure-py-loadbalancer-vm-lb-public-ip created (5s)
    + ├─ azure-native:network:LoadBalancer azure-py-loadbalancer-vm-lb created (1s)
    + ├─ azure-native:network:NetworkInterface azure-py-loadbalancer-vm-network-interface created (5s)
    + └─ azure-native:compute:VirtualMachine azure-py-loadbalancer-vm created (87s)
    Outputs:
    fqdn : "http://azure-py-loadbalancer-vm-n3jtn905.westus2.cloudapp.azure.com"
    lb-ip: "20.3.225.29"
    Resources:
    + 9 created
    Duration: 1m51s
    Permalink: https://app.pulumi.com/phillipedwards/azure-py-loadbalancer-vm/azuredev/updates/3
  4. Get the IP address of the newly-created Load Balancer from the stack’s outputs:

    Terminal window
    pulumi stack output lb-ip
    137.117.15.111
  5. Get the FQDN of the newly-created Load Balancer from the stack’s outputs:

    Terminal window
    pulumi stack output fqdn
    http://azure-py-loadbalancer-vm-n3jtn905.westus2.cloudapp.azure.com
  6. Check to see that your server is now running:

    $ curl "http://$(pulumi stack output lb-ip)"
    Hello, World!
    $ curl "$(pulumi stack output fqdn)"
    Hello, World!
  7. Destroy the stack:

    Terminal window
    pulumi destroy --yes
    Previewing destroy (azuredev):
    Type Name Plan
    - pulumi:pulumi:Stack azure-py-loadbalancer-vm-azuredev delete
    - ├─ azure-native:compute:VirtualMachine azure-py-loadbalancer-vm delete
    - ├─ azure-native:network:NetworkInterface azure-py-loadbalancer-vm-network-interface delete
    - ├─ azure-native:network:LoadBalancer azure-py-loadbalancer-vm-lb delete
    - ├─ azure-native:network:PublicIPAddress azure-py-loadbalancer-vm-lb-public-ip delete
    - ├─ azure-native:network:NetworkSecurityGroup azure-py-loadbalancer-vm-security-group delete
    - ├─ azure-native:network:VirtualNetwork azure-py-loadbalancer-vm-network delete
    - ├─ random:index:RandomString azure-py-loadbalancer-vm-lb-domain-label delete
    - └─ azure-native:resources:ResourceGroup azure-py-loadbalancer-vm-resource-group delete
    Outputs:
    - fqdn : "http://azure-py-loadbalancer-vm-n3jtn905.westus2.cloudapp.azure.com"
    - lb-ip: "20.3.225.29"
    Resources:
    - 9 to delete
    Destroying (azuredev):
    Type Name Status
    - pulumi:pulumi:Stack azure-py-loadbalancer-vm-azuredev deleted
    - ├─ azure-native:compute:VirtualMachine azure-py-loadbalancer-vm deleted (42s)
    - ├─ azure-native:network:NetworkInterface azure-py-loadbalancer-vm-network-interface deleted (5s)
    - ├─ azure-native:network:LoadBalancer azure-py-loadbalancer-vm-lb deleted (10s)
    - ├─ azure-native:network:PublicIPAddress azure-py-loadbalancer-vm-lb-public-ip deleted (20s)
    - ├─ azure-native:network:VirtualNetwork azure-py-loadbalancer-vm-network deleted (11s)
    - ├─ azure-native:network:NetworkSecurityGroup azure-py-loadbalancer-vm-security-group deleted (3s)
    - ├─ azure-native:resources:ResourceGroup azure-py-loadbalancer-vm-resource-group deleted (76s)
    - └─ random:index:RandomString azure-py-loadbalancer-vm-lb-domain-label deleted (0.23s)
    Outputs:
    - fqdn : "http://azure-py-loadbalancer-vm-n3jtn905.westus2.cloudapp.azure.com"
    - lb-ip: "20.3.225.29"
    Resources:
    - 9 deleted
    Duration: 2m38s

Related

The infrastructure as code platform for any cloud.