Azure PowerShell을 사용하여 Azure VM 기반 SQL Server 만들기

적용 대상:Azure VM 기반 SQL Server

이 가이드에서는 PowerShell을 사용하여 Azure VM(가상 머신) 기반 SQL Server를 프로비전하는 옵션을 설명합니다. 기본값을 사용하는 간소화된 Azure PowerShell 예제는 Azure VM 기반 SQL Server 빠른 시작을 참조하세요.

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

참고 항목

이 문서에서는 Azure와 상호 작용하는 데 권장되는 PowerShell 모듈인 Azure Az PowerShell 모듈을 사용합니다. Az PowerShell 모듈을 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

구독 구성

  1. PowerShell을 열고 Connect-AzAccount 명령을 실행하여 Azure 계정에 대한 액세스를 설정합니다.

    Connect-AzAccount
    
  2. 메시지가 표시되면 자격 증명을 입력합니다. Azure 포털에 로그인할 때 사용한 것과 동일한 메일과 암호를 사용합니다.

이미지 변수 정의

값을 다시 사용하고 스크립트 작성을 간소화하려면 먼저 다양한 변수를 정의합니다. 원하는 대로 매개 변수 값을 변경하지만, 제공된 값을 수정할 때 이름 길이 및 특수 문자와 관련된 명명 제한 사항에 주의하세요.

위치 및 리소스 그룹

기타 VM 리소스를 만들려는 데이터 영역과 리소스 그룹을 정의합니다.

원하는 대로 수정한 후 다음 이러한 cmdlet을 실행하여 이러한 변수를 초기화합니다.

$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

스토리지 속성

가상 머신에서 사용할 스토리지 계정 및 스토리지 유형을 정의합니다.

원하는 대로 수정한 후 다음 cmdlet을 실행하여 이러한 변수를 초기화합니다. 프로덕션 워크로드에는 프리미엄 SSD를 사용하는 것이 좋습니다.

$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

네트워크 속성

가상 컴퓨터의 네트워크에서 사용할 속성을 정의합니다.

  • 네트워크 인터페이스
  • TCP/IP 할당 방법
  • 가상 네트워크 이름
  • 가상 서브넷 이름
  • 가상 네트워크의 IP 주소 범위
  • 서브넷의 IP 주소 범위
  • 공용 도메인 이름 레이블

원하는 대로 수정한 후 다음 cmdlet을 실행하여 이러한 변수를 초기화합니다.

$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$TCPIPAllocationMethod = "Dynamic"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$DomainName = $ResourceGroupName

가상 머신 속성

다음 속성을 정의합니다.

  • 가상 머신 이름
  • 컴퓨터 이름
  • 가상 머신 크기
  • 가상 머신의 운영 체제 디스크 이름

원하는 대로 수정한 후 다음 cmdlet을 실행하여 이러한 변수를 초기화합니다.

$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

SQL Server 이미지 선택

다음 변수를 사용하여 가상 머신에 사용할 SQL Server 이미지를 정의합니다.

  1. 먼저 Get-AzVMImageOffer 명령을 사용하여 모든 SQL Server 이미지 제품을 나열합니다. 이 명령은 Azure Portal에서 사용할 수 있는 현재 이미지와 PowerShell을 통해서만 설치할 수 있는 이전 이미지를 나열합니다.

    Get-AzVMImageOffer -Location $Location -Publisher 'MicrosoftSQLServer'
    

    참고 항목

    SQL Server 2008과 SQL Server 2008 R2는 추가 지원이 제공되지 않으며 더 이상 Azure Marketplace에서 사용할 수 없습니다.

  2. 이 자습서에서는 다음 변수를 사용하여 Windows Server 2022에서 SQL Server 2022를 지정합니다.

    $OfferName = "SQL2022-WS2022"
    $PublisherName = "MicrosoftSQLServer"
    $Version = "latest"
    
  3. 다음으로 제품에 사용 가능한 버전을 나열합니다.

    Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    
  4. 이 자습서에서는 SQL Server 2022 Developer 버전(SQLDEV)을 사용합니다. Developer 버전은 테스트 및 개발을 위해 무료로 라이선스가 부여되며 VM 실행 비용만 지불하면 됩니다.

    $Sku = "SQLDEV"
    

리소스 그룹 만들기

