Esercizio - Distribuire e configurare un database SQL di Azure

Completato

Database SQL di Azure è un'ottima scelta per carichi di lavoro analitici operativi, transazionali e ibridi.

Nello scenario della fermata del bus è stato selezionato il database SQL di Azure perché si tratta di un database aziendale con funzionalità moderne, ad esempio JSON e supporto geospaziale.

In questo caso, si distribuirà il database SQL di Azure tramite script, ci si connetterà a esso in Azure Data Studio e si configurerà il database per lo scenario con T-SQL. Si esplorerà quindi il supporto JSON e geospaziale in relazione alla fermata del bus.

Distribuire il database SQL di Azure con PowerShell

Per configurare il database per lo scenario in cui l'utente deve prendere un autobus, è innanzitutto necessario distribuire un database con cui lavorare. A tale scopo, si userà Azure Cloud Shell. Cloud Shell è disponibile anche tramite il portale di Azure e consente di creare e gestire le risorse di Azure. Viene preinstallato con vari strumenti, tra cui l'interfaccia della riga di comando di Azure, Azure PowerShell e sqlcmd. In questo esercizio si userà Azure PowerShell, ma è possibile eseguire le stesse attività con l'interfaccia della riga di comando di Azure. Nello script verrà richiesta una password per il nuovo database e l'indirizzo IP locale per consentire al dispositivo di connettersi al database.

Per il completamento degli script sono necessari 3-5 minuti. Assicurarsi di annotare la password, l'ID univoco e l'area, perché non verranno visualizzati di nuovo.

Suggerimento

