演習 - Azure SQL Database をデプロイして構成する

完了

Azure SQL Database は、運用、トランザクション、およびハイブリッド分析のワークロードに適しています。

バス乗車のシナリオでは、JSON や地理空間をサポートしていることなど、最新の機能を備えたエンタープライズ データベースであったため、Azure SQL Database を選択しました。

ここでは、スクリプトを使用して Azure SQL Database をデプロイし、Azure Data Studio でこれに接続し、T-SQL を使用してシナリオのデータベースを設定します。 次に、バスの乗車に関連する JSON と地理空間のサポートについて説明します。

PowerShell を使用して Azure SQL Database をデプロイする

バス乗車のシナリオ用にデータベースを設定するには、まず、使用するデータベースをデプロイする必要があります。 これを行うには、Azure Cloud Shell を使用します。 Cloud Shell は、Azure portal を介して使用することもできます。これを使用すると、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 Database インスタンスと論理サーバーをデプロイします。 さらにこのスクリプトでは、データベースにアクセスできるように、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 つコマンドがあります。1 つずつ見ていきましょう。 最初のコマンドによって、Azure SQL Database 論理サーバーが作成されます。これは、接続先のインスタンスとして、また、そのサーバーに割り当てられているすべてのデータベースのメタデータとポリシー設定をグループ化する方法として機能します。 次の 2 つのコマンドでは、2 つのファイアウォール規則を作成します。1 つは IP アドレスの接続を許可し、もう 1 つは他の Azure サービスへの接続を許可します。 この設定は、Azure DevOps や GitHub Actions を使用して CI/CD パイプラインを設定するときに特に便利です。

    最後のコマンドでは、その論理サーバーにデータベースをデプロイします。 このコマンドから、このデータベースが 4 つの仮想コアを持つ General Purpose サービス レベルにあり、0.5 から 4 の範囲の仮想コアを持つサーバーレス コンピューティング レベルにあることがわかります。 サーバーレス コンピューティング レベルは、断続的で予測することができない使用量が発生するものの、長い期間で見ると低めの平均コンピューティング使用量を対象としたものです。 サーバーレス コンピューティング レベルの場合、パフォーマンス管理を簡略化するために自動コンピューティング スケーリングが提供され、使用されたコンピューティングの量に対してのみ課金されます。 サーバーレス コンピューティング レベルでは、自動的な一時停止と再開もサポートされているため、価格をさらに最適化することができます。 データベースが一時停止している場合は、ストレージに対してのみ課金されます。 開発フェーズ段階であり (24 時間 365 日使用されることはない)、運用開始時にどれくらい利用されるようになるのか (どの程度のコンピューティング量が必要になるのか) は不明なため、サーバーレス コンピューティング レベルはバス乗車のシナリオに対する優れたソリューションです。

    問題がある場合、またはリソースがデプロイされたことを確認する必要がある場合、Azure portal で確認できます。

Azure Data Studio を使用して Azure SQL Database に接続する

データベースをデプロイしたら、接続して操作できる方法は、sqlcmd、Azure Data Studio、SSMS、ポータルのクエリ エディターなど多数あります。ここでは、Azure Data Studio を使用してデータベースに接続する方法を説明します。

Note

ローカル構成によっては (VPN を使用しているかどうかなど)、Azure Data Studio から、サーバー ファイアウォールに IP アドレスを追加するように求められる場合があります。 この記事の中の手順に従って、Azure portal 内のサーバー ファイアウォールに IP アドレスを追加することができます。

  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 Database でバスのデータを処理する

データベースが構成されたので、Azure SQL Database でリアルタイムの JSON データを受信し、データベースに格納する方法について詳しく説明します。 幸い、Azure SQL Database では JSON がサポートされているため、管理は簡単です。 次に、Azure SQL Database の地理空間機能を使用して、バスとバスの間の距離を検出し、ジオフェンスを定義して格納し、バスが特定のジオフェンス内にあるかどうかを確認することさえもできます。 このような基盤では、アプリケーションの開発が大幅に簡素化されます。 この演習は、前の活動と同様に、Azure Data Studio の SQL ノートブックで行います。

  1. Azure Data Studio 内で、アクティビティ バー内の [エクスプローラー] アイコンを選択します。

  2. フォルダー database\notebooks の下で、02-json-geospatial-sql-db.ipynb を開きます。

  3. SQL ノートブックの手順に従って演習を完了し、ここに戻ります。