Resource Manager 배포 모델을 사용하여 만드는 첫 번째 개체는 리소스 그룹입니다. New-AzResourceGroup cmdlet을 사용하여 Azure 리소스 그룹과 해당 리소스를 만듭니다. 리소스 그룹 이름 및 위치에 대해 이전에 초기화한 변수를 지정합니다.

이 cmdlet을 실행하여 새 리소스 그룹을 만듭니다.

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

저장소 계정 만들기

가상 머신에는 운영 체제 디스크와 SQL Server 데이터 및 로그 파일을 위한 스토리지 리소스가 필요합니다. 간단하게 하기 위해 둘 모두에 대해 하나의 디스크를 만듭니다. SQL Server 데이터와 로그 파일을 전용 디스크에 배치하기 위해 Add-Azure Disk cmdlet을 사용하여 나중에 추가 디스크를 연결할 수 있습니다. New-AzStorageAccount cmdlet을 사용하여 새 리소스 그룹에 표준 스토리지 계정을 만듭니다. 스토리지 계정 이름, 스토리지 SKU 이름 및 위치에 대해 이전에 초기화한 변수를 지정합니다.

이 cmdlet을 실행하여 새 스토리지 계정을 만듭니다.

$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
   -Name $StorageName -SkuName $StorageSku `
   -Kind "Storage" -Location $Location

스토리지 계정을 만드는 데 몇 분 정도 걸릴 수 있습니다.

네트워크 리소스 만들기

가상 머신에 네트워크 연결을 위해 여러 네트워크 리소스가 필요합니다.

  • 각 가상 머신에는 가상 네트워크가 필요합니다.
  • 가상 네트워크에는 하나 이상의 서브넷이 정의되어 있어야 합니다.
  • 네트워크 인터페이스는 공용 또는 개인 IP 주소로 정의되어야 합니다.

가상 네트워크 서브넷 구성 만들기

가상 네트워크에 대한 서브넷 구성을 생성하는 것으로 시작합니다. 이 자습서에서는 New-AzVirtualNetworkSubnetConfig cmdlet을 사용하여 기본 서브넷을 만듭니다. 서브넷 이름과 주소 접두사에 대해 이전에 초기화한 변수를 지정합니다.

참고 항목

이 cmdlet을 사용하여 가상 네트워크 서브넷 구성의 추가 속성을 정의할 수 있지만 이는 이 자습서에서 다루지 않습니다.

다음 cmdlet을 실행하여 가상 서브넷 구성을 만듭니다.

$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix

가상 네트워크 만들기

다음으로, New-AzVirtualNetwork cmdlet을 사용하여 새 리소스 그룹에 가상 네트워크를 만듭니다. 이름, 주소 및 주소 접두사에 대해 이전에 초기화한 변수를 지정합니다. 이전 단계에서 정의한 서브넷 구성을 사용합니다.

다음 cmdlet을 실행하여 가상 네트워크를 만듭니다.

$VNet = New-AzVirtualNetwork -Name $VNetName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig

공용 IP 주소 만들기

이제 가상 네트워크가 정의되었으므로 가상 머신에 연결하기 위한 IP 주소를 구성해야 합니다. 이 자습서에서는 인터넷 연결을 지원하도록 동적 IP 주소 지정을 사용하여 공용 IP 주소를 만듭니다. New-AzPublicIpAddress cmdlet을 사용하여 새 리소스 그룹에 공용 IP 주소를 만듭니다. 이름, 위치, 할당 방법 및 DNS 도메인 이름 레이블에 대해 이전에 초기화한 변수를 지정합니다.

참고 항목

이 cmdlet을 사용하여 공용 IP 주소의 추가 속성을 정의할 수 있지만 이는 이 자습서에서 다루지 않습니다. 또한 고정 주소로 프라이빗 주소 또는 주소도 만들 수 있지만, 이 내용도 이 자습서에서 다루지 않습니다.

다음 cmdlet을 실행하여 공용 IP 주소를 만듭니다.

$PublicIp = New-AzPublicIpAddress -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName

네트워크 보안 그룹 만들기

VM 및 SQL Server 트래픽을 보호하려면 네트워크 보안 그룹을 만듭니다.

  1. 먼저 RDP(원격 데스크톱)에 대한 네트워크 보안 그룹 규칙을 만들어 RDP 연결을 허용합니다.

    $NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
       -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
    
  2. TCP 포트 1433에서 트래픽을 허용하는 네트워크 보안 그룹 규칙을 구성합니다. 이렇게 하면 인터넷을 통해 SQL Server에 연결할 수 있습니다.

    $NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp `
       -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
       -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
    
  3. 네트워크 보안 그룹을 만듭니다.

    $Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
       -Location $Location -Name $NsgName `
       -SecurityRules $NsgRuleRDP,$NsgRuleSQL
    

네트워크 인터페이스 만들기

이제 가상 머신에 대한 네트워크 인터페이스를 만들 준비가 되었습니다. New-AzNetworkInterface cmdlet을 사용하여 새 리소스 그룹에 네트워크 인터페이스를 만듭니다. 이전에 정의한 이름, 위치, 서브넷 및 공용 IP 주소를 지정합니다.

다음 cmdlet을 실행하여 네트워크 인터페이스를 만듭니다.

$Interface = New-AzNetworkInterface -Name $InterfaceName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id `
   -NetworkSecurityGroupId $Nsg.Id