È possibile usare CTRL + MAIUSC + V per incollare i comandi in Cloud Shell. CTRL + V non funzionerà.

  1. Per iniziare, recuperare l'indirizzo IP pubblico locale. Assicurarsi di essere disconnessi da qualsiasi servizio VPN e aprire un terminale di PowerShell locale nel dispositivo. Eseguire il comando seguente e prendere nota dell'indirizzo IP risultante.

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

    Suggerimento

    Se non si sta usando un dispositivo Windows, è necessario individuare l'indirizzo IP con un altro metodo. Nel terminale è possibile eseguire curl ifconfig.co.

  2. Eseguire i comandi seguenti in Cloud Shell: Immettere una password complessa e, quando richiesto, immettere l'indirizzo IP pubblico locale ottenuto nel passaggio precedente.

    Nota

    Una password complessa deve essere costituita da:

    • minimo 8 caratteri e massimo 16 caratteri
    • Richiede 3 su 4 dei seguenti:
      • Caratteri minuscoli
      • Caratteri maiuscoli
      • Numeri (da 0 a 9)
      • Simboli ( @ # $ % ^ & * - _  + = [ ] { } | \ : ‘ , . ? / ` ~ “ ( ) ; )
    # 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. Visualizzare e archiviare in un file di testo le informazioni che saranno necessarie nel corso del modulo eseguendo il codice seguente in Cloud Shell. Sarà necessario premere INVIO dopo avere incollato il codice, perché l'ultima riga non viene eseguita per impostazione predefinita.

    # 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
    

    Assicurarsi di annotare la password, l'ID univoco e l'area. Saranno necessari più volte nel corso del modulo.

  4. Eseguire lo script seguente per distribuire un'istanza di database SQL di Azure e un server logico vuoti. Lo script aggiungerà anche l'indirizzo IP come regola del firewall per poter accedere al database.

    # 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."
    

    Il completamento dello script può richiedere alcuni minuti. Il blocco precedente include quattro comandi principali, che verranno ora illustrati. Il primo comando crea un server logico del database SQL di Azure, che funge da istanza a cui connettersi, nonché da modo per raggruppare i metadati e le impostazioni dei criteri per tutti i database assegnati a tale server. I due comandi successivi creano due regole del firewall: una per consentire la connessione dell'indirizzo IP e una per consentire la connessione di altri servizi di Azure. Questa impostazione sarà particolarmente utile quando si configurano pipeline CI/CD Azure DevOps e/o GitHub Actions.

    Il comando finale distribuisce un database in tale server logico. Dai comandi è possibile dedurre che il database si trova nel livello di servizio Per utilizzo generico con quattro vCore e nel livello Elaborazione serverless con un intervallo di core virtuali compreso tra 0,5 e 4. Il livello Elaborazione serverless è destinato a un utilizzo intermittente e imprevedibile con un utilizzo medio di calcolo inferiore nel tempo. Il livello Elaborazione serverless offre il ridimensionamento automatico delle risorse di calcolo per semplificare la gestione delle prestazioni e addebita solo la quantità di calcolo usata. Il livello Elaborazione serverless consente inoltre di ottimizzare i costi grazie al supporto della sospensione automatica e della riattivazione dei servizi. Quando il database è in pausa, si paga solo per lo spazio di archiviazione. Il livello Elaborazione serverless è ideale per lo scenario in cui una persona deve prendere un autobus poiché è in fase di sviluppo (non in uso 24 ore su 24, 7 giorni su 7) e non si conosce la sua popolarità al lancio (ossia la quantità di calcolo che sarà necessaria).

    Se si verificano problemi o si vuole controllare che le risorse sono state distribuite, è possibile esaminare il portale di Azure.

Connettersi al database SQL di Azure con Azure Data Studio

Dopo aver distribuito il database, è possibile connettersi e interagire con esso in molti modi: sqlcmd, Azure Data Studio, SSMS, l'editor di query nel portale e così via. Qui si apprenderà come connettersi al database usando Azure Data Studio.

Nota

A seconda della configurazione locale, ad esempio se si usa una VPN, Azure Data Studio potrebbe richiedere di aggiungere l'indirizzo IP al firewall del server. È possibile aggiungere l'indirizzo IP al firewall del server nel portale di Azure seguendo la procedura illustrata in questo articolo.

  1. Aprire Azure Data Studio e verificare che la cartella del repository del codice sia aperta selezionando l'icona Esplora nella barra attività. Se i file di codice non vengono visualizzati, tornare all'esercizio precedente per configurare l'ambiente.

  2. Selezionare Connessioni dalla barra attività. Tutte le connessioni di database possono essere create e archiviate qui.

  3. Accanto a Server selezionare il pulsante Nuova connessione, simile a un server con un segno più.

  4. Nel riquadro Dettagli connessione visualizzato immettere le informazioni seguenti:
    Tipo di connessione: Microsoft SQL Server
    Server: bus-server[uniqueID].database.windows.net
    Tipo di autenticazione: Accesso SQL
    Nome utente: cloudadmin
    Password: password dell’utente
    Memorizza password: Casella di controllo
    Database: bus-db
    Gruppo di server: Impostazione predefinita
    Nome (facoltativo): lasciare vuoto

  5. Selezionare Connetti.

  6. Una volta stabilita una connessione, dovrebbe essere possibile esplorare il contenuto del database nel riquadro Connessioni.

Configurare lo schema del database con T-SQL

Una volta stabilita la connessione a un database, è in genere necessario distribuire lo schema del database e adattarlo in base ai requisiti dello scenario creando tabelle. Usando una serie di script T-SQL in un notebook SQL in Azure Data Studio, si configurerà il database per supportare l'applicazione e caricare alcuni dati iniziali relativi al bus.

  1. In Azure Data Studio selezionare l'icona Esplora nella barra attività.

  2. Nella cartella database\notebooks aprire 01-set-up-database.ipynb.

  3. Seguire i passaggi nel notebook SQL per completare l'esercizio e quindi tornare qui.

Elaborare i dati del bus con database SQL di Azure

Ora che il database è configurato, è possibile approfondire il modo in cui database SQL di Azure riceverà i dati JSON in tempo reale e li archivierà nel database. Fortunatamente, il database SQL di Azure ha il supporto JSON, pertanto la gestione sarà semplice. È quindi possibile usare le funzionalità geospaziali in database SQL di Azure per trovare le distanze tra bus, definire e archiviare recinti virtuali e anche determinare se un bus si trovi all'interno di un recintino specificato. Con una base simile, lo sviluppo di applicazioni diventa notevolmente semplificato. Questo esercizio verrà completato in un notebook SQL in Azure Data Studio, in modo simile all'attività precedente.

  1. In Azure Data Studio selezionare l'icona Esplora nella barra attività.

  2. Nella cartella database\notebooks aprire 02-json-geospatial-sql-db.ipynb.

  3. Seguire i passaggi nel notebook SQL per completare l'esercizio e quindi tornare qui.