练习 - 部署和配置 Azure SQL 数据库

已完成

Azure SQL 数据库是操作、事务和混合分析工作负载的极佳选择。

在乘车场景中,我们选择了 Azure SQL 数据库,因为它是具有新式功能(如 JSON 和地理空间支持)的企业数据库。

在这里,你将使用脚本部署 Azure SQL 数据库,在 Azure Data Studio 中连接到它,然后使用 T-SQL 为该场景设置数据库。 之后,你将了解与乘车相关的 JSON 和地理空间支持。

使用 PowerShell 部署 Azure SQL 数据库

若要为乘车场景设置数据库,首先需要部署一个数据库以供使用。 为此,你将使用 Azure Cloud Shell。 你还可通过 Azure 门户使用 Cloud Shell,并通过它来创建和管理 Azure 资源。 它预装了各种工具,包括 Azure CLI、Azure PowerShell 和 sqlcmd。 在本练习中,你将使用 Azure PowerShell,但也可使用 Azure CLI 完成这些任务。 在脚本中,系统将提示输入新数据库的密码和本地 IP 地址,以使设备能够连接到数据库。

完成这些脚本需要 3-5 分钟。 请务必记下密码、唯一 ID 和区域,因为它们不会再次显示。

提示

可以使用 CTRL + Shift + V 将命令粘贴到 Cloud Shell 中。 CTRL + V 不起作用

  1. 首先获取本地公共 IP 地址。 确保已断开与所有 VPN 服务的连接,并在设备上打开本地 PowerShell 终端。 运行以下命令并记下生成的 IP 地址。

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

    提示

    如果不在 Windows 设备上,则需要使用另一种方法查找 IP 地址。 在终端中,可以运行 curl ifconfig.co

  2. 在 Cloud Shell 中运行以下命令。 输入一个复杂的密码,并在提示符下输入你在上一步中获得的本地公共 IP 地址。

    注意

    复杂密码必须包括:

    • 最少 8 个字符,最多 16 个字符
    • 要求 4 个字符中有 3 个是以下字符:
      • 小写字符
      • 大写字符
      • 数字 (0-9)
      • 符号 ( @ # $ % ^ & * - _  + = [ ] { } | \ : ‘ , . ? / ` ~ “ ( ) ; )
    # 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. 通过在 Cloud Shell 中运行以下代码,以文本文件的形式输出并存储本模块中所需的信息。 粘贴代码后,可能需要按 Enter,因为默认不运行最后一行。

    # 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
    

    请务必记下密码、唯一 ID 和区域。 你将在本模块中使用它们。

  4. 运行以下脚本,部署一个空的 Azure SQL 数据库实例和逻辑服务器。 该脚本还会将 IP 地址添加为防火墙规则,以便你可访问数据库。

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

    此脚本需要几分钟完成。 上面的代码块中有 4 个主要命令,让我们分开来讲。 第一个命令创建一个 Azure SQL 数据库逻辑服务器,它充当连接的实例,并用于对分配给该服务器的所有数据库的元数据和策略设置进行分组。 接下来的两个命令将创建两个防火墙规则:一个允许 IP 地址进行连接,另一个允许其他 Azure 服务进行连接。 使用 Azure DevOps 和/或 GitHub Actions 设置 CI/CD 管道时,此设置特别有用。

    最后一个命令将数据库部署到该逻辑服务器中。 从这些命令可以发现,数据库位于具有四个 vCore 的常规用途服务层级中以及虚拟核心介于 0.5 到 4 之间的无服务器计算层级中。 无服务器计算层级适用于间歇性、不可预测的使用情况,并且平均计算利用率随时间推移较低。 无服务器计算层级提供自动计算缩放,可简化性能管理,并且只对使用的计算量计费。 无服务器计算层级还支持自动暂停和恢复,可帮助进一步优化成本。 暂停数据库后,只需为存储付费。 无服务器计算层级非常适合乘车场景,因为它还在开发阶段(并未全天候使用),而且在你启动时,它的受欢迎程度是未知的(它将需要多少计算是未知的)。

    如果有任何问题或要确认已部署资源,可以在 Azure 门户中进行查看。

使用 Azure Data Studio 连接到 Azure SQL 数据库

部署数据库后,可通过多种方式与其进行连接和交互:sqlcmd、Azure Data Studio、SSMS、门户中的查询编辑器等。在这里,你将了解如何使用 Azure Data Studio 连接到数据库。

注意

Azure Data Studio 可能会提示将 IP 地址添加到服务器防火墙,具体取决于本地配置(例如,如果使用了 VPN)。 可以按照本文中的步骤将 IP 地址添加到 Azure 门户中的服务器防火墙。

  1. 打开 Azure Data Studio,选择活动栏上的“资源管理器”图标来确认代码存储库文件夹是否已打开。 如果未看到代码文件,请返回到上一练习来配置环境。

  2. 从活动栏中选择“连接”。 可在此处创建和存储你的所有数据库连接。

  3. 在“服务器”旁边,选择“新建连接”按钮(看起来是一个带加号的服务器)。

  4. 在打开的“连接详细信息”窗格中,填写以下信息:
    连接类型:Microsoft SQL Server
    服务器:bus-server[uniqueID].database.windows.net
    身份验证类型:SQL 登录名
    用户名:cloudadmin
    密码:your-password
    记住密码:复选框
    数据库:bus-db
    服务器组:默认
    名称(可选):保留为空

  5. 选择“连接”。

  6. 成功建立连接后,应该能够在“连接”窗格中导航数据库的内容。

使用 T-SQL 设置数据库架构

连接到任何数据库后,通常需要部署数据库架构,并通过创建表来定制数据库,以满足你的场景要求。 通过在 Azure Data Studio 中的 SQL 笔记本中使用一系列 T-SQL 脚本,你将配置数据库来支持你的应用程序,并加载一些与公交车相关的初始数据。

  1. 在 Azure Data Studio 的活动栏中选择“资源管理器”图标

  2. database\notebooks 文件夹下,打开 01-set-up-database.ipynb

  3. 按照 SQL 笔记本中的步骤完成练习,然后返回此处。

使用 Azure SQL 数据库处理公交数据

现在已配置好数据库,接下来你可深入了解 Azure SQL 数据库如何接收实时 JSON 数据并将其存储在数据库中。 幸运的是,Azure SQL 数据库支持 JSON,因此易于管理。 然后,你可使用 Azure SQL 数据库中的地理空间功能来查找两辆公交车间的距离、定义和存储地理围栏,甚至确定是否有公交车在地理围栏中。 有了这样的基础,你的应用程序开发得到了大大的简化。 本练习将在 Azure Data Studio 的 SQL 笔记本中完成,与上一个活动类似。

  1. 在 Azure Data Studio 的活动栏中选择“资源管理器”图标

  2. database\notebooks 文件夹下,打开 02-json-geospatial-sql-db.ipynb

  3. 按照 SQL 笔记本中的步骤完成练习,然后返回此处。