VM 개체 구성

이제 스토리지 및 네트워크 리소스가 정의되었으므로 가상 머신에 대한 컴퓨팅 리소스를 정의할 준비가 되었습니다.

  • 가상 머신 크기와 다양한 운영 체제 속성을 지정합니다.
  • 이전에 만든 네트워크 인터페이스를 지정합니다.
  • Blob 스토리지를 정의합니다.
  • 운영 체제 디스크를 지정합니다.

VM 개체 만들기

가상 머신 크기를 지정하는 것으로 시작합니다. 이 자습서의 경우 DS13을 지정합니다. New-AzVMConfig cmdlet을 사용하여 구성 가능한 가상 머신 개체를 만듭니다. 이름 및 크기에 대해 이전에 초기화한 변수를 지정합니다.

이 cmdlet을 실행하여 가상 머신 개체를 만듭니다.

$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize

로컬 관리자 자격 증명의 이름과 암호를 보관할 자격 증명 개체 만들기

가상 머신에 대한 운영 체제 속성을 설정하려면 먼저 보안 문자열로 로컬 관리자 계정의 자격 증명을 제공해야 합니다. 이렇게 하려면 Get-Credential cmdlet을 사용합니다.

다음 cmdlet을 실행합니다. PowerShell 자격 증명 요청 창에 VM의 로컬 관리자 이름 및 암호를 입력해야 합니다.

$Credential = Get-Credential -Message "Type the name and password of the local administrator account."

가상 머신에 대한 운영 체제 속성을 설정합니다.

이제 Set-AzVMOperatingSystem cmdlet을 사용하여 가상 머신의 운영 체제 속성을 설정할 준비가 되었습니다.

  • 운영 체제 유형을 Windows로 설정합니다.
  • 가상 머신 에이전트를 설치해야 합니다.
  • cmdlet에서 자동 업데이트를 사용하도록 지정합니다.
  • 가상 머신 이름, 컴퓨터 이름 및 자격 증명에 대해 이전에 초기화한 변수를 지정합니다.

이 cmdlet을 실행하여 가상 머신의 운영 체제 속성을 설정합니다.

$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine `
   -Windows -ComputerName $ComputerName -Credential $Credential `
   -ProvisionVMAgent -EnableAutoUpdate

가상 머신에 네트워크 인터페이스를 추가합니다.

다음으로, Add-AzVMNetworkInterface cmdlet을 사용하여 이전에 정의한 변수를 사용하는 네트워크 인터페이스를 추가합니다.

다음 cmdlet을 실행하여 가상 머신의 네트워크 인터페이스를 설정합니다.

$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id

가상 머신에서 사용할 디스크의 Blob Storage 위치 설정

다음으로, 이전에 정의한 변수를 사용하여 VM 디스크의 Blob Storage 위치를 설정합니다.

이 cmdlet을 실행하여 Blob Storage 위치를 설정합니다.

$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"

가상 머신에 대한 운영 체제 디스크 속성을 설정합니다.

다음으로 Set-AzVMOSDisk cmdlet을 사용하여 가상 머신에 대한 운영 체제 디스크 속성을 설정합니다.

  • 가상 머신의 운영 체제를 이미지에서 가져오도록 지정합니다.
  • 캐싱을 읽기 전용으로 설정합니다(SQL Server가 동일한 디스크에 설치되므로).
  • VM 이름과 운영 체제 디스크에 대해 이전에 초기화한 변수를 지정합니다.

