Azure-cli: Service Bus Support

Created on 4 Sep 2017  路  8Comments  路  Source: Azure/azure-cli

Is there any support for provisioning _Azure Service Bus_ from azure-cli?

https://azure.microsoft.com/en-au/services/service-bus/

New Service

Most helpful comment

+1 as well as Event Hubs

All 8 comments

@JasonRShaver @mayurid

@worldspawn -- all I have been able to do is provision it use a template file (not ideal). Here is reference to that: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-resource-manager-namespace-topic#azure-cli

@undernewmanagement i went with that thanks. Heres what I ended up with.

function CreateServiceBus (
    [Parameter(Mandatory=$true)]$name,
    [Parameter(Mandatory=$true)]$resourceGroup
    ) {    

    $serviceBus = az group deployment create -g $resourceGroup --template-file "$PSScriptRoot\servicebustemplate.json" --parameters serviceBusNamespaceName=$name | ConvertFrom-Json

    if ($LastExitCode -gt 0) {
        throw "Cli Command Failed"
    }

    return $serviceBus
}

servicebustemplate.json

{
    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "serviceBusNamespaceName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Service Bus namespace"
        }
      },
      "serviceBusSku": {
        "type": "string",
        "allowedValues": [
          "Basic",
          "Standard",
          "Premium"
        ],
        "defaultValue": "Standard",
        "metadata": {
          "description": "The messaging tier for service Bus namespace"
        }
      }
    },
    "variables": {
      "defaultSASKeyName": "RootManageSharedAccessKey",
      "defaultAuthRuleResourceId": "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', parameters('serviceBusNamespaceName'), variables('defaultSASKeyName'))]",
      "sbVersion": "2017-04-01"
    },
    "resources": [
      {
        "apiVersion": "2017-04-01",
        "name": "[parameters('serviceBusNamespaceName')]",
        "type": "Microsoft.ServiceBus/Namespaces",
        "location": "[resourceGroup().location]",
        "sku": {
          "name": "Standard"
        }
      }
    ],
    "outputs": {
      "NamespaceDefaultConnectionString": {
        "type": "string",
        "value": "[listkeys(variables('defaultAuthRuleResourceId'), variables('sbVersion')).primaryConnectionString]"
      },
      "DefaultSharedAccessPolicyPrimaryKey": {
        "type": "string",
        "value": "[listkeys(variables('defaultAuthRuleResourceId'), variables('sbVersion')).primaryKey]"
      }
    }
}
function CreateServiceBusQueue (
    [Parameter(Mandatory=$true)]$name,
    [Parameter(Mandatory=$true)]$serviceBus,
    [Parameter(Mandatory=$true)]$resourceGroup
    ) {
    az group deployment create --name "$name-deployment" -g $resourceGroup --template-file "$PSScriptRoot\servicebusqueuetemplate.json" --parameters serviceBusNamespaceName=$serviceBus serviceBusQueueName=$name | Out-Null
    if ($LastExitCode -gt 0) {
        throw "Cli Command Failed"
    }
}

servicebusqueuetemplate.json

{
    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "serviceBusNamespaceName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Service Bus namespace"
        }
      },
      "serviceBusQueueName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Queue"
        }
      }
    },
    "variables": {
      "defaultSASKeyName": "RootManageSharedAccessKey",
      "authRuleResourceId": "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', parameters('serviceBusNamespaceName'), variables('defaultSASKeyName'))]",
      "sbVersion": "2017-04-01"
    },
    "resources": [
      {
        "apiVersion": "2017-04-01",
        "name": "[parameters('serviceBusNamespaceName')]",
        "type": "Microsoft.ServiceBus/Namespaces",
        "location": "[resourceGroup().location]",
        "sku": {
          "name": "Standard"
        },
        "properties": {},
        "resources": [
          {
            "apiVersion": "2017-04-01",
            "name": "[parameters('serviceBusQueueName')]",
            "type": "Queues",
            "dependsOn": [
              "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
            ],
            "properties": {
              "lockDuration": "PT5M",
              "maxSizeInMegabytes": "1024",
              "requiresDuplicateDetection": "false",
              "requiresSession": "false",
              "defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S",
              "deadLetteringOnMessageExpiration": "false",
              "duplicateDetectionHistoryTimeWindow": "PT10M",
              "maxDeliveryCount": "10",
              "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
              "enablePartitioning": "false",
              "enableExpress": "false"
            }
          }
        ]
      }
    ],
    "outputs": {
      "NamespaceConnectionString": {
        "type": "string",
        "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryConnectionString]"
      },
      "SharedAccessPolicyPrimaryKey": {
        "type": "string",
        "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryKey]"
      }
    }
  }
