Azure Meetup – Erfahrungsbericht und Einblicke bei Microsoft

Azure Meetup Hamburg via Twitter von Sebastian Klenk

In der letzten Woche hatte ich die Ehre/das Vergnügen mein erstes Azure Meetup in Hamburg bei Microsoft zu veranstalten. Wie bereits in einem meiner letzten Beiträge verkündet, gibt es nun auch in Hamburg ein Azure Meetup. Innerhalb von rund vier Wochen hatten sich etwa 90 Mitglieder angesammelt und ihr Interesse an dem Thema Azure bekundet und mehr als 60 (am Nachmittag der Veranstaltung) wollten erscheinen. Am Montag Nachmittag musste ich sogar die Teilnehmerzahl auf 65 begrenzen, sonst hätte man mir den Raum “gesprengt”. Laut der Webseite waren es dann 57 Teilnehmer, vor Ort konnte ich etwa 50 Interessierte begrüßen.

Begrüssung Azure Meetup Hamburg - November 2016

Aufgrund von Terminschwierigkeiten mussten wir kurzfristig die Reihenfolge tauschen, da Sia am nächsten Morgen einen Kundentermin hatte und uns frühzeitig verlassen musste. Aber wir sind da ja flexibel und ich freute mich überhaupt, dass er trotz der widrigen Umstände und Zeitknappheit erschienen ist und seinen Erfahrungsbericht zum Umzug einer On-Premise Application nach Azure gehalten hat. VIELEN DANK dafür nochmal an Sia für diesen Einsatz!

Erfahrungsbericht von Sia Ghassemi

Sia erzählte uns viele interessante Punkte, welche vor Beginn der eigentlichen Migration nach Azure zu beachten waren, welche Hürden in seinem Projekt überwunden werden mussten und wie sie nach einem recht beschwerlichen Weg doch noch (mehr oder weniger) ans Ziel gekommen sind. Dass einige Teile der Applikation umgeschrieben werden mussten, andere komplett umgeschrieben wurden, damit sie in Azure performanter und stabiler laufen als zuvor. Sein Vortrag war eine perfekte Mischung aus Einblicken, Ideen, Beispielen und wahren “Begebenheiten”, seinem Vortrag zu lauschen war alles andere als langweilig. Dass letztendlich die Applikation nicht mehr in Azure läuft, lag nicht an Azure oder an Sia, sondern an anderen Randbedingungen welche leider nicht so ohne weiteres beseitigt werden konnten.

Sia Ghassemi mit einem Erfahrungsbericht zur Migration nach Azure

Sozusagen als Begrüßungsgeschenk haben wir von Microsoft Pizza und Bier erhalten, welche reichlich und gerne verspeist wurde. Ich denke alle Teilnehmer konnten auch unserem zweiten Teil des Azure Meetups gestärkt und gesättigt zuhören. Im zweiten Teil hielten Sebastian Klenk und Malte Lantin (beide Microsoft Technical Evangelisten) einen zwei geteilten Vortrag zu den neuen Azure Functions und zur Microsoft internen Nutzung von Azure.

Einblick und Überblick über die Microsoft interne Nutzung von Azure

Sebastian erläuterte anhand zahlreicher Folien, Zahlen und Beispielen sehr gut die vielfältige Nutzung der Azure Cloud bei Microsoft selber. Seinen Vortrag leitete er ein, in dem er erst einmal einen groben Überblick über die Möglichkeiten von Azure zeigte.

Azure Meetup Hamburg - MSFT Intro - Azure Services

Hier kommen ein paar Zahlen aus dem Vortrag 😉

Bei Microsoft nutzen weltweit etwa 120.000 Mitarbeiter die internen und externen Services von Azure => 29.000 Devices werden in Intunes gemonitored, ~400 Apps werden im Unternehmensportal angeboten, 150.000 Devices im Exchange Active Sync. Im Monitoring laufen täglich etwa 7 Milliarden Security Event-Meldungen auf und Microsoft verwaltet im Azure System Center etwa 330.000 Geräte, ob dies ein Microsoft Surface ist, ein Microsoft Lumia Handy oder ein “normaler” Arbeitsplatz oder sogar ein Fremdgerät (BYOD) spielt keine Rolle.

Microsoft intern nutzt in Azure ~19.000 virtuelle Maschinen zum Beispiel für Entwicklung und Tests, aber auch für Monitoring-Zwecke, desweiteren rund 5.000 SQL Instanzen als Datenquellen oder Datensenken.

die neuen Azure Functions

