次の方法で共有


PowerShell を使用した SQL Server VM の作成ガイド

適用対象: Azure VM 上の SQL Server

このガイドでは、PowerShell を使用して Azure Virtual Machines (VM) 上に SQL Server を作成するためのオプションについて説明します。 既定値に依存する、合理化された Azure PowerShell の例については、「Azure VM 上の SQL Server の PowerShell クイックスタート」を参照してください。また、エンドツーエンドのスクリプトについては、「PowerShell スクリプトを使用して SQL Server VM を作成する」を参照してください。

前提条件

このガイドを完了するには、次のものが必要です。

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • 最新バージョンの Azure PowerShell

Note

この記事では、Azure と対話するために推奨される PowerShell モジュールである Azure Az PowerShell モジュールを使用します。 Az PowerShell モジュールの使用を開始するには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

変数の定義

値を再利用してスクリプトの作成を簡略化するには、まず、変数の数を定義します。 パラメーターの値は適宜変更してください。ただし、指定した値に変更を加える際は、名前の長さや特殊文字に関連した制限に注意してください。

まず、スクリプト全体で使用するパラメーター (場所、リソース グループの名前、使用する SQL Server イメージとストレージ アカウント、ネットワークと仮想マシンのプロパティなど) を定義します。

場所とリソース グループ

SQL Server VM と関連リソースを作成するデータ領域、リソース グループ、サブスクリプションを定義します。

必要に応じて変更してから、以下のコマンドレットを実行し、これらの変数を初期化します。

$SubscriptionId = "<Enter Subscription ID>"
$Location = "<Enter Location>"
$ResourceGroupName = "<Enter Resource Group Name>"
$userName = "<Enter User Name for the virtual machine"

ストレージのプロパティ

ストレージ アカウントと、仮想マシンで使用するストレージの種類を定義します。

必要に応じて変更してから、以下のコマンドレットを実行し、これらの変数を初期化します。 運用環境のワークロードには Premium SSD を使用することをお勧めします。

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

Note

ストレージ アカウント名の長さは 3 文字から 24 文字で、数字と小文字のみを使用する必要があります。そのため、リソース グループ名に特殊文字がないことを確認するか、ストレージ アカウント名を $ResourceGroupName とは異なる名前に変更してください。

ネットワークのプロパティ

仮想マシンのネットワークで使用するプロパティを定義します。

  • ネットワーク インターフェイス
  • TCP/IP の割り当て方法
  • 仮想ネットワーク名
  • 仮想サブネット名
  • 仮想ネットワークの IP アドレスの範囲
  • サブネットの IP アドレスの範囲
  • パブリック ドメイン名のラベル

必要に応じて変更してから、このコマンドレットを実行し、これらの変数を初期化します。

$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

仮想マシン プロパティ

次のプロパティを定義します。

  • 仮想マシン名
  • コンピューター名
  • 仮想マシンのサイズ
  • 仮想マシンに使用するオペレーティング システムのディスク名

必要に応じて変更してから、このコマンドレットを実行し、これらの変数を初期化します。

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

SQL Server イメージを選択します。

Azure portal では利用できない SQL Server の古いイメージを、PowerShell を使ってデプロイできます。

仮想マシンに使用するイメージは、以下の変数を使用して定義します。

  1. Get-AzVMImageOffer コマンドを使用して、すべての SQL Server イメージ オファリングを一覧表示し、Azure portal で現在使用可能なイメージと、PowerShell でのみデプロイできる古いイメージを一覧表示します。

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

    Note

    SQL Server 2008 および SQL Server 2008 R2 は延長サポート対象外となり、Azure Marketplace から利用できなくなります。

  2. Get-AzVMImageSku を使用して、お使いのオファーで使用可能なエディションを一覧表示します。

    Get-AzVMImageSku -Location $Location -Publisher 'MicrosoftSQLServer' -Offer $OfferName | Select Skus
    

このチュートリアルでは、Windows Server 2022 の SQL Server 2022 Developer エディション (SQLDEV-GEN2) を使用します。 Developer エディションはテストと開発のために無料でライセンスされます。VM を実行するコストのみを支払います。

$OfferName = "SQL2022-WS2022"
$PublisherName = "MicrosoftSQLServer"
$Version = "latest"
$Sku = "SQLDEV-GEN2"
$License = 'PAYG'

