Service Bus - Bicep Patterns
Namespace
resource serviceBus 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' = {
name: '${resourcePrefix}-sb-${uniqueHash}'
location: location
sku: {
name: 'Standard'
tier: 'Standard'
}
}Queue
resource queue 'Microsoft.ServiceBus/namespaces/queues@2022-10-01-preview' = {
parent: serviceBus
name: 'orders'
properties: {
maxDeliveryCount: 10
deadLetteringOnMessageExpiration: true
defaultMessageTimeToLive: 'P14D'
lockDuration: 'PT5M'
}
}Topic and Subscription
resource topic 'Microsoft.ServiceBus/namespaces/topics@2022-10-01-preview' = {
parent: serviceBus
name: 'events'
properties: {
defaultMessageTimeToLive: 'P14D'
}
}
resource subscription 'Microsoft.ServiceBus/namespaces/topics/subscriptions@2022-10-01-preview' = {
parent: topic
name: 'order-processor'
properties: {
maxDeliveryCount: 10
deadLetteringOnMessageExpiration: true
lockDuration: 'PT5M'
}
}Subscription Filters
SQL Filter
resource filterRule 'Microsoft.ServiceBus/namespaces/topics/subscriptions/rules@2022-10-01-preview' = {
parent: subscription
name: 'high-priority'
properties: {
filterType: 'SqlFilter'
sqlFilter: {
sqlExpression: 'priority = \'high\''
}
}
}Correlation Filter
resource correlationRule 'Microsoft.ServiceBus/namespaces/topics/subscriptions/rules@2022-10-01-preview' = {
parent: subscription
name: 'orders-only'
properties: {
filterType: 'CorrelationFilter'
correlationFilter: {
label: 'order'
}
}
}Managed Identity Access
Service Bus Data Receiver (for triggers/consumers)
resource serviceBusReceiverRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(serviceBus.id, principalId, 'Azure Service Bus Data Receiver')
scope: serviceBus
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0')
principalId: principalId
principalType: 'ServicePrincipal'
}
}Service Bus Data Sender (for producers)
resource serviceBusSenderRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(serviceBus.id, principalId, 'Azure Service Bus Data Sender')
scope: serviceBus
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39')
principalId: principalId
principalType: 'ServicePrincipal'
}
}Both Sender and Receiver
// Grant both sender and receiver roles for bidirectional messaging
resource serviceBusReceiverRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(serviceBus.id, principalId, 'receiver')
scope: serviceBus
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0')
principalId: principalId
principalType: 'ServicePrincipal'
}
}
resource serviceBusSenderRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(serviceBus.id, principalId, 'sender')
scope: serviceBus
properties: {
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39')
principalId: principalId
principalType: 'ServicePrincipal'
}
}💡 Role Selection:
- Use Data Receiver for Function triggers or message consumers
- Use Data Sender for applications that send messages
- Use both roles for bidirectional communication
- Roles can be scoped to namespace (all queues/topics) or specific queue/topic