Blog Post

Azure Infrastructure Blog
3 MIN READ

Automating Multiple Azure Resource Deployment with Bicep

lakshaymalik's avatar
lakshaymalik
Icon for Microsoft rankMicrosoft
Apr 23, 2025

Deploying multiple Azure resources manually can be a time-consuming and error-prone process. As organizations scale their cloud infrastructure, the need for efficient and automated deployment methods becomes crucial. Traditional ARM templates, while powerful, can be complex and difficult to manage, especially when dealing with repetitive tasks such as creating multiple subnets within a virtual network.

Challenges

  • Complexity: Writing and maintaining ARM templates for large-scale deployments can be cumbersome and prone to errors.
  • Repetition: Manually defining each resource, such as subnets within a virtual network, leads to repetitive code and increases the risk of inconsistencies.
  • Scalability: As the number of resources grows, the deployment process becomes more challenging to manage and scale.

Solution

To address these challenges, we can leverage Bicep, a domain-specific language (DSL) for Azure resource deployment. Bicep simplifies the authoring experience and provides a more readable and maintainable syntax compared to traditional ARM templates. By using Bicep's for loops and parameters, we can automate the creation of multiple resources efficiently and consistently.

In this blog post, we'll explore how to automate the deployment of multiple Azure resources using Bicep, a domain-specific language (DSL) for deploying Azure resources declaratively. We'll leverage the power of for loops and parameters to create a virtual network (VNet) with multiple subnets.

Introduction to Bicep

Bicep is a new language for deploying Azure resources, designed to simplify the authoring experience compared to traditional ARM templates. It provides a more concise syntax and improved readability, making it easier to manage your infrastructure as code, you can read more about the bicep language here

Scenario Overview

In this scenario, we'll create a virtual network (VNet) with multiple subnets. We'll use a Bicep file to define the resources and a parameters.json file to provide the values for the parameters.

Bicep Code

Here's the Bicep code to create a VNet with multiple subnets:

param vnetName string

param location string

param addressPrefix string

param subnets array

 

resource vnet 'Microsoft.Network/virtualNetworks@2021-05-01' = {

  name: vnetName

  location: location

  properties: {

    addressSpace: {

      addressPrefixes: [

        addressPrefix

      ]

    }

    subnets: [

      for subnet in subnets: {

        name: subnet.name

        properties: {

          addressPrefix: subnet.addressPrefix

        }

      }

    ]

  }

}

 

 

In this code:

  • We define four parameters: vnetName, location, addressPrefix, and subnets.
  • The vnet resource is created using the Microsoft.Network/virtualNetworks resource type.
  • The subnets property uses a for loop to iterate over the subnets array and create each subnet with the specified name and address prefix

Parameters File

The parameters.json file provides the values for the parameters defined in the Bicep file:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnetName": {
      "value": "myVnet"
    },
    "location": {
      "value": "eastus"
    },
    "addressPrefix": {
      "value": "10.0.0.0/16"
    },
    "subnets": {
      "value": [
        {
          "name": "subnet1",
          "addressPrefix": "10.0.1.0/24"
        },
        {
          "name": "subnet2",
          "addressPrefix": "10.0.2.0/24"
        },
        {
          "name": "subnet3",
          "addressPrefix": "10.0.3.0/24"
        }
      ]
    }
  }
}

In this file:

  • The vnetName parameter is set to "myVnet".
  • The location parameter is set to "eastus".
  • The addressPrefix parameter is set to "10.0.0.0/16".
  • The subnets parameter is an array containing three subnets, each with a name and address prefix.

Deploying the Resources

To deploy the resources, you can use the Azure CLI with the following command:

Azure CLI:

az deployment group create --resource-group <your-resource-group> --template-file <path-to-bicep-file> --parameters <path-to-parameters-file>

Replace <your-resource-group>, <path-to-bicep-file>, and <path-to-parameters-file> with the appropriate values for your deployment.

Conclusion

Using Bicep with for loops and parameters simplifies the process of deploying multiple resources in Azure. This approach not only reduces the amount of code you need to write but also makes it easier to manage and maintain your infrastructure as code.

Feel free to experiment with different configurations and explore the capabilities of Bicep to streamline your Azure deployments.

Updated Apr 16, 2025
Version 1.0
No CommentsBe the first to comment