【生成AI活用】Visual Studio Subscription の $50 Azure クレジットで Windows Server + SQL Server 環境を構築する
はじめに
Visual Studio Subscription(Professional以上)には 毎月 $50 の Azure クレジットが付いてくる。
このクレジットを活用して、Windows Server 2022 + SQL Server 2022 環境をクラウド上に構築した。
オンプレでサーバーを調達・セットアップするのに比べて、30分〜1時間で同等の環境が手に入る。
しかもコストは平日 9:00-18:00 だけ動かせば $45/月 以内に収まり、$50 クレジットの範囲内で運用できる。
ローカルPCの SSMS から Azure VM 上の SQL Server に接続するところまで確認済み。
$50 クレジットの活用ポイント
- 経費精算が不要:クレジット内で完結するので会社への申請・承認が一切いらない
- サーバー調達コストゼロ:クレジットの範囲内なので実質無料
- 使った分だけ課金:VMを停止すればディスク代のみ、削除すればゼロ
- 平日 9:00-18:00 のみ動作:自動シャットダウンで月 $45 以内に抑える
- 検証・学習用途に最適:Developer ライセンスで SQL Server も無料で使える
個人で動かせる範囲なので、上司への稟議・経費申請・支払い処理など一切不要。
思い立ったその日に環境が手に入る。
この記事の使い方:AIに渡せばそのまま構築できる
この記事をそのまま Claude などの AI にコピペして渡すと、AI がコマンドを順番に実行して環境構築を完了させてくれる。
実際、この環境構築は Claude に手順書を渡して実行させた。エラーが出ても Claude が原因を分析して別のアプローチを試すため、人間はほぼ何もしなくていい。「詰まったポイント」として記載している6つのエラーも、すべて Claude が自力で突破している。
「この手順書通りに Azure 環境を構築してください」
+ この記事の内容を貼り付け
az CLI・Ansible・PowerShell コマンドがすべてコード付きで記載されているため、
AI が手順を読み取り、コマンドを実行・確認・エラー対応まで自律的にこなせる。
人間が行う操作は以下の2つだけ:
- az login(初回認証のみ)
- 最終確認(SSMSで接続できるか確認)
それ以外のリソース作成・VM構築・SQL Serverインストール・各種設定はAIが自動実行する。
効果と費用
効果
| 項目 | 従来(オンプレ) | 今回(Azure + AI) |
|---|---|---|
| 可用性 | ボロいPCは突然死する | Azureの冗長インフラで安定稼働 |
| 構築時間 | 数日〜1週間 | 30分〜1時間 |
| サーバー調達 | 発注・納期待ち | 即日 |
| 経費精算 | 必要 | 不要 |
| 稟議・承認 | 必要 | 不要 |
| 繰り返し構築 | 手順書を見ながら手作業 | 記事をAIに渡すだけ |
| 廃棄 | 処分手続きが必要 | コマンド1行で削除 |
オンプレの検証サーバーは古いPCを使い回していることが多く、突然ハードウェア障害で死ぬリスクがある。
Azure VM はデータセンターの冗長インフラ上で動くため、ハードウェア起因の障害とは無縁になる。
「昨日まで動いてたのに今朝起動しない」という事故がなくなるのは地味に大きい。
費用
| リソース | 費用 | 備考 |
|---|---|---|
| Windows Server 2022 | 無料 | VS Subscriptionクレジットで賄う |
| SQL Server 2022 | 無料 | Developer版(開発・検証用途) |
| SSMS | 無料 | — |
| Azure VM(Standard_D2s_v3) | 約$40/月 | 平日9:00-18:00のみ稼働 |
| ディスク + パブリックIP | 約$5/月 | — |
| 合計 | 約$45/月 | $50クレジット内に収まる |
VS Subscription のクレジットは使わなければ毎月消える。眠らせておくより活用した方がお得。
構成
ローカルPC(SSMS)
↓ SQL Server(1433)
Azure VM(Windows Server 2022)
- SQL Server 2022 Developer
- SSMS
↑ Ansible(WinRM 5986)
WSL2(Ansible実行環境)
前提条件
- Visual Studio Subscription(Professional以上)
- WSL2
- az CLI インストール済み
- Python 3.8以上
コスト目安
| リソース | サイズ | 月間コスト(平日9-18時のみ) |
|---|---|---|
| VM(Windows Server) | Standard_D2s_v3 | 約$40/月 |
| ディスク + パブリックIP | — | 約$5/月 |
| 合計 | 約$45/月($50クレジット内) |
ステップ1: Azure ログイン・サブスクリプション設定
az login
az account list --output table
az account set --subscription "<サブスクリプションID>"
ステップ2: リソースグループ作成
az group create \
--name rg-winserver-demo \
--location japaneast
ステップ3: 仮想ネットワーク作成
az network vnet create \
--resource-group rg-winserver-demo \
--name vnet-winserver \
--address-prefix 10.0.0.0/16 \
--subnet-name snet-winserver \
--subnet-prefix 10.0.1.0/24
ステップ4: NSG作成・ルール設定
az network nsg create \
--resource-group rg-winserver-demo \
--name nsg-winserver
# 自分のIPを確認
curl https://api4.ipify.org
# RDP(自分のIPのみ)
az network nsg rule create \
--resource-group rg-winserver-demo \
--nsg-name nsg-winserver \
--name allow-rdp \
--priority 1000 \
--protocol Tcp \
--destination-port-ranges 3389 \
--source-address-prefixes "<自分のIP>/32" \
--access Allow
# WinRM HTTPS(Ansible用・自分のIPのみ)
az network nsg rule create \
--resource-group rg-winserver-demo \
--nsg-name nsg-winserver \
--name allow-winrm \
--priority 1010 \
--protocol Tcp \
--destination-port-ranges 5986 \
--source-address-prefixes "<自分のIP>/32" \
--access Allow
# SQL Server(自分のIPのみ)
az network nsg rule create \
--resource-group rg-winserver-demo \
--nsg-name nsg-winserver \
--name allow-sqlserver \
--priority 1030 \
--protocol Tcp \
--destination-port-ranges 1433 \
--source-address-prefixes "<自分のIP>/32" \
--access Allow
ステップ5: Windows Server VM 作成
az vm create \
--resource-group rg-winserver-demo \
--name vm-winserver \
--image MicrosoftWindowsServer:WindowsServer:2022-datacenter:latest \
--size Standard_D2s_v3 \
--admin-username azureuser \
--admin-password "P@ssw0rd1234!" \
--vnet-name vnet-winserver \
--subnet snet-winserver \
--nsg nsg-winserver \
--public-ip-sku Standard
作成後にパブリックIPを確認:
az vm list-ip-addresses \
--resource-group rg-winserver-demo \
--name vm-winserver \
--output table
詰まったポイント①
--image Win2022Datacenterで実行するとJSONパースエラーが発生した。
フルURN形式MicrosoftWindowsServer:WindowsServer:2022-datacenter:latestを指定すること。
ステップ6: WinRM 有効化
WinRM の設定は難所になると思っていたが、Claude が
az vm run-commandで PowerShell を流す方法を選択し、一発で通した。証明書作成・リスナー登録・ファイアウォール設定まで1コマンドで完結する。
az vm run-command invoke \
--resource-group rg-winserver-demo \
--name vm-winserver \
--command-id RunPowerShellScript \
--scripts '
Enable-PSRemoting -Force
$cert = New-SelfSignedCertificate -DnsName $env:COMPUTERNAME -CertStoreLocation Cert:\LocalMachine\My
New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -CertificateThumbprint $cert.Thumbprint -Force
New-NetFirewallRule -Name "WinRM HTTPS" -DisplayName "WinRM HTTPS" -Enabled True -Direction Inbound -Protocol TCP -LocalPort 5986 -Action Allow
Write-Output "WinRM設定完了"
'
ステップ7: Ansible セットアップ(WSL2)
# pip3 が見つからない場合は先にインストール
sudo apt-get update && sudo apt-get install -y python3-pip
pip3 install ansible pywinrm
# Windowsコレクションのインストール
ansible-galaxy collection install ansible.windows
ansible-galaxy collection install chocolatey.chocolatey
詰まったポイント②
pip installはpip: command not foundになる。pip3を使うこと。
ステップ8: Ansible 接続確認
inventory.yml を作成:
all:
hosts:
winserver:
ansible_host: <パブリックIP>
ansible_user: azureuser
ansible_password: "P@ssw0rd1234!"
ansible_connection: winrm
ansible_winrm_transport: ntlm
ansible_winrm_port: 5986
ansible_winrm_scheme: https
ansible_winrm_server_cert_validation: ignore
接続確認:
ansible -i inventory.yml winserver -m ansible.windows.win_ping
成功時:
winserver | SUCCESS => {
"changed": false,
"ping": "pong"
}
ステップ9: SQL Server 2022 インストール
詰まったポイント③(重要) Ansible経由(WinRM/NTLMセッション)でChocolateyを実行すると、
SQL Server setup がAccess is denied (CryptographicException)で失敗する。原因:WinRMのNTLMセッションでは Windows DPAPI(暗号化API)が使えないため。
解決:
az vm run-command invokeを使う。これはSYSTEMコンテキストで動くため制限を回避できる。
az vm run-command invoke \
--resource-group rg-winserver-demo \
--name vm-winserver \
--command-id RunPowerShellScript \
--scripts "
Set-ExecutionPolicy Bypass -Scope Process -Force
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
choco install sql-server-2022 --yes --no-progress \`
--package-parameters '/SQLSYSADMINACCOUNTS:azureuser /IACCEPTSQLSERVERLICENSETERMS /ENU'
"
インストール完了後、再起動が必要な場合がある:
# Ansibleで再起動
ansible -i inventory.yml winserver -m ansible.windows.win_reboot
詰まったポイント④ 初回実行時に「再起動が必要」で SQL Server インストールが失敗した。
VMを再起動してから再実行すること。
ステップ10: SSMS インストール
az vm run-command invoke \
--resource-group rg-winserver-demo \
--name vm-winserver \
--command-id RunPowerShellScript \
--scripts "choco install sql-server-management-studio --yes --no-progress"
ステップ11: SQL Server をローカルPCから接続できるように設定
SQL Server インストール直後は以下の2つが無効になっている。
1. TCP/IP の有効化
デフォルトではSQL ServerはNamed Pipesのみ。TCP/IPをレジストリで有効化する。
az vm run-command invoke \
--resource-group rg-winserver-demo \
--name vm-winserver \
--command-id RunPowerShellScript \
--scripts "
\$regPath = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp'
Set-ItemProperty -Path \$regPath -Name 'Enabled' -Value 1
Restart-Service MSSQLSERVER -Force
Start-Sleep 8
netstat -an | findstr ':1433'
"
0.0.0.0:1433 LISTENING が表示されればOK。
詰まったポイント⑤ ポート1433を開けてもSSMSから接続できなかった。
SQL ServerのTCP/IPプロトコルがデフォルトで無効なため。レジストリで有効化が必要。
2. 混合認証モード(Mixed Mode)の有効化
デフォルトはWindows認証のみ。SQL Server認証も有効にする。
az vm run-command invoke \
--resource-group rg-winserver-demo \
--name vm-winserver \
--command-id RunPowerShellScript \
--scripts "
\$regPath = 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer'
Set-ItemProperty -Path \$regPath -Name 'LoginMode' -Value 2
Restart-Service MSSQLSERVER -Force
Start-Sleep 8
"
3. SQL Serverログインの作成
RunCommandはSYSTEMコンテキストで動作するため、まずSYSTEMをsysadminに追加する。
az vm run-command invoke \
--resource-group rg-winserver-demo \
--name vm-winserver \
--command-id RunPowerShellScript \
--scripts "
# シングルユーザーモードでSYSTEMをsysadminに追加
Stop-Service MSSQLSERVER -Force
Start-Sleep 3
\$sqlProcess = Start-Process -FilePath 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' -ArgumentList '-m -s MSSQLSERVER' -PassThru
Start-Sleep 10
sqlcmd -S '.' -Q \"CREATE LOGIN [NT AUTHORITY\SYSTEM] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [NT AUTHORITY\SYSTEM];\" 2>&1
Stop-Process -Id \$sqlProcess.Id -Force
Start-Sleep 3
Start-Service MSSQLSERVER
Start-Sleep 8
# SQL Serverログインを作成
sqlcmd -S '.' -Q \"IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name='azureuser') CREATE LOGIN azureuser WITH PASSWORD='P@ssw0rd1234!'; ALTER SERVER ROLE sysadmin ADD MEMBER azureuser;\" 2>&1
Write-Output 'Done'
"
詰まったポイント⑥ エラー18456(Login failed)が発生した。
SQL Server認証モードがWindows認証のみになっているのが原因。
Mixed Mode への変更 + SQLログイン作成が必要。
RunCommandはSYSTEM権限で動くため、いきなりsqlcmdでログインを作ろうとしても権限エラーになる。
シングルユーザーモード経由でSYSTEMをsysadminに追加してから作成すること。
ステップ12: 自動シャットダウン設定(コスト節約)
az vm auto-shutdown \
--resource-group rg-winserver-demo \
--name vm-winserver \
--time 1800 \
--timezone "Tokyo Standard Time"
接続情報
Windows Server(RDP)
| 項目 | 値 |
|---|---|
| 接続先 | <パブリックIP> |
| ポート | 3389 |
| ユーザー名 | azureuser |
| パスワード | P@ssw0rd1234! |
Windowsの「リモートデスクトップ接続」で <パブリックIP> を入力して接続する。
SQL Server(SSMS)
| 項目 | 値 |
|---|---|
| サーバー名 | <パブリックIP>,1433 |
| 認証 | SQL Server 認証 |
| ログイン | azureuser |
| パスワード | P@ssw0rd1234! |
詰まったポイントまとめ
| # | 症状 | 原因 | 解決 |
|---|---|---|---|
| 1 | VMイメージのJSONパースエラー |
Win2022Datacenter エイリアスが壊れている |
フルURN形式を使う |
| 2 | pip: command not found |
WSL2では pip3 を使う |
pip3 install に変更 |
| 3 | SQL Server インストールが Access is denied で失敗 |
WinRM/NTLMセッションでDPAPIが使えない |
az vm run-command(SYSTEMコンテキスト)で実行 |
| 4 | SQL Server インストールが「再起動が必要」で失敗 | Chocolateyインストール後にペンディング再起動が残っていた | VMを再起動してからリトライ |
| 5 | 1433ポート開放後もSSMSから接続できない | SQL ServerのTCP/IPが無効(デフォルト) | レジストリで Enabled=1 に設定して再起動 |
| 6 | エラー18456(Login failed) | SQL Server認証モードがWindows認証のみ | Mixed Mode有効化 + SQLログイン作成 |
リソース削除(検証後)
az group delete \
--name rg-winserver-demo \
--yes \
--no-wait
まとめ
Visual Studio Subscription の $50 クレジットを活用することで、
オンプレのサーバー調達・セットアップにかかる数日〜1週間の作業を 30分〜1時間 に短縮できた。
コスト面でも平日 9:00-18:00 のみ稼働させれば $45/月 に収まるため、毎月のクレジット内で運用可能。
SQL Server Developer ライセンスも含めて 実質無料 で検証・学習環境を持てる。
技術面では、SQL Server のインストールは WinRM 経由では DPAPI の制限があるため、
az vm run-command(SYSTEMコンテキスト)で実行する必要がある点が最大のハマりポイントだった。
経費精算なし・稟議なし・申請なし。VS Subscription を持っているなら、クレジットを眠らせておくのはもったいない。



