Cloud architecture templates
Azure VMs with availability set, load balancer and key vault
Updated
June 4, 2025
16
Azure,VM,Availability set,LB,Load balancer,Key vault,Secret management
## Description
This architecture allows you to create Azure VMs in an availability set with load balancer & LB rules behind a public IP and key vault for secret management.
This architecture is highly customizable through variables and Terraform functions, so you can easily save it as a reference architecture in the template catalog if you want your team to use it by just updating the variables.
**N.B:**
- The Terraform code is automatically generated with best practices and contains variables that you can customize to fir your needs.
- You have full control to change, add, delete resources or their configuration. The newly generated code will reflect these changes.
- You can replace some resources with Terraform modules.
> terraform apply status: successful
>
## Architecture components
Here are the components of this architecture:
- Their network interfaces, with a NAT configuration if needed
- Password for admin users are randomly generated and stored in a key vault with a restricted access
- Load balancer in front with a public IP address and custom rules
- Storage account
- LB backend address pool
## Requirements
| Name | Configuration |
| --- | --- |
| Terraform | all versions |
| Provider | Azure |
| Provider version | >= 3.108.0 |
| Access | Contributor access |
## How to use the architecture
Clone the architecture and modify the following variables according to your needs:
| Variable | Description |
| --- | --- |
| dns_name | The name that will be used by the public IP to create a public URL |
| hostname | The hostname of the VMs. It uses count.index to have different names |
| image_publisher | Information about the publisher of the image used to create the OS |
| kv_name | Key vault name |
| lb_ip_dns_name | The DNS name associated with the load balancer |
| prefix | A string added before names. This is not required, it used just to show how you can have naming conventions |
| rg_name | The name of resource group |
| tags | Tags that will be added in all resources that support them |
| vm_size | The size of the virtual machine |
| vms | Number of VMs to create |
| vnet_addr_space | The network address space of the virtual network |
| vnet_name | The name of the virtual network |
**N.B:**
- Feel free to remove the resources that are not relevant to your use-case.
- Some variables have default values, please change it if it doesn't fit your deployment.
## Maintainer(s)
You can reach out to these maintainers if you need help or assistance:
- [Brainboard team](mailto:support@brainboard.co)