Conditional deployments with Bicep!

Lately, I had to rollout Azure API Management throughout different environments.  With Bicep, of course!  In the development and test environment, we use API Management without network integration.  In the acceptance and production environments, we deploy it internal to the virtual network.  In case VNET integration is used, an Application Gateway had to be provisioned.  I had to use two types of conditional deployments.  Let’s have a look!

One of the parameters indicated whether networking should be used:

param apimVirtualNetworkType string
Conditional deployment of a resource
Based on the virtual network type, I can determine if I should provision an Application Gateway or not.  This can be easily done through the following syntax:
resource applicationGateway 'Microsoft.Network/applicationGateways@2021-02-01' = if(apimVirtualNetworkType == 'Internal') {
 name: applicationGatewayName
Conditional configuration of properties
Within my API Management resource, the virtualNetworkConfiguration section should not be included when API Management will not be integrated with a virtual network.  To achieve that, we can use a conditional expression.
//Create API Management Service
resource apiManagement 'Microsoft.ApiManagement/service@2020-12-01' = {
  name: apimName
  location: location
  properties: {
    virtualNetworkConfiguration: (apimVirtualNetworkType == 'None') ? null : { 
      subnetResourceId: resourceId(apimVirtualNetworkResourceGroup, 'Microsoft.Network/virtualNetworks/subnets', apimVirtualNetworkName, apimVirtualNetworkSubnetName) 
    virtualNetworkType: apimVirtualNetworkType

Great to use this C#-inspired conditional syntax within Bicep files!




Your Azure Coach is specialized in organizing Azure trainings that are infused with real-life experience. All our coaches are active consultants, who are very passionate and who love to share their Azure expertise with you.