연습 - Azure SQL Database 배포 및 구성

완료됨

Azure SQL Database는 운영, 트랜잭션, 하이브리드 분석 워크로드에 적합한 선택입니다.

버스 타기 시나리오에서는 Azure SQL Database가 JSON 및 지리 공간적 지원과 같은 최신 기능이 포함된 엔터프라이즈 데이터베이스여서 이것을 선택했습니다.

여기에서 스크립트를 사용하여 Azure SQL Database를 배포하고, Azure Data Studio에서 데이터베이스에 연결하고, T-SQL을 사용하여 시나리오용 데이터베이스를 설정합니다. 그런 다음, 버스 타기와 관련되는 JSON 및 지리 공간적 지원에 대해 살펴봅니다.

PowerShell을 사용하여 Azure SQL Database 배포

버스 타기 시나리오용 데이터베이스를 설정하려면 먼저 사용할 데이터베이스를 배포해야 합니다. 이렇게 하려면 Azure Cloud Shell을 사용합니다. Azure Portal에서도 사용할 수 있는 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)
      • Symbols ( @ # $ % ^ & * - _  + = [ ] { } | \ : ' , . ? / ' ~ " ( ) ; )
    # 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."
    

    스크립트를 완료하는 데는 몇 분 정도 걸릴 수 있습니다. 앞의 블록에 있는 네 가지 주요 명령을 자세히 살펴보겠습니다. 첫 번째 명령은 연결하기 위한 인스턴스 역할을 하고 해당 서버에 할당된 모든 데이터베이스에 대한 메타데이터 및 정책 설정을 그룹화하는 방법으로 사용되는 Azure SQL Database 논리 서버를 만듭니다. 다음 두 명령은 두 개의 방화벽 규칙을 만듭니다. 하나는 IP 주소에서 연결하고 다른 하나는 다른 Azure 서비스에서 연결하도록 합니다. 이 설정은 Azure DevOps 및/또는 GitHub Actions를 사용하여 CI/CD 파이프라인을 설정하는 경우에 특히 유용합니다.

    마지막 명령은 해당 논리 서버에 데이터베이스를 배포합니다. 명령에서 데이터베이스가 4개의 vCore가 있는 범용 서비스 계층 및 0.5에서 4 사이의 가상 코어 범위가 있는 서버리스 컴퓨팅 계층에 있다는 것을 알 수 있습니다. 서버리스 컴퓨팅 계층은 시간이 지남에 따라 평균 컴퓨팅 사용률이 낮고 간헐적으로 예측할 수 없는 사용을 위한 것입니다. 서버리스 컴퓨팅 계층은 성능 관리를 간소화하기 위해 자동 컴퓨팅 크기 조정을 제공하며 사용된 컴퓨팅 양에 대해서만 요금이 청구됩니다. 또한 서버리스 컴퓨팅 계층은 추가 가격 최적화에 도움이 되도록 자동 일시 중지 및 재개를 지원합니다. 따라서 데이터베이스가 일시 중지되면 스토리지 요금만 지불합니다. 서버리스 컴퓨팅 계층은 개발 단계(24/7 사용 안 됨)에 있으므로 버스 타기 시나리오에 적합한 솔루션이며, 시작할 때 얼마나 인기가 있는지(필요한 컴퓨팅 양)는 알 수 없습니다.

    문제가 있거나 리소스가 배포되었는지 확인하려는 경우 Azure Portal에서 검토할 수 있습니다.

Azure Data Studio를 사용하여 Azure SQL Database에 연결

데이터베이스를 배포한 다음에는 sqlcmd, Azure Data Studio, SSMS, 포털의 쿼리 편집기 등 여러 가지 방법으로 연결하여 조작할 수 있습니다. 여기서는 Azure Data Studio를 사용하여 데이터베이스에 연결하는 방법을 알아봅니다.

참고 항목

로컬 구성(예: 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
    ‘암호’: 원하는 암호
    ‘암호 저장’: 확인란
    ‘데이터베이스’: bus-db
    ‘서버 그룹’: 기본값
    ‘이름(선택 사항)’: 비워 둠

  5. 연결을 선택합니다.

  6. 성공적으로 연결되면 연결 창에서 데이터베이스의 콘텐츠를 탐색할 수 있습니다.

T-SQL을 사용하여 데이터베이스의 스키마 설정

데이터베이스에 연결한 다음에는 일반적으로 데이터베이스 스키마를 배포하고 테이블을 만들어 시나리오의 요구 사항에 맞게 데이터베이스를 조정해야 합니다. Azure Data Studio의 SQL Notebook에서 일련의 T-SQL 스크립트를 사용하여 애플리케이션을 지원하고 초기 버스 관련 데이터 일부를 로드하도록 데이터베이스를 구성합니다.

  1. Azure Data Studio의 작업 표시줄 에서 탐색기 아이콘을 선택합니다.

  2. database\notebooks 폴더에서 01-set-up-database.ipynb를 엽니다.

  3. SQL Notebook의 단계에 따라 연습을 완료하고 여기로 돌아옵니다.

Azure SQL Database를 사용하여 버스 데이터 처리

이제 데이터베이스를 구성했으므로 Azure SQL Database에서 실시간 JSON 데이터를 수신하고 데이터베이스에 저장하는 방법을 자세히 살펴보겠습니다. 다행히 Azure SQL Database는 JSON을 지원하므로 쉽게 관리할 수 있습니다. 그런 다음, Azure SQL Database의 지리 공간적 기능을 사용하여 버스 간 거리를 찾고, 지오펜스를 정의 및 저장하고, 버스가 지정된 지오펜스 내에 있는지 확인할 수 있습니다. 이러한 기반을 사용하면 애플리케이션 개발이 크게 간소화됩니다. 이 연습은 이전 작업과 마찬가지로 Azure Data Studio의 SQL Notebook에서 완료됩니다.

  1. Azure Data Studio의 작업 표시줄 에서 탐색기 아이콘을 선택합니다.

  2. database\notebooks 폴더에서 02-json-geospatial-sql-db.ipynb를 엽니다.

  3. SQL Notebook의 단계에 따라 연습을 완료하고 여기로 돌아옵니다.