Übung: Bereitstellen und Konfigurieren von Azure SQL-Datenbank

Abgeschlossen

Azure SQL-Datenbank eignet sich hervorragend für operative, transaktionale und hybride analytische Workloads.

Für das Szenario zum Ermitteln der Busposition haben Sie Azure SQL-Datenbank ausgewählt, da es sich um eine Unternehmensdatenbank mit modernen Funktionen wie JSON- und Geounterstützung handelt.

In diesem Beispiel stellen Sie Azure SQL-Datenbank mithilfe von Skripts bereit, verbinden die Datenbank mit Azure Data Studio und richten sie unter Verwendung von T-SQL für das Szenario ein. Anschließend machen Sie sich im Kontext der Ermittlung der Busposition mit der JSON- und Geounterstützung vertraut.

Bereitstellen von Azure SQL-Datenbank mithilfe von PowerShell

Zum Einrichten der Datenbank für das Szenario zum Ermitteln der Busposition müssen Sie zunächst eine Datenbank bereitstellen. Dazu verwenden Sie Azure Cloud Shell. Cloud Shell ist auch über das Azure-Portal verfügbar und ermöglicht Ihnen das Erstellen und Verwalten von Azure-Ressourcen. Verschiedene Tools sind bereits vorinstalliert, einschließlich der Azure CLI, Azure PowerShell und sqlcmd. In dieser Übung verwenden Sie Azure PowerShell, doch Sie können die gleichen Aufgaben auch mit der Azure CLI ausführen. Im Skript werden Sie aufgefordert, ein Kennwort für die neue Datenbank und Ihre lokale IP-Adresse anzugeben, damit das Gerät eine Verbindung herstellen kann.

Das Ausführen dieser Skripts sollte drei bis fünf Minuten dauern. Stellen Sie sicher, dass Sie Ihr Kennwort, Ihre eindeutige ID und die Region notieren, da diese Informationen nur ein Mal angezeigt werden.

Tipp