Malte gewährte noch einen Überblick in die brandneuen Azure Functions und zeigte uns eine kurze aber eindrucksvolle Demo, wie einfach und schnell man diese Functions erstellen und aktivieren kann. In seinen Erläuterungen ging auch darauf ein, dass die Zukunft eben Serverless sein wird, zumindest aus Sicht von Microsoft und der OnPrem-WebService aussterben wird. Denn mittels der Azure Functions lassen sich Funktionsaufrufe sehr schnell und unkompliziert deployen und das vor allem kostengünstig.

Bei den Azure Functions werden Ereignis-getriggerte Computefunktionen skalierend ausgeführt und man zahlt nur die tatsächliche Nutzung der Functions => also nur pro Aufruf/Ereignis-Trigger. So lassen sich in Zukunft eine Vielzahl von Funktionen kurzfristig und kostengünstig umsetzen, da man sich nicht erst mit einer geeigneten Infrastruktur beschäftigen muss.

Unser nächstes Azure Meetup : 13. Dezember ebenfalls bei Microsoft Hamburg

Alle IT Begeisterten und Azure-Freunde sind recht herzlich eingeladen, Simon Schwingel wird eine sehr interessanten Vortrag präsentieren, wie man die Migration einer SQL Server Landschaft nach Azure plant und durchführt bzw durchführen könnte.

ServicePack 1 für SQL Server 2016 released – Enterprise meets Standard

Feature Vergleich zwischen SQL Server 2016 RTM und ServicePack 1

Gestern Vormittag (Ortszeit New York) bzw Nachmittag bei uns wurden viele neue Themen im Rahmen der Keynote vom Microsoft Event “Connect(); // 2016” vorgestellt, der wichtigste Punkt aus meiner Sicht sind die Neuerungen aus dem Servicepack 1 für den SQL Server 2016. Bisher waren einige Features nur in der Enterprise Edition des SQL Servers verfügbar, jetzt eröffnet Microsoft seinen Kunden die Möglichkeiten eben diese Features auch in der Standard Edition zu nutzen.

Features in SQL Server 2016 RTM

Das ServicePack 1 des SQL Server 2016 beinhaltet alle Fixes bis zum Cumulative Update 3 und dem Security Update MS16–136.

Folgende Features wurden (zusätzlich) im ServicePack 1 als Verbesserungen eingeführt:

  • Row-level Security
  • Dynamic Data Masking
  • Change Data Capture
  • Database Snapshot
  • Columnstore
  • Partitioning
  • Compression
  • InMemory OLTP
  • Always Encrypted
  • PolyBase
  • Fine grained auditing
  • Multiple filestream containers
  • Database Cloning
  • CREATE OR ALTER
  • USE HINT – als zusätzliche Abfrage Option
  • TempDB – Verbesserung in der Erkennbarkeit im Errorlog
  • und zahlreiche Verbesserungen in DMVs und XEs

All the newly introduced Trace flags with SQL Server 2016 SP1 are documented and can be found at http://aka.ms/traceflags.

Features in SQL Server 2016 ServicePack 1

Einige Einschränkungen gibt es noch in den einzelnen Features in den kleineren Editionen, wie zum Beispiel die Speichergrenzen für InMemory OLTP – Details zu den teilweise recht geringen Größen finden Sie hier.

Fazit:
Nun lohnt sich der Wechsel auf den SQL Server 2016 erst recht, wenn auch erst ab dem ServicePack 1… UND man braucht nicht mehr unbedingt eine Enterprise-Edition um zum Beispiel Compression und Partitioning einsetzen zu können.

VIELEN DANK an Microsoft für diesen großartigen Schritt!

#3.1 Update zu meinem Powershell Skript “Öffnen von Firewall Port”

Windows Firewall Ports öffnen für den SQL Server

Nachdem ich meinen Beitrag zum Thema “Öffnen der Firewall Ports mit Powershell” Ende Oktober veröffentlicht hatte, habe ich mein Skript nochmals überarbeitet. Der SQL Server und seine Features wie z.B. die Analysis Services haben eigene Ports, welche auch nur geöffnet werden müssen, wenn die jeweiligen Features installiert sind.

Grundlage für meine weiteren Versuche ist der MSDN-Beitrag zu diesem Thema und der eigene Wunsch nach mehr Flexibilität beim Erstellen von Regeln.

Flexibilität durch eigene Powershell-Funktion “GET SQLServices for Firewall”

Ich habe also meine bisherige Funktion aufgesplittet, so dass ich nicht mehr wie bisher stur (per Copy&Paste) die Regel erstelle. Jetzt habe ich eine Funktion gebaut, welche alle relevanten SQL Server Dienste ermittelt, um diese dann individuell freizuschalten. Also mein erster Schritt ist die Analyse der SQL Server Installation:

function GET_SQLServices_for_Firewall($SQLServerTCPPort) {
    # TCP = 6, UDP = 17

    Write-Host "Opening Firewall ports for this Instance"
    # General Ports
    OpenFirewallPorts 4022 6 "SQL Service Broker"
    OpenFirewallPorts 1434 17 "SQL Browser"

    $Services=get-wmiobject -class win32_service | where {$_.DisplayName -like '*SQL*'} | select-object DisplayName 
    foreach ( $service in $Services ) {
        
        # DB-Engine Ports
        if ($Service.DisplayName -like '*SQL Server (*') { 
            OpenFirewallPorts $SQLServerTCPPort 6 "SQL Server"
        }

        # SSAS Ports
        if ($Service.DisplayName -like '*Analysis Services (*') {
            OpenFirewallPorts 2383 6 "SQL - Analysis Services"
            OpenFirewallPorts 2382 6 "SQL - Analysis Services Browserservice"
        }
    }
}

Wie man nun erkennen kann, rufe ich nun eine weitere Funktion auf mit der ich die Verwaltung der Windows Firewall übernehme. Die eigentlichen Teile meines bisherigen Skriptes habe ich somit relativ unverändert gelassen, nur “eingedampft” und variabler gestaltet.
Ich rufe also die eigentliche Arbeitsfunktion mit entsprechenden Parametern auf, um den jeweiligen Port, das Protokoll und eine sprechende Beschreibung zu übermitteln.

function OpenFirewallPorts ([int]$Port, [int]$Protocol, [string]$FirewallRuleDescsription) {
    
    if ($Protocol -eq 6) {$Protocol_String = "TCP"}
    if ($Protocol -eq 17) {$Protocol_String = "UDP"}

    Try {
	Write-Host "Opening Firewall on $Protocol_String Port $Port" 
	$port1 = New-Object -ComObject HNetCfg.FWOpenPort
	$port1.Port = $SQLServerTCPPort
	$port1.Name = $FirewallRuleDescsription + "(" + $Protocol_String + " " + $Port + ") " + $InstanceName 
	$port1.Enabled = $true
	$port1.Protocol = $Protocol
	$fwMgr = New-Object -ComObject HNetCfg.FwMgr
	$profiledomain=$fwMgr.LocalPolicy.GetProfileByType(0)
	$profiledomain.GloballyOpenPorts.Add($port1)
        Write-Host "[INFO] Successfully opened Firewall on $Protocol_String Port $Port." -ForegroundColor Green
	} 
    Catch { 
        Write-Host "[ERROR] Opening Firewall on $Protocol_String Port $Port failed." -ForegroundColor Red 
    }
}

Für mich und meine Zwecke funktioniert das soweit ganz gut und ist natürlich bei Bedarf individuell anpassbar. Wenn man als Beispiel einen weiteren Listener im SQL Server konfiguriert, dann könnte man dies ebenfalls ermitteln und in der Windows Firewall freischalten. Grob => Invoke-SQLcmd “Get Listener Port” => OpenFirewallPorts newListenerPortNumber 6 “Additional SQL Server Listener”

Für mich bedeutet das Niederschreiben und Erläutern der einzelnen Schritte und Veränderungen auch einen Lernprozess. Wenn jemand Anmerkungen oder Verbesserungen für mich hat, freue ich mich sehr darüber. “Please share your knowledge” 😉

#3 Firewall Ports für den SQL Server öffnen mit Powershell

Windows Firewall öffnen via Commandline

Nach ein paar Tagen Ruhe kommt nun mein dritter Teil der Powershell Serie zum Thema “Firewall Ports öffnen“.
Sicherlich wird der ein oder andere sagen, “Firewall? die interne? die haben wir per Gruppenrichtlinie immer ausgeschaltet!”…was ist vielleicht in einem halben Jahr, jemand aktiviert die Windows Firewall auf dem Server manuell? Kann der SQL Server (also die Datenbank-Enigne) dann immer noch mit der Welt da draußen kommunizieren?

Sicherheit geht vor – daher nur definiert und bewußt die Firewall Ports öffnen

Windows Firewall Ports öffnen für den SQL Server

Ich empfehle nur die notwendigen Ports für die Datenbank-Enigne zu öffnen, im Beispielbild wären das die folgenden Ports

  • SQL Server DB Engine => TCP 10001
  • der SQL Browser => UDP 1434
  • der SQL Service => Broker 4022

