Service Bus - Bicep Patterns
Namespace
bicep
resource serviceBus 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' = \{
name: '${resourcePrefix}-sb-${uniqueHash\}'
location: location
sku: \{
name: 'Standard'
tier: 'Standard'
\}
\}Queue
bicep
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
bicep
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
bicep
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
bicep
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)
bicep
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)
bicep
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
bicep
// 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