Sie können STRG + UMSCHALT + V verwenden, um Befehle in Cloud Shell einzufügen. STRG + V funktioniert nicht.

  1. Rufen Sie zunächst Ihre lokale öffentliche IP-Adresse ab. Vergewissern Sie sich, dass Ihre Verbindung zu anderen VPN-Diensten getrennt ist, und öffnen Sie ein lokales PowerShell-Terminal auf Ihrem Gerät. Führen Sie den folgenden Befehl aus, und notieren Sie die zurückgegebene IP-Adresse.

    (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content
    

    Tipp

    Wenn Sie kein Windows-Gerät verwenden, müssen Sie Ihre IP-Adresse mithilfe einer anderen Methode suchen. In Ihrem Terminal können Sie curl ifconfig.co ausführen.

  2. Führen Sie in Cloud Shell die folgenden Befehle aus: Geben Sie ein komplexes Kennwort ein, und geben Sie an der Eingabeaufforderung Ihre lokale öffentliche IP-Adresse ein, die Sie im vorherigen Schritt abgerufen haben.

    Hinweis

    Ein komplexes Kennwort muss aus folgenden Elementen bestehen:

    • Mindestens 8 Zeichen und höchstens 16 Zeichen
    • Erfordert 3 der 4 folgenden Elemente:
      • Kleinbuchstaben
      • Großbuchstaben
      • Ziffern (0–9)
      • Symbole ( @ # $ % ^ & * - _  + = [ ] { } | \ : ‘ , . ? / ` ~ “ ( ) ; )
    # Collect password 
    $adminSqlLogin = "cloudadmin"
    $password = Read-Host "Your username is 'cloudadmin'. Please enter a password for your Azure SQL Database server that meets the password requirements"
    # Prompt for local ip address
    $ipAddress = Read-Host "Disconnect your VPN, open PowerShell on your machine and run '(Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content'. Please enter the value (include periods) next to 'Address': "
    Write-Host "Password and IP Address stored"
    
  3. Geben Sie die Informationen aus, die Sie im gesamten Modul immer wieder benötigen, und speichern Sie sie in einer Textdatei, indem Sie den folgenden Code in Cloud Shell ausführen. Nachdem Sie den Code eingefügt haben, müssen Sie wahrscheinlich die EINGABETASTE drücken, da die letzte Zeile standardmäßig nicht ausgeführt wird.

    # Get resource group and location and random string
    $resourceGroupName = "<rgn>[sandbox resource group name]</rgn>"
    $resourceGroup = Get-AzResourceGroup | Where ResourceGroupName -like $resourceGroupName
    $uniqueID = Get-Random -Minimum 100000 -Maximum 1000000
    $location = $resourceGroup.Location
    # The logical server name has to be unique in the system
    $serverName = "bus-server$($uniqueID)"
    # The sample database name
    $databaseName = "bus-db"    
    Write-Host "Please note your unique ID for future exercises in this module:"  
    Write-Host $uniqueID
    Write-Host "Your resource group name is:"
    Write-Host $resourceGroupName
    Write-Host "Your resources were deployed in the following region:"
    Write-Host $location
    Write-Host "Your server name is:"
    Write-Host $serverName
    

    Vergessen Sie nicht, Ihr Kennwort, die eindeutige ID und die Region zu notieren. Sie werden diese im gesamten Modul verwenden.

  4. Führen Sie das folgende Skript aus, um eine leere Azure SQL-Datenbank-Instanz und einen logischen Server bereitzustellen. Das Skript fügt zudem Ihre IP-Adresse als Firewallregel hinzu, damit Sie auf die Datenbank zugreifen können.

    # Create a new server with a system wide unique server name
    $server = New-AzSqlServer -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -Location $location `
        -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminSqlLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
    # Create a server firewall rule that allows access from the specified IP range and all Azure services
    $serverFirewallRule = New-AzSqlServerFirewallRule `
        -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -FirewallRuleName "AllowedIPs" `
        -StartIpAddress $ipAddress -EndIpAddress $ipAddress 
    $allowAzureIpsRule = New-AzSqlServerFirewallRule `
        -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -AllowAllAzureIPs
    # Create a database
    $database = New-AzSqlDatabase  -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -DatabaseName $databaseName `
        -Edition "GeneralPurpose" -Vcore 4 -ComputeGeneration "Gen5" `
        -ComputeModel Serverless -MinimumCapacity 0.5
    Write-Host "Database deployed."
    

    Die Skriptausführung dauert ein paar Minuten. Sehen Sie sich nun im obigen Codeblock die vier Hauptbefehle genauer an. Mit dem ersten Befehl wird ein logischer Azure SQL-Datenbank-Server erstellt, der als Verbindungsinstanz sowie zum Gruppieren von Metadaten und Richtlinieneinstellungen für alle Datenbanken dient, die diesem Server zugewiesen sind. Mit den nächsten beiden Befehlen werden zwei Firewallregeln erstellt. In der ersten Regel wird festgelegt, dass Ihre IP-Adresse eine Verbindung herstellen darf, in der zweiten ist definiert, dass andere Azure-Dienste eine Verbindung herstellen dürfen. Diese Einstellung ist besonders nützlich, wenn Sie CI/CD-Pipelines über Azure DevOps und/oder GitHub Actions einrichten.

    Mit dem letzten Befehl wird eine Datenbank auf dem logischen Server bereitgestellt. Anhand der Befehle können Sie sehen, dass sich die Datenbank in der Dienstebene „Universeller Zweck“ mit vier vCores und in der Serverless-Computeebene mit einem Bereich von virtuellen Kernen zwischen 0,5 und 4 befindet. Die Serverless Compute-Ebene ist für eine vorübergehende, unvorhersehbare Nutzung mit im Zeitverlauf geringerer durchschnittlicher Computenutzung vorgesehen. Die Serverless Compute-Ebene bietet automatische Computeskalierung, um die Leistungsverwaltung zu vereinfachen, und wird nur für den Umfang der genutzten Computekapazität abgerechnet. Die Serverless Compute-Ebene unterstützt auch das automatische Anhalten und Fortsetzen, um die Preisoptimierung zu erhöhen. Wenn Ihre Datenbank angehalten wird, zahlen Sie nur für Speicher. Die Serverless Compute-Ebene eignet sich hervorragend für das Szenario zum Ermitteln der Busposition, da sich die Lösung in der Entwicklungsphase befindet (und nicht rund um die Uhr verwendet wird). Zudem ist nicht bekannt, wie beliebt die Lösung nach der Einführung sein wird (wie viele Computeressourcen benötigt werden).

    Wenn Sie Probleme haben oder sich vergewissern möchten, dass die Ressourcen bereitgestellt wurden, können Sie dies im Azure-Portal überprüfen.

Herstellen einer Verbindung mit Azure SQL-Datenbank über Azure Data Studio

Nach der Bereitstellung Ihrer Datenbank haben Sie verschiedene Möglichkeiten, um eine Verbindung mit der Datenbank herzustellen und mit dieser zu interagieren: Sie können z. B. sqlcmd, Azure Data Studio, SSMS, den Abfrage-Editor im Portal oder weitere Tools verwenden. In diesem Abschnitt erfahren Sie, wie Sie eine Verbindung mit der Datenbank über Azure Data Studio herstellen.

Hinweis

Abhängig von Ihrer lokalen Konfiguration (z. B. wenn Sie sich in einem VPN befinden), fordert Azure Data Studio Sie möglicherweise auf, Ihre IP-Adresse zur Serverfirewall hinzuzufügen. Sie können Ihre IP-Adresse der Serverfirewall im Azure-Portal hinzufügen, indem Sie die Schritte in diesem Artikel ausführen.

  1. Öffnen Sie Azure Data Studio und überprüfen Sie, ob der Coderepositoryordner geöffnet ist. Wählen Sie dazu das Explorer-Symbol auf der Aktivitätsleiste aus. Wenn die Codedateien nicht angezeigt werden, kehren Sie zur vorherigen Übung zurück, um Ihre Umgebung zu konfigurieren.

  2. Wählen Sie Verbindungen in der Aktivitätsleiste aus. In diesem Bereich können all Ihre Datenbankverbindungen erstellt und gespeichert werden.

  3. Wählen Sie neben Server die Schaltfläche Neue Verbindung aus (diese Schaltfläche sieht wie ein Server mit einem Pluszeichen aus).

  4. Der Bereich Verbindungsdetails wird geöffnet. Geben Sie in diesem Bereich die folgenden Informationen ein:
    Verbindungstyp: Microsoft SQL Server
    Server: bus-server[eindeutigeID].database.windows.net
    Authentifizierungstyp: SQL-Anmeldung
    Benutzername: cloudadmin
    Kennwort: Ihr-Kennwort
    Kennwort speichern: Kontrollkästchen aktivieren
    Datenbank: bus-db
    Servergruppe: Standard
    Name (optional): keine Eingabe

  5. Wählen Sie Verbinden.

  6. Nachdem eine erfolgreiche Verbindung hergestellt wurde, sollten Sie in der Lage sein, im Bereich „Verbindungen“ durch den Inhalt der Datenbank zu navigieren.

Einrichten des Datenbankschemas mit T-SQL

Sobald Sie mit einer Datenbank verbunden sind, müssen Sie in der Regel das Datenbankschema bereitstellen und Tabellen erstellen, um die Datenbank an die individuellen Anforderungen Ihres Szenarios anzupassen. In diesem Beispiel führen Sie einige T-SQL-Skripts in einem SQL-Notebook in Azure Data Studio aus, um die Datenbank gemäß Ihren Anwendungsanforderungen zu konfigurieren und einige anfängliche Busdaten zu laden.

  1. Wählen Sie in Azure Data Studio auf der Aktivitätsleiste das Explorer-Symbol aus.

  2. Öffnen Sie im Ordner database\notebooks die Datei 01-set-up-database.ipynb.

  3. Führen Sie die Schritte im SQL-Notebook aus, um die Übung abzuschließen, und kehren Sie dann hierher zurück.

Verarbeiten von Busdaten mit Azure SQL-Datenbank

Nachdem Sie Ihre Datenbank konfiguriert haben, sehen wir uns nun näher an, wie Azure SQL-Datenbank die JSON-Echtzeitdaten empfängt und in der Datenbank speichert. Da Azure SQL-Datenbank JSON-Unterstützung bietet, lässt sich dieser Aspekt problemlos verwalten. Anschließend können Sie mithilfe der Geofunktionen in Azure SQL-Datenbank die Entfernung zwischen Bussen ermitteln, Geofences definieren und speichern und sogar bestimmen, ob sich ein Bus innerhalb eines bestimmten Geofence befindet. Mit diesen Funktionen wird Ihre Anwendungsentwicklung erheblich vereinfacht. Diese Übung wird in einem SQL-Notebook in Azure Data Studio durchgeführt (vergleichbar mit den vorherigen Schritten).

  1. Wählen Sie in Azure Data Studio auf der Aktivitätsleiste das Explorer-Symbol aus.

  2. Öffnen Sie im Ordner database\notebooks die Datei 02-json-geospatial-sql-db.ipynb.

  3. Führen Sie die Schritte im SQL-Notebook aus, um die Übung abzuschließen, und kehren Sie dann hierher zurück.