Dies reicht völlig aus, um dem SQL Server und den nutzenden Applikationen im Notfall eine Kommunikation zu ermöglichen. Nun gibt es mehrere Möglichkeiten dies zu realisieren, die Konfiguration der Firewall über die grafische Oberfläche, was doch umständlich und “kompliziert” sein kann, aber ebenso der Weg über die Kommandozeile entweder als DOS-Befehl bzw mit dem netsh-Befehl oder mit einem Powershell-Skript.

Wer noch andere Features des SQL Servers auf dem selben Server einsetzt, muss natürlich noch weitere Ports öffnen und auch die entsprechenden Skripte erweitern, aber in der Regel reichen diese Firewall Ports für einen Datenbank Server aus.

weitere Hinweise zu den Firewall Ports des SQL Server findet man hier : https://msdn.microsoft.com/de-de/library/cc646023.aspx

Umsetzung über die Kommandozeile

netsh advfirewall firewall add rule name="SQL Server (TCP 10001) TEST_Instanz" dir=in action=allow protocol=TCP localport=10001 profile=domain
netsh advfirewall firewall add rule name="SQL Service Broker (TCP 4022)" dir=in action=allow protocol=TCP localport=4022 profile=domain
netsh advfirewall firewall add rule name="SQL Browser (UDP 1434)" dir=in action=allow protocol=UDP localport=1434 profile=domain

Der netsh-Befehl lässt sich sehr gut parametrisieren und skripten, ist daher sehr individuell einsetzbar, also recht umgänglich. Hier kommt es auf die Unternehmensstrategie oder die der Systemadministratoren an, welche Skriptsprache bevorzugt wird. Ich bevorzuge (mittlerweile) Powershell, was auch Hauptthema dieser Serie ist, daher gehe ich nun etwas tiefer in die Umsetzung “Firewall Ports öffnen” mit Powershell ein.

Umsetzung mittels Powershell

Auch die Windows-Firewall hat ein Powershell Commandlet, so dass wir die Firewall Ports recht einfach und komfortabel öffnen können. Mein Lösungsansatz ist vielleicht etwas länger und umfangreicher, der erfahrene Powershell Programmierer bekommt das bestimmt auch in eine Schleife gepackt oder gar in eine Zeile 😉
Meine Zeilen stammen aus einem Skript, welches ich für die Konfiguration nach der Installation verwende, daher sind hier zahlreiche Variablen genutzt worden, um die Flexibilität zu erhalten.

  • $SQLServerTCPPort = 10001
  • $InstanceName = TEST_Instanz

Auch ein wenig “Monitoring” habe ich implementiert, so dass man gleich das Ergebnis, den Fehlschlag bzw den Fortschritt anhand der Ausgabe erkennen kann. Für meine Zwecke im Rahmen der SQL Server Installation reichen diese Zeilen um die Firewall Ports zu öffnen, zudem erklären sich die einzelnen Parameter nahezu von selbst.

Write-Host "Opening Firewall ports for this Instance"
    Try {
		Write-Host "Opening Firewall on Port $SQLServerTCPPort" 
		$port1 = New-Object -ComObject HNetCfg.FWOpenPort
		$port1.Port = $SQLServerTCPPort
		$port1.Name = "SQL Server (TCP " + $SQLServerTCPPort + ") " + $InstanceName 
		$port1.Enabled = $true
		$port1.Protocol = 6
		$fwMgr = New-Object -ComObject HNetCfg.FwMgr
		$profiledomain=$fwMgr.LocalPolicy.GetProfileByType(0)
		$profiledomain.GloballyOpenPorts.Add($port1)
        Write-Host "[INFO] Successfully opened Firewall on Port $SQLServerTCPPort." -ForegroundColor Green
     } 
    Catch { 
        Write-Host "[ERROR] Opening Firewall on Port $SQLServerTCPPort failed." -ForegroundColor Red 
    }
   
   Try {
		Write-Host "Opening Firewall on Port 4022" 
		$port1 = New-Object -ComObject HNetCfg.FWOpenPort
		$port1.Port = 4022
		$port1.Name = "SQL Service Broker (TCP 4022)"
		$port1.Enabled = $true
		$port1.Protocol = 6
		$fwMgr = New-Object -ComObject HNetCfg.FwMgr
		$profiledomain=$fwMgr.LocalPolicy.GetProfileByType(0)
		$profiledomain.GloballyOpenPorts.Add($port1) 
        Write-Host "[INFO] Successfully opened Firewall on Port 4022." -ForegroundColor Green
    } 
    Catch { 
        Write-Host "[ERROR] Opening Firewall on Port 4022 failed." -ForegroundColor Red 
    }
   
    Try {
		Write-Host "Opening Firewall on Port UDP 1434" 
		$port1 = New-Object -ComObject HNetCfg.FWOpenPort
		$port1.Port = 1434
		$port1.Name = "SQL Browser (UDP 1434)"
		$port1.Enabled = $true
		$port1.Protocol = 17
		$fwMgr = New-Object -ComObject HNetCfg.FwMgr
		$profiledomain=$fwMgr.LocalPolicy.GetProfileByType(0)
		$profiledomain.GloballyOpenPorts.Add($port1) 
        Write-Host "[INFO] Successfully opened Firewall on Port UDP 1434." -ForegroundColor Green
    } 
    Catch { 
        Write-Host "[ERROR] Opening Firewall on Port 1434 failed." -ForegroundColor Red 
    }

