Azure Event Hub; automatisierte Anlage

Die Anlage eines Event Hub bei bereits existierendem Service Bus Namespace ist kein großer Aufwand. Im NuGet Package WindowsAzure.Servicebus finden sich alle Objekte um einen Event Hub bequem in managed Code anzulegen, wie das nachfolgende Code-Beispiel zeigt.

   1: public async Task<EventHubDescription> CreateEventHubAsync()

   2: {

   3:  

   4:     string serviceBusNamespace = "iotmc-ns";

   5:     string serviceBusManageKey = "32GP81C2B/eWHQ/MlZomaV8Sr4nnzeRCrJQCrYr/Wi4=";

   6:     string eventHubName = "IoTMC";

   7:     string eventHubSASKeyName = "Device01";

   8:  

   9:     Uri serviceBusUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceBusNamespace, string.Empty);

  10:     TokenProvider tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", serviceBusManageKey);

  11:     NamespaceManager nameSpaceManager = new NamespaceManager(string.Format("//{0}/", serviceBusUri.Host), tokenProvider);

  12:     string eventHubKey = SharedAccessAuthorizationRule.GenerateRandomKey();

  13:  

  14:     EventHubDescription eventHubDescription = new EventHubDescription(eventHubName)

  15:     {

  16:         PartitionCount = 8,

  17:         MessageRetentionInDays = 1

  18:     };

  19:     SharedAccessAuthorizationRule eventHubSendRule = new SharedAccessAuthorizationRule(eventHubSASKeyName, eventHubKey, new[] { AccessRights.Send, AccessRights.Listen });

  20:     eventHubDescription.Authorization.Add(eventHubSendRule);

  21:     eventHubDescription = await nameSpaceManager.CreateEventHubIfNotExistsAsync(eventHubDescription);

  22:  

  23:     string eventHubSASKey = ((SharedAccessAuthorizationRule)eventHubDescription.Authorization.First()).PrimaryKey;

  24:  

  25:     return eventHubDescription;

  26: }

Eine kleine Hürde gibt es jedoch, wenn auch der Service Bus Namespace via Code oder Powershell angelegt werden soll. Zum jetzigen Zeitpunkt gibt es einen Unterschied, wenn ein Service Bus Namespace via Management Portal oder via Powershell oder REST Api angelegt wird.

Bei Anlage über das Management Portal wird eine Shared Access Signature als Default Autorisierungsmechanismus angelegt. Legt man jedoch einen Service Bus Namespace via Powershell mit dem Komando:

   1: New-AzureSBNamespace -Name "CreatedUsingPowerShellDefaultValues" -Location "West Europe"

 
an, wird dieser als Default mit ACS Autorisierung erstellt. Versucht man im Nachgang in diesem Namespace einen Event Hub anzulegen, egal ob dies via Code oder Management Portal durchgeführt wird, kommt es zu einer Fehlermeldung “500 interner Server Error”.
 
Deshalb muss bei der Anlage des Service Bus Namespace via Powershell die Parameter –CreateACSNamespace und –NamespaceType mit Werten belegt werden.
 
   1: Param

   2: (

   3:         [bool]$falseValue = $false

   4: )

   5: New-AzureSBNamespace -Name "DelDel-ns" -Location "West Europe" -CreateACSNamespace $falseValue -NamespaceType Messaging

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *