I had a problem recently where my Bicep templates were failing with an obscure error message:
The incoming request is not recognized as a namespace policy put request.
The Bicep in question was attempting to assign an Azure Service Bus topic subscription’s forwardTo to another queue.
I had ordered everything in the Bicep file correctly, i.e.
- Create the topic
- Create its subscriptions
- Create the queues
- Tell the topic subscription to forward messages to the queue
However, when I looked at the Deployments in the Azure Resource Group, it appeared that they weren’t running in the order I had specified:
This is because by default Bicep templates will run in parallel, unless it detects dependencies. And because my templates were a bit too clever with variables and modules, Bicep was unable to detect my implicit dependencies.
The fix then was to be explicit with my dependencies, using the dependsOn keyword:
// create service bus topics And subscriptions
param topicsAndSubscriptions array = [
{
topicName: 'property~changed~v1' // ~ is what Azure uses for a forward slash, so this topic is actually property/changed/v1
sanitizedName: 'property-changed' // Azure doesn't like ~ or / in deployment names.
subscriptions: [
'ozone'
'valor'
]
}
]
module serviceBusTopicsModule './serviceBusTopic.bicep' = [for item in topicsAndSubscriptions : {
name: 'serviceBusTopic-${item.sanitizedName}-${deploymentNameSuffix}'
params: {
serviceBusName: serviceBusModule.outputs.serviceBusOutput.name
topicName: item.topicName
}
}]
module topicsSubscriptionModule 'serviceBusTopicSubscription.bicep' = [ for item in topicsAndSubscriptions: {
name: 'topicSubscription-${item.sanitizedName}-${deploymentNameSuffix}'
params: {
serviceBusName: serviceBusModule.outputs.serviceBusOutput.name
topicName: item.topicName
subscriptions: item.subscriptions
}
dependsOn: serviceBusTopicsModule
}]
// Create service bus queues
param queueSettings array = [
{
name: 'ozone-property-changed-sbq'
requiresDuplicateDetection: true
}
{
name: 'valor-property-changed-sbq'
requiresDuplicateDetection: false
}
]
module serviceBusQueueModule './serviceBusQueue.bicep' = {
name: 'serviceBusQueue-${deploymentNameSuffix}'
params: {
serviceBusName: serviceBusModule.outputs.serviceBusOutput.name
queueSettings: queueSettings
}
}
module serviceBusTopicSubsciptionForwardModule './serviceBusTopicSubscriptionForward.bicep' = {
name: 'serviceBusTopicSubsciptionForward-${deploymentNameSuffix}'
params: {
serviceBusName: serviceBusModule.outputs.serviceBusOutput.name
topicName: 'property~changed~v1'
subscriptionName: 'valor'
queueName: 'valor-property-changed-sbq'
}
dependsOn: [serviceBusQueueModule, topicsSubscriptionModule]
}