function CreateServiceBusTopic (
    [Parameter(Mandatory=$true)]$serviceBus,
    [Parameter(Mandatory=$true)]$name,
    [Parameter(Mandatory=$true)]$resourceGroup,
    [Parameter(Mandatory=$true)]$subscriptions
    ) {
    az group deployment create --name "$name-deployment" -g $resourceGroup --template-file "$PSScriptRoot\servicebustopic.json" --parameters serviceBusNamespaceName=$serviceBus serviceBusTopicName=$name | Out-Null
    if ($LastExitCode -gt 0) {
        throw "Cli Command Failed"
    }
    Write-Host "Creating Subscriptions..." -ForegroundColor Green
    $subscriptions | ForEach {
        az group deployment create --name "$_-deployment" -g $resourceGroup --template-file "$PSScriptRoot\servicebustopicsubscription.json" --parameters serviceBusNamespaceName=$serviceBus serviceBusTopicName=$name serviceBusSubscriptionName=$_
        if ($LastExitCode -gt 0) {
            throw "Cli Command Failed"
        }
    }
}

servicebustopic.json

{
    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "serviceBusNamespaceName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Service Bus namespace"
        }
      },
      "serviceBusTopicName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Topic"
        }
      }
    },
    "variables": {
      "location": "[resourceGroup().location]",
      "defaultSASKeyName": "RootManageSharedAccessKey",
      "authRuleResourceId": "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', parameters('serviceBusNamespaceName'), variables('defaultSASKeyName'))]",
      "sbVersion": "2017-04-01" 
    },
    "resources": [
        {

            "apiVersion": "2017-04-01",
            "name": "[parameters('serviceBusNamespaceName')]",
            "type": "Microsoft.ServiceBus/Namespaces",
            "location": "[resourceGroup().location]",
            "sku": {
                "name": "Standard"
            },
            "resources": [
                {
                    "apiVersion": "2017-04-01",
                    "name": "[parameters('serviceBusTopicName')]",
                    "type": "Topics",
                    "dependsOn": [
                      "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
                    ],
                    "properties": {
                      "defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S",
                      "maxSizeInMegabytes": "1024",
                      "requiresDuplicateDetection": "false",
                      "duplicateDetectionHistoryTimeWindow": "PT10M",
                      "enableBatchedOperations": "false",
                      "supportOrdering": "false",
                      "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
                      "enablePartitioning": "false",
                      "enableExpress": "false"
                    } 
                }
            ]

        }
      ],
    "outputs": {
    }
  }

servicebustopicsubscription.json

{
    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "serviceBusNamespaceName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Service Bus namespace"
        }
      },
      "serviceBusTopicName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Topic"
        }
      },
      "serviceBusSubscriptionName": {
        "type": "string",
        "metadata": {
          "description": "Name of the Subscription"
        }
      }
    },
    "variables": {
      "location": "[resourceGroup().location]",
      "defaultSASKeyName": "RootManageSharedAccessKey",
      "authRuleResourceId": "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', parameters('serviceBusNamespaceName'), variables('defaultSASKeyName'))]",
      "sbVersion": "2017-04-01" 
    },
    "resources": [
      {
        "apiVersion": "2017-04-01",
        "name": "[parameters('serviceBusNamespaceName')]",
        "type": "Microsoft.ServiceBus/Namespaces",
        "location": "[resourceGroup().location]",
        "sku": {
          "name": "Standard"
        },
        "properties": {},
        "resources": [
          {
            "apiVersion": "2017-04-01",
            "name": "[parameters('serviceBusTopicName')]",
            "type": "Topics",
            "dependsOn": [
              "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
            ],
            "properties": {},
            "resources": [
              {
                "apiVersion": "2017-04-01",
                "name": "[parameters('serviceBusSubscriptionName')]",
                "type": "Subscriptions",
                "dependsOn": [
                  "[parameters('serviceBusTopicName')]"
                ],
                "properties": {
                  "lockDuration": "PT1M",
                  "requiresSession": "false",
                  "defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S",
                  "deadLetteringOnMessageExpiration": "false",
                  "maxDeliveryCount": "10",
                  "enableBatchedOperations": "false",
                  "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S"
                }
              }
            ]
          }
        ]
      }
    ],
    "outputs": {

    }
  }

Any plans to support service bus commands via the CLI? The ARM configs are an ok work around, but integrated support would be much appreciated.

Agreed. I'm trying to delete a queue within a service bus and and that doesn't seem possible at the moment.

My work around is to use the .NET SDK to handle it instead.

+1 as well as Event Hubs

See PR #5522 and #5499

Additionally, preview commands are available for these services via CLI extensions. Use az extension list-available to find them.

Was this page helpful?
0 / 5 - 0 ratings