# Define a credential object
$SecurePassword = ConvertTo-SecureString '<strong password>' `
   -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)

リソース グループを作成する

PowerShell を開き、Connect-AzAccount コマンドを実行して Azure アカウントへのアクセスを確立し、Set-AzContext でサブスクリプション コンテキストを設定します。 メッセージが表示されたら、資格情報を入力します。 Azure ポータルへのサインインに使用しているものと同じ電子メールとパスワードを使用します。

サブスクリプション コンテキストを確立した後、最初に作成するオブジェクトはリソース グループです。 Connect-AzAccount コマンドを使用して Azure に接続し、Set-AzContext を使用してサブスクリプション コンテキストを設定します。 New-AzResourceGroup コマンドレットを使用して、Azure リソース グループとそのリソースを作成します。 前に初期化した、リソース グループの名前と場所の変数を指定します。

このコマンドレットを実行して Azure に接続し、サブスクリプション コンテキストを確立し、新しいリソース グループを作成します。


# Set subscription context
Connect-AzAccount
$subscriptionContextParams = @{
    SubscriptionId = $SubscriptionId
}
Set-AzContext @subscriptionContextParams

# Create a resource group
$resourceGroupParams = @{
    Name = $resourceGroupName
    Location = $Location
    Tag = @{Owner="SQLDocs-Samples"}
}
$resourceGroup = New-AzResourceGroup @resourceGroupParams

ストレージ アカウントの作成

仮想マシンには、オペレーティング システム ディスク用と SQL Server (データおよびログ ファイル) 用のストレージ リソースが必要となります。 単純化するために、両方の用途を兼ねた単一のディスクを作成します。 後から Add-Azure Disk コマンドレットを使用して追加のディスクを接続すると、SQL Server のデータ ファイルとログ ファイルを専用のディスクに格納できます。 New-AzStorageAccount コマンドレットを使用して、新しいリソース グループ内に標準ストレージ アカウントを作成します。 前に初期化した、ストレージ アカウント名、ストレージ SKU 名、および場所の変数を指定します。

このコマンドレットを実行して、新しいストレージ アカウントを作成します。

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

ヒント

ストレージ アカウントを作成するには数分かかることがあります。

ネットワーク リソースを作成する

ネットワーク接続を確保するためには、仮想マシンにさまざまなネットワーク リソースが必要となります。

  • 個々の仮想マシンに仮想ネットワークが必要となります。
  • 仮想ネットワークには少なくとも 1 つのサブネットが定義されている必要があります。
  • パブリックまたはプライベートの IP アドレスを持つネットワーク インターフェイスが定義されている必要があります。

仮想ネットワークのサブネット構成の作成

まず、仮想ネットワークのサブネット構成を作成します。 このチュートリアルでは、New-AzVirtualNetworkSubnetConfig コマンドレットを使用して、既定のサブネットを作成します。 前に初期化した、サブネット名とアドレス プレフィックスの変数を指定します。

Note

サブネット名とアドレス プレフィックス以外のプロパティもこのコマンドレットで定義できますが、このチュートリアルの範囲を超えるため、ここでは取り上げません。

このコマンドレットを実行して、仮想サブネットの構成を作成します。

# Create a subnet configuration
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix

仮想ネットワークの作成

次に、New-AzVirtualNetwork コマンドレットを使用して、新しいリソース グループ内に仮想ネットワークを作成します。 前に初期化した、名前、場所、およびアドレス プレフィックスの変数を指定します。 前の手順で定義したサブネット構成を使用します。

このコマンドレットを実行して、仮想ネットワークを作成します。

# Create a virtual network
$VNet = New-AzVirtualNetwork -Name $VNetName `
   -ResourceGroupName $ResourceGroupName -Location $Location `
   -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig

パブリック IP アドレスの作成

これで仮想ネットワークが定義されたので、仮想マシンへ接続するための IP アドレスを構成する必要があります。 このチュートリアルでは、インターネット接続をサポートするために、動的 IP アドレス指定を使用してパブリック IP アドレスを作成します。 New-AzPublicIpAddress コマンドレットを使用して、新しいリソース グループ内にパブリック IP アドレスを作成します。 前に初期化した、名前、場所、割り当て方法、および DNS ドメイン名ラベルの変数を指定します。

Note

パブリック IP アドレスのプロパティもこのコマンドレットで定義できますが、このチュートリアルの範囲を超えるため、ここでは取り上げません。 またプライベート アドレスや静的アドレスを作成することもできますが、このチュートリアルの範囲を超えるため、同様に説明を省略します。

このコマンドレットを実行して、パブリック IP アドレスを作成します。

# Create a public IP address
$PublicIp = New-AzPublicIpAddress -Name $InterfaceName `
-ResourceGroupName $ResourceGroupName -Location $Location `
-AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName

ネットワーク セキュリティ グループの作成

VM と SQL Server トラフィックを保護するには、ネットワーク セキュリティ グループを作成します。

  1. New-AzNetworkSecurityRuleConfig を使用して、RDP 接続を許可するリモート デスクトップ (RDP) の規則と TCP ポート 1433 でのトラフィックを許可する規則の 2 つのネットワーク セキュリティ グループ規則を作成します。 そうすることで、インターネット経由での SQL Server への接続が可能になります。

    # Create a network security group rule
    $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
    
  2. New-AzNetworkSecurityGroup を使用して、ネットワーク セキュリティ グループを作成します。

    # Create a network security group
    $Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
    -Location $Location -Name $NsgName `
    -SecurityRules $NsgRuleRDP,$NsgRuleSQL
    

ネットワーク インターフェイスの作成