Azure Meetup Hamburg – neuen Usergroup rund um Microsoft Azure

Azure Meetup Hamburg - Startseite

Azure Meetup Hamburg – neue Usergruppe in Hamburg

Auf dem SQLSaturday #555 in München wurde ich von Jan Schenk angesprochen, ob es in Hamburg bereits eine Azure Meetup Hamburg Usergroup gäbe. Microsoft (also das Community Audience Team) wäre sehr daran interessiert, in Hamburg eine solches Meetup zu etablieren. Da ich mich kurz vor dem SQLSaturday in genauso einer Gruppe angemeldet hatte (Microsoft Cloud Community Nord aka die Wolkenstürmer), konnte ich Jan die Frage mit “Ja” beantworten. Ich solle ihm mal den Link zukommen lassen…

Im Laufe der kommenden Tage hatte Jan dann wohl interne (und auch externe) Kommunikation zu dem Thema und sich die Wolkenstürmer Meetup Gruppe angeschaut. Auf jeden Fall bestand der ausdrückliche Wunsch eine neue Gruppe in Hamburg zu etablieren, also gründete ich das “Azure Meetup Hamburg”.

Mit dieser Gruppe bin ich nicht alleine, es gibt in zahlreichen deutschen Städten ebenfalls Azure Meetup Communities

Hier kann sich jeder seine Meetup Gruppe raussuchen, um sich dort mit anderen zu allem rund um Azure austauschen.

Azure Meetup Hamburg - erstes Treffen
Unser erstes Treffen findet nun am 22. Oktober um 18:00 bei Microsoft Hamburg (Gasstraße 6) statt.
Neben der ersten Kennenlernen und Austauschen, schließlich möchte ich euch alle kennenlernen und wissen was ihr so macht bzw was ihr von der Azure Meetup Hamburg Gruppe erwartet. Relevante Inhalte wird es natürlich auch geben, hierzu habe ich bereits einige Mails bzw Kontakte gehabt. Für unser erstes Treffen habe ich Malte und Sebastian gewinnen können, dem einen oder anderen sind die beiden aus der Wolkenstürmer Gruppe bekannt.

Inhalt des Vortrages wird sein

Genereller Überblick über die Azure-Plattform
     –  Was bietet Azure für Entwickler?
     –  Was für Infrastruktur-Experten?
     –  Wie setzt Microsoft intern Azure ein?
             greifbare Beispiele / Showcases
             MFA am Arbeitsplatz
             Self-Service für Mitarbeiter
             u.v.m. 

Da Jan so nett war und uns für diesen Abend bereits Pizza zu bestellen, werde ich wohl an diesem Abend nur ein Thema anbieten, da auch das Kennenlernen und Netzwerken nicht zu kurz kommen soll.

Mit Stand heute (Montag, 24. Oktober) sind wir bereits 35 Gruppenmitglieder, von denen 18 an unserem ersten Azure Meetup Hamburg teilnehmen wollen. Ich bin sehr überrascht und erfreut über diese Resonance!

Wenn ihr noch jemanden kennt, der sich für die Azure Cloud von Microsoft und all ihre umfangreichen Möglichkeiten interessiert, dann verweist ihn doch bitte auf uns und unsere Gruppe (oder auch die anderen regionalen Gruppen). Für Themenvorschläge, Optimierungsvorschläge oder Sprecher bin ich selbstverständlich immer offen und freue mich über jede Kommunikation.

Einen Link zu unserer Gruppe findet ihr rechts in der Sidebar bzw nutzt diesen hier 😉

http://www.meetup.com/de-DE/Azure-Meetup-Hamburg/