이 cmdlet을 실행하여 가상 시스템의 운영 체제 디스크 속성을 설정합니다.

$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name `
   $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

가상 머신에 대한 플랫폼 이미지 지정

마지막 구성 단계는 가상 머신에 대한 플랫폼 이미지를 지정하는 것입니다. 이 자습서의 경우 최신 SQL Server 2016 CTP 이미지를 사용합니다. Set-AzVMSourceImage cmdlet을 사용하여 이전에 정의한 변수와 함께 이 이미지를 사용합니다.

다음 cmdlet을 실행하여 가상 머신의 플랫폼 이미지를 지정합니다.

$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine `
   -PublisherName $PublisherName -Offer $OfferName `
   -Skus $Sku -Version $Version

SQL VM 만들기

이제 구성 단계를 완료했으므로 가상 머신을 만들 수 있습니다. New-AzVM cmdlet을 사용하여 정의한 변수로 가상 머신을 만듭니다.

VM을 만드는 데 몇 분 정도 걸릴 수 있습니다.

이 cmdlet을 실행하여 가상 머신을 만듭니다.

New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

가상 머신이 만들어집니다.

참고 항목

부팅 진단에 대한 오류가 발생하면 무시할 수 있습니다. 가상 머신의 디스크에 대해 지정된 스토리지 계정이 Premium Storage 계정이기 때문에 부팅 진단을 위해 표준 스토리지 계정이 만들어집니다.

SQL IaaS 에이전트 확장 설치하기

SQL Server 가상 머신은 SQL Server IaaS 에이전트 확장을 사용하여 자동화된 관리 기능을 지원합니다. 확장을 통해 SQL Server를 등록하려면 가상 머신을 만든 후 New-AzSqlVM 명령을 실행합니다. SQL Server VM에 맞는 라이선스 유형을 지정하고 Azure 하이브리드 혜택을 통해 종량제 또는 BYOL 중 하나를 선택합니다. 라이선스에 대한 자세한 내용은 라이선싱 모델을 참조하세요.

New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

확장에 등록하는 세 가지 방법이 있습니다.

VM 중지 또는 제거

계속해서 VM을 실행하지 않아도 되는 경우 사용 중이 아닌 VM을 중지하여 불필요한 요금을 방지할 수 있습니다. 다음 명령은 VM을 중지하지만 나중에 사용할 수 있도록 유지합니다.

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

Remove-AzResourceGroup 명령을 사용하여 가상 머신과 연결된 모든 리소스를 영구적으로 삭제할 수도 있습니다. 그러면 가상 머신도 영구적으로 삭제되므로 이 명령을 사용할 때는 주의해야 합니다.

예제 스크립트

다음 스크립트에는 이 자습서의 전체 PowerShell 스크립트가 포함되어 있습니다. Connect-AzAccountSelect-AzSubscription 명령과 함께 사용할 Azure 구독을 이미 설정했다고 가정합니다.

# Variables

## Global
$Location = "SouthCentralUS"
$ResourceGroupName = "sqlvm2"

## Storage
$StorageName = $ResourceGroupName + "storage"
$StorageSku = "Premium_LRS"

## Network
$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$TCPIPAllocationMethod = "Dynamic"
$DomainName = $ResourceGroupName

##Compute
$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"

##Image
$PublisherName = "MicrosoftSQLServer"
$OfferName = "SQL2017-WS2016"
$Sku = "SQLDEV"
$Version = "latest"

# Resource Group
New-AzResourceGroup -Name $ResourceGroupName -Location $Location

# Storage
$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName -SkuName $StorageSku -Kind "Storage" -Location $Location

# Network
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix
$VNet = New-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig
$PublicIp = New-AzPublicIpAddress -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName
$NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
$NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule"  -Protocol Tcp -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $Location -Name $NsgName -SecurityRules $NsgRuleRDP,$NsgRuleSQL
$Interface = New-AzNetworkInterface -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id -NetworkSecurityGroupId $Nsg.Id

# Compute
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$Credential = Get-Credential -Message "Type the name and password of the local administrator account."
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate #-TimeZone = $TimeZone
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id
$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage

# Image
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version

# Create the VM in Azure
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine

# Add the SQL IaaS Agent Extension, and choose the license type
New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType <PAYG/AHUB> 

다음 단계

가상 머신이 만들어지면 다음을 수행할 수 있습니다.