これで、仮想マシンのネットワーク インターフェイスを作成する準備が整いました。 New-AzNetworkInterface コマンドレットを使用して、新しいリソース グループ内にネットワーク インターフェイスを作成します。 前に定義した名前、場所、サブネット、およびパブリック IP アドレスを指定します。

このコマンドレットを実行して、ネットワーク インターフェイスを作成します。

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

VM オブジェクトの構成

これでストレージとネットワーク リソースが定義されたので、仮想マシンのコンピューティング リソースを定義する準備が整いました。

  • 仮想マシンのサイズと、さまざまなオペレーティング システムのプロパティを指定します。
  • 前に作成したネットワーク インターフェイスを指定します。
  • BLOB ストレージを定義します。
  • オペレーティング システム ディスクを指定します。

SQL Server VM を作成する

SQL Server VM を作成するには、まず資格情報オブジェクトを作成してから、VM を作成します。

ローカル管理者の資格情報の名前とパスワードを保持する資格情報オブジェクトを作成する

仮想マシンのオペレーティング システムのプロパティを設定する前に、ローカル管理者アカウントの資格情報を、セキュリティで保護された文字列で指定する必要があります。 ここでは、Get-Credential コマンドレットを使用します。

次のコマンドレットを実行します。 PowerShell の資格情報要求ウィンドウに、VM のローカル管理者名とパスワードを入力する必要があります。

# Define a credential object
$SecurePassword = ConvertTo-SecureString '<strong password>' `
   -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)

プロパティを定義して VM を作成する

これで、New-AzVMConfig を使用して仮想マシンのオペレーティング システムのプロパティを設定し、New-AzVM を使用して VM を作成し、Add-AzVMNetworkInterface コマンドレットを使用して、前に定義した変数を使用してネットワーク インターフェイスを追加する準備ができました。

サンプル スクリプトでは、次の処理を実行します。

  • 仮想マシン エージェントがインストールされる必要があります。
  • このコマンドレットで自動更新を有効にすることを指定します。
  • 前に初期化した、仮想マシン名、コンピューター名、および資格情報の変数を指定します。

このコマンドレットを実行し、仮想マシンのオペレーティング システムのプロパティを設定します。

# Create a virtual machine configuration
$VMName = $ResourceGroupName + "VM"
$VMConfig = New-AzVMConfig -VMName $VMName -VMSize $VMSize |
    Set-AzVMOperatingSystem -Windows -ComputerName $VMName -Credential $Cred -ProvisionVMAgent -EnableAutoUpdate |
    Set-AzVMSourceImage -PublisherName $PublisherName -Offer $OfferName -Skus $Sku  -Version $Version |
    Add-AzVMNetworkInterface -Id $Interface.Id

# Create the VM
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VMConfig

これで仮想マシンが作成されました。

Note

ブート診断に関するエラーが表示される場合、そのエラーは無視できます。 仮想マシンのディスク用に指定したストレージ アカウントは Premium Storage アカウントであるため、ブート診断用に Standard Storage アカウントが作成されることに注意してください。

SQL IaaS エージェント拡張機能をインストールする

SQL Server 仮想マシンでは、SQL Server IaaS エージェントの拡張機能を使用して自動管理機能をサポートします。 拡張機能に SQL Server を登録するには、仮想マシンが作成された後に、New-AzSqlVM コマンドを実行します。 SQL Server VM のライセンスの種類を指定するには、従量課金制 (PAYG)、Azure ハイブリッド特典によるライセンス持ち込み (AHUB)、ディザスター リカバリー (DR) を選択し、無償の DR レプリカ ライセンスをアクティブ化します。 ライセンスの詳細については、「ライセンス モデル」を参照してください。

SQL Server VM を SQL IaaS Agent 拡張機能に登録するには、まず、Register-AzResourceProvider を使用してリソース プロバイダーにサブスクリプションを登録し、その後 New-AzSqlVM を使用して SQL Server VM を SQL IaaS Agent 拡張機能に登録します。


# Register the SQL IaaS Agent extension to your subscription
Register-AzResourceProvider -ProviderNamespace Microsoft.SqlVirtualMachine

# Register SQL Server VM with the extension
New-AzSqlVM -Name $VMName -ResourceGroupName $ResourceGroupName -Location $Location `
-LicenseType $License

拡張機能に登録する方法は 3 つあります。

VM の停止または削除

VM を継続的に実行する必要がない場合は、使用中でないときに停止することで、不要な料金の発生を回避できます。 次のコマンドでは、VM を停止しますが、後から使用できるように残しておきます。

Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName

Remove-AzResourceGroup コマンドを使用して、仮想マシンに関連付けられているすべてのリソースを完全に削除することもできます。 そのようにすると仮想マシンも完全に削除されるため、このコマンドは注意して使用してください。

完全なスクリプト

エンド ツー エンドのエクスペリエンスを提供する完全な PowerShell スクリプトについては、「PowerShell を使用した Azure VM 上の SQL Server のデプロイ」を参照してください。

これで仮想マシンが作成され、以下のことを実行できます。