Ejercicio: Implementación y configuración de Azure SQL Database

Completado

Azure SQL Database es una excelente opción para cargas de trabajo analíticas operativas, transaccionales e híbridas.

En el escenario de transporte en autobús, se ha seleccionado Azure SQL Database, ya que se trata de una base de datos empresarial con funcionalidades modernas, como la compatibilidad con JSON y datos geoespaciales.

En este caso, implementará Azure SQL Database mediante scripts, se conectará a la instancia en Azure Data Studio y configurará la base de datos para el escenario mediante T-SQL. Después, explorará la compatibilidad con JSON y datos geoespaciales en relación con el transporte en autobús.

Implementación de Azure SQL Database mediante PowerShell

A fin de configurar la base de datos para el escenario de transporte en autobús, primero tiene que implementar una base de datos con la que trabajar. Para ello, usará Azure Cloud Shell. Cloud Shell también está disponible desde Azure Portal, y le permite crear y administrar recursos de Azure. Viene preinstalado con varias herramientas, como la CLI de Azure, Azure PowerShell y sqlcmd. En este ejercicio, usará Azure PowerShell, pero puede realizar las mismas tareas con la CLI de Azure. En el script, se le solicitará una contraseña para la nueva base de datos y la dirección IP local para permitir que el dispositivo se conecte a la base de datos.

Estos scripts deben tardar de tres a cinco minutos en completarse. Asegúrese de anotar la contraseña, el identificador único y la región, ya que no se volverán a mostrar.

Sugerencia

