Autore: Vincenzo Tenisci
In questo breve articolo vedremo come iniziare ad usare SQL Azure per creare il nostro primo database. Come prima cosa, aprire la console web di Azure ed eseguire i seguenti passaggi:
- Selezionare il servizio Database SQL
- Selezionare il menu Server (link in alto)
- Selezionare il menu Aggiungi – figura 1
Riempite la form con i seguenti dati – figura 2:
- Nome Accesso: inserire un nome utente che diventerà il vostro primo sysadmin (amministratore del db). Questo è un utente SQL. NOTA: una volta creato il server potete aggiungere nuovi utenti SQL con ruoli diversi. Uno di questi utenti dovrà essere impostato nella stringa di connessione per accedere a un particolare database creato all’interno del server.
- Password e conferma Password: password dell’utente definito nel punto a.
- Area: questo è forse l’informazione più importante da specificare. Dovete assolutamente fare in modo che tutti i vosstri servizi/applicazioni siano configurati nella stessa area e quindi sono eseguiti nello stesso DataCenter. Evitate ad esempio di configurare SQL nell’area Nord America e configurare siti web che accedono ai vostri DB, nell’area Nord Europa.
Figura 2 – Creazione Nuovo Server
A questo punto il vostro server è pronto e potete iniziare a creare i vostri primi database. Vediamo ora come effettuare le stesse operazioni tramite PowerShell:
- Aprire la console PowerShell (o meglio PowerShell ISE) e lanciare il comando Add-AzureAccount. A questo punto dovete specificare il vostro account azure e se tutto va a buon fine potete iniziare ad amministrare qualsiasi servizio Azure attraverso PowerShell!
- Lanciate il commando help sql | where Name -like “*Server*” e noterete che nella lista è presente il comando Add-AzureSqlDatabaseServer che andremo ad utilizzare.
- Prima di creare il nostro server SQL, andiamo a vedere quali sono i possibili valori che posso impostare per l’Area. Lanciate il comando Get-AzureLocation | select Name e otterremo la lista delle region.
- Siamo pronti per creare il server, per l’Area scegliamo il valore West Europe. Ecco il comando: New-AzureSqlDatabaseServer -AdministratorLogin “myadmin” -AdministratorLoginPassword “myPassword$$$” -Location “West Europe”
Naturalmente se andate nel portale Azure troverete il nuovo server nell’elenco. Per visualizzare l’elenco dei server SQL con PowerShell, lanciate il comando: Get-AzureSqlDatabaseServer
Livelli di Prestazione
Se andate nel portale Azure e visualizzate l’elenco dei server SQL creati, noterete che tra le varie informazioni è presente anche quella sul DTU. DTU è l’acronimo di Database Throughput Unit e fornisce la metrica principale per descrivere il livello di prestazione di un server, combinando le misurazioni fatte su CPU, memoria e I/O. Questo significa che le DTU forniscono un’aggregazione complessiva dei tre fattori sopra citati e quindi non avrò mai l’incidenza percentuale di ciascuna componente (CPU, memoria e I/O). Più è alto il numero di DTU e più è performante il nostro database. Se ad esempio un database dispone di 10 DTU significa che è 10 volte più performante di un altro che ha 1 DTU.
NB: con la versione on-premise di SQL Server (a partire dalla 2008 in su), possiamo creare dei livelli di servizio configurando opportunamente il Resource Governor.
Attualmente, ogni server che andiamo a creare dispone di 2000 DTU (figura 4) e possiamo creare al massimo 150 database.
Come vedremo, nel momento in cui creiamo un database, dobbiamo scegliere il livello di servizio (e quindi il numero di DTU) che vogliamo associare ad esso. Al momento esistono tre livelli di servizio: Basic, Standard e Premium. Di seguito viene riportata la tabella comparativa fornita da Microsoft.
Livello di servizio/Livello di prestazioni | DTU | Dimensioni max DB |
| Frequenza transazioni del benchmark | Prevedibilità | |
Basic | 5 | 2 GB | 30 | 300 | 16.600 transazioni all’ora | Buona |
Standard/S0 | 10 | 250 GB | 60 | 600 | 521 transazioni al minuto | Migliore |
Standard/S1 | 20 | 250 GB | 90 | 900 | 934 transazioni al minuto | Migliore |
Standard/S2 | 50 | 250 GB | 120 | 1.200 | 2.570 transazioni al minuto | Migliore |
Standard/S3* | 100 | 250 GB | 200 | 2.400 | 5.100 transazioni al minuto | Migliore |
Premium/P1 | 100 | 500 GB | 200 | 2.400 | 105 transazioni al secondo | Ottimale |
Premium/P2 | 200 | 500 GB | 400 | 4.800 | 228 transazioni al secondo | Ottimale |
Premium/P3 | 800 | 500 GB | 1.600 | 19.200 | 735 transazioni al secondo | Ottimale |
Per ulteriori informazioni vi rimando alle seguenti sezioni dell’msdn:
https://msdn.microsoft.com/it-it/library/azure/dn741336.aspx
https://msdn.microsoft.com/it-it/library/azure/ee336245.aspx
Colleghiamoci a SQL Server
A questo punto, è possibile collegarsi al nostro server SQL in vari modi:
- Attraverso il portale Azure
- Attraverso la Management Studio di SQL Server (va bene anche la Management Studio express).
- Attraverso PowerShell
Per usare la Management Studio dalla nostra postazione remota, dobbiamo effettuare le seguenti configurazioni:
- Configurare sul proprio firewall le regole di ingresso e uscita per la porta 1433
- Dal portale Azure, configurare i range di indirizzi IP ammessi – figura 5
Figura 4 – Configurazione Security
A questo punto apriamo la Management Studio ed impostiamo i seguenti valori per la connessione:
- Tab Login:
- Server Type: Database Engine
- Server Name: [NomeSqlServerAzure].database.windows.net
- Authentication: Sql Server Authentication
- Login: [username]@ [NomeSqlServerAzure]
- Password.
- Tab Connection Properties:
- Selezionare Encrypt Connection
A questo punto siamo collegati al nostro server SQL e siamo pronti per creare il nostro primo database.
Creazione di un Database
In questa sezione vedremo come creare un nuovo database usando:
- Portale Azure
- Management Studio
- PowerShell
Portale Azure
Collegatevi al portale Azure, selezionate il server SQL che volete gestire e scegliete il menu database (per la versione in inglese) e selezionate il link: Create a SQL Database e vi apparirà la finestra come nella figura 6.
Figura 5 – Creazione Nuovo Database
Date un nome al vostro DB, scegliete il livello Basic (occuperà 5 DTU) e avviate la creazione del DB! A questo punto potete amministrare il vostro database direttamente da portale o da Management Studio (io preferisco quest’ultimo).
Management Studio
Aprite la Management Studio e collegatevi al vostro server SQL Azure come specificato precedentemente. Cliccate con il tasto destro sulla cartella Databases e selezionate New Database, come mostrato nella figura 7.
Figura 6 – Creazione Database via SSMS
So che alcuni di voi rimarranno delusi, ma anche se stiamo usando la Management Studio, per questa operazione non abbiamo nessun supporto visuale ma dobbiamo scrivere lo script di creazione del DB. Prima di tutto vi invito a consultare l’help dell’istruzione CREATE DATABASE per SQL Azure su MSDN: https://msdn.microsoft.com/en-us/library/dn268335.aspx. Naturalmente le opzioni che abbiamo a disposizione sono ben diverse rispetto a quelle della versione on-premise. Di seguito viene riportato un esempio di creazione di un DB con livello Basic e size massiom di 500MB:
CREATE DATABASE DemoDb COLLATE SQL_Latin1_General_CP1_CI_AS (MAXSIZE=500MB, EDITION='Basic', SERVICE_OBJECTIVE='Basic') GO
L’opzione SERVICE_OBJECTIVE rappresenta il livello di servizio che, insieme al MAXSIZE debbono essere compatibili con l’edizione scelta (vedere tabella 1).
PowerShell
Prima di creare il database, dobbiamo collegarci al server. A tal scopo dobbiamo creare un nuovo server context chiamando la cmdlet New-AzureSqlDatabaseServerContext a cui passeremo il nome del server e le credenziali relative all’utente amministratore di SQL Azure.
Di seguito vi fornisco il codice di due semplici ma comode funzioni per creare le credenziali e il server context.
Function New-PSCredentialFromUserAndPassword { Param( [String]$UserName, [String]$Password ) $securePassword = ConvertTo-SecureString -String $Password -AsPlainText -Force Return New-Object System.Management.Automation.PSCredential($UserName, $securePassword) } Function Get-SqlServerContext { Param( [String]$UserName, [String]$Password, [String]$databaseServerName ) $credential = New-PSCredentialFromUserAndPassword -UserName $UserName -Password $Password if (!$credential) {throw "Cannot create credential for $UserName"} $context = New-AzureSqlDatabaseServerContext -ServerName $databaseServerName -Credential $credential if (!$context) {throw "Cannot create db server context for $databaseServerName."} return $context }
Per creare un nuovo database bisogna usare la cmdlet New-AzureSqlDatabase. Questo comando ha varie opzioni, per un elenco completo dei parametri vi rimando al link MSDN: https://msdn.microsoft.com/en-us/library/dn546722.aspx. Di seguito viene fornito un esempio di creazione di un DB. Lo script usa la funzione Get-SqlServerContext mostrato in precedenza.
$ctx = Get-SqlServerContext -UserName "username" -Password 'password' -databaseServerName "serverName" $db = New-AzureSqlDatabase -ConnectionContext $ctx -DatabaseName "TestDb" -Edition Basic -MaxSizeGB 2 -Collation "SQL_Latin1_General_CP1_CI_AS"
Il parametro MaxSizeGB è vincolato all’edizione del database scelta (vedi tabella 1). Un parametro molto importante è la Collation che influenza il modo in cui SQL Server tratta i dati di tipo stringa (varchar, nvarchar, char, nchar ecc…). Nel nostro caso CI_AS sta per Case Insensitive e Accent Sensitive. Cercate, se è possibile, di utilizzare sempre la stessa collation per i vostri database e di utilizzare la stessa usata dai vostri server SQL on premise. Ci sono un paio di cmdlets che voglio segnalarvi.
Get-AzureSqlDatabaseServiceObjective: con questo cmdlet possiamo farci restituire le informazioni per un determinato livello di servizio. Possiamo ad esempio capire se quel livello di servizio è abilitato oppure è in disuso; il comando da eseguire è il seguente: $servieLevel = Get-AzureSqlDatabaseServiceObjective $ctx -ServiceObjectiveName “S1”
Nota: la variabile $ctx rappresente il Server Context precedentemente impostato.
Set-AzureSqlDatabase: con questo cmdlet possiamo modificare semplicemente le impostazioni del nostro database e addirittura scalarlo ad una edizione e livello di servizio superiore. Per il database che abbiamo creato attraverso l’utilizzo del management studio (DemoDb) è stata impostata l’edizione Basic con il livello di servizio Basic, supponiamo di voler scalare il nostro DB passando all’edizione Standard con livello di servizio S1 e portare a 200GB il size massimo del DB. Lo script da eseguire è il seguente:
$db = Get-AzureSqlDatabase $ctx –DatabaseName “DemoDb” $servieLevel = Get-AzureSqlDatabaseServiceObjective $ctx -ServiceObjectiveName "S1" Set-AzureSqlDatabase $ctx –Database $db –ServiceObjective $servieLevel –Edition Standard -MaxSizeGB 200
Tutto bello ma… quanto costa?
Inutile dire che questa è la domanda più ricorrente quando parlo di SQL Azure durante i miei corsi o da un cliente a cui mostro le potenzialità di Azure. Diciamo anche che questa domanda è legata ad Azure in generale e non solo as SQL. Per avere un dettaglio dei prezzi aggiornati di SQL Azure vi rimando a http://azure.microsoft.com/it-it/pricing/details/sql-database/. Allo stato attuale, un database Standard con livello S0 (10 DTU) per un massimo di 200GB costa 12€ al mese, mentre il livello più basso Standard (5 DTU) per un massimo di 2GB costa 4€ al mese. Fate i vostri conti considerando il costo di un server/licenze/manutenzione/risparmio energetico ecc…
Conclusione
Abbiamo solo scalfito la punta dell’iceberg per quanto riguarda SQL Azure e naturalmente i veri servizi PaaS in generale. Spero comunque che questa breve introduzione vi abbia stimolato la curiosità di iniziare ad usare SQL Azure.