SQL Azure: Getting Started

Microsoft Azure

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

 

2015_03_06_SQLAzure_01
Figura 1 – Console Azure

 

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.

 

2015_03_06_SQLAzure_02
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.

 

2015_03_06_SQLAzure_03
Figura 3 – Elenco 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
  1. max thread di lavoro
  2. max sessioni
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

 

2015_03_06_SQLAzure_04
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.

 

2015_03_06_SQLAzure_05
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.

 

2015_03_06_SQLAzure_06
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.