Puede usar CTRL + Mayús + V para pegar comandos en Cloud Shell. CTRL + V no funcionará.

  1. Para empezar, obtenga la dirección IP pública local. Asegúrese de que está desconectado de cualquier servicio VPN y abra un terminal de PowerShell local en el dispositivo. Ejecute el comando siguiente y anote la dirección IP resultante.

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

    Sugerencia

    Si no usa un dispositivo Windows, tendrá que buscar la dirección IP con otro método. En el terminal, puede ejecutar curl ifconfig.co.

  2. En Cloud Shell, ejecute los comandos que se muestran a continuación. Escriba una contraseña compleja y, en el símbolo del sistema, escriba la dirección IP pública local que ha obtenido en el paso anterior.

    Nota

    Una contraseña compleja debe constar de lo siguiente:

    • 8 caracteres como mínimo y 16 caracteres como máximo.
    • Requiere 3 de 4 de las siguientes opciones:
      • Caracteres en minúsculas
      • Caracteres en mayúsculas
      • Números (0 al 9)
      • Símbolos ( @ # $ % ^ & * - _  + = [ ] { } | \ : ‘ , . ? / ` ~ “ ( ) ; )
    # 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. Genere y almacene en un archivo de texto la información que necesitará a lo largo del módulo ejecutando el siguiente código en Cloud Shell. Probablemente tendrá que presionar Entrar después de pegar el código, porque la última línea no se ejecutará de forma predeterminada.

    # 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
    

    No olvide anotar la contraseña, el identificador único y la región. Los usará a lo largo del módulo.

  4. Ejecute el script siguiente para implementar una instancia de Azure SQL Database vacía y un servidor lógico. El script también agregará la dirección IP como regla de firewall para que pueda acceder a la base de datos.

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

    El script puede tardar varios minutos en completarse. Hay cuatro comandos principales en el bloque de código anterior. Ahora se desglosarán. El primer comando crea un servidor lógico de Azure SQL Database, que sirve como la instancia a la que conectarse, así como una manera de agrupar los metadatos y la configuración de directivas para todas las bases de datos asignadas a ese servidor. Los dos comandos siguientes crean dos reglas de firewall: una para permitir que la dirección IP se conecte y otra para permitir que se conecten otros servicios de Azure. Esta configuración será especialmente útil al configurar canalizaciones de CI/CD mediante Azure DevOps o Acciones de GitHub.

    El último comando implementa una base de datos en ese servidor lógico. A partir de los comandos, puede ver que la base de datos se encuentra en el nivel de servicio De uso general con cuatro núcleos virtuales, y en el nivel de proceso sin servidor con un rango de núcleos virtuales entre 0,5 y 4. El nivel de proceso sin servidor está pensado para usarse de forma intermitente e imprevisible, con un menor uso de procesos en el tiempo. El nivel de proceso sin servidor proporciona escalabilidad automática de los procesos para simplificar la administración del rendimiento y se factura solo por la cantidad de procesos que se usa. El nivel de proceso sin servidor también admite la pausa y reanudación automáticas para ayudar a optimizar el precio. Cuando la base de datos está en pausa, solo paga por el almacenamiento. El nivel de proceso sin servidor es excelente para el escenario de transporte en autobús, ya que se encuentra en fase de desarrollo (no se usa de forma ininterrumpida) y se desconoce cuál será su popularidad cuando se publique (qué capacidad de proceso necesitará).

    Si tiene algún problema o quiere confirmar que los recursos se hayan implementado, puede revisarlo en Azure Portal.

Conexión a Azure SQL Database con Azure Data Studio

Una vez que se ha implementado la base de datos, hay muchas maneras de conectarse e interactuar con ella: sqlcmd, Azure Data Studio, SSMS, el editor de consultas del portal, etc. Aquí, aprenderá a conectarse a la base de datos mediante Azure Data Studio.

Nota:

En función de la configuración local (por ejemplo, si está en una VPN), Azure Data Studio puede solicitarle que agregue la dirección IP al firewall del servidor. Puede agregar la dirección IP al firewall del servidor en Azure Portal siguiendo los pasos de este artículo.

  1. Abra Azure Data Studio y confirme que la carpeta del repositorio de código está abierta seleccionando el icono de Explorador de la barra de actividades. Si no ve los archivos de código, vuelva al ejercicio anterior para configurar el entorno.

  2. Seleccione Conexiones en la barra de actividades. Todas las conexiones de base de datos se pueden crear y almacenar aquí.

  3. Junto a Servidores, seleccione el botón Nueva conexión (parece un servidor con un signo más).

  4. En el panel Detalles de conexión que se abre, rellene la información siguiente:
    Tipo de conexión: Microsoft SQL Server
    Servidor: bus-server[uniqueID].database.windows.net
    Tipo de autenticación: Inicio de sesión SQL
    Nombre de usuario: cloudadmin
    Contraseña: su_contraseña
    Recordar contraseña: active la casilla
    Base de datos: bus-db
    Grupo de servidores: valor predeterminado
    Nombre (opcional): déjelo en blanco

  5. Seleccione Conectar.

  6. Una vez que se haya realizado una conexión correcta, debería poder navegar por el contenido de la base de datos en el panel Conexiones.

Configuración del esquema de la base de datos con T-SQL

Una vez que se haya conectado a cualquier base de datos, normalmente tendrá que implementar el esquema de la base de datos y adaptarla para satisfacer los requisitos del escenario mediante la creación de tablas. Mediante una serie de scripts de T-SQL en un cuaderno de SQL en Azure Data Studio, configurará la base de datos para admitir la aplicación y cargará algunos datos iniciales relacionados con el autobús.

  1. En Azure Data Studio, seleccione el icono de Explorador de la barra de actividades.

  2. En la carpeta database\notebooks, abra 01-set-up-database.ipynb.

  3. Siga los pasos del cuaderno de SQL para completar el ejercicio y, después, vuelva aquí.

Procesamiento de datos del autobús con Azure SQL Database

Ahora que la base de datos está configurada, es el momento de profundizar en cómo Azure SQL Database recibirá los datos JSON en tiempo real y los almacenará en la base de datos. Afortunadamente, Azure SQL Database es compatible con JSON, por lo que se puede administrar con facilidad. Después, puede usar las funcionalidades geoespaciales de Azure SQL Database para buscar las distancias entre los autobuses, definir y almacenar geovallas, e incluso determinar si un autobús está dentro de una geovalla concreta. Con una base como esta, el desarrollo de aplicaciones se simplifica considerablemente. Este ejercicio se completará en un cuaderno de SQL en Azure Data Studio, de forma similar a la actividad anterior.

  1. En Azure Data Studio, seleccione el icono de Explorador de la barra de actividades.

  2. En la carpeta database\notebooks, abra 02-json-geospatial-sql-db.ipynb.

  3. Siga los pasos del cuaderno de SQL para completar el ejercicio y, después, vuelva aquí.