【2025年最新】マイクラ Azure VPS設定完全ガイド!B1sプランから本格運用まで

【2025年最新】マイクラ Azure VPS設定完全ガイド!B1sプランから本格運用まで

2025年7月最新情報

Azure Network Security Group 出典: Microsoft Learn

Microsoft Azureでマイクラサーバーを運用したいけれど、複雑な設定に戸惑っていませんか?Azure VPSは世界レベルのインフラを提供する一方で、Network Security GroupやIOPS設定など、独特の仕様があります。この記事では、B1sプランでの小規模運用から、本格的な大規模サーバーまで、Azure特有の設定を完全解説します!

目次

1. Azure VPS の基礎知識とメリット

Azure Virtual Machines の特徴

Azure VPSの強み:

  • 世界規模のインフラ: 60+リージョンでの展開
  • エンタープライズグレード: 99.95%のSLA保証
  • 柔軟なスケーリング: 需要に応じた自動拡張
  • 豊富なセキュリティ機能: 多層防御システム
  • 統合管理: Azure Portalでの一元管理

マイクラサーバーでのAzureメリット

技術的優位性:

低遅延ネットワーク: Azure Accelerated Networking
高速ストレージ: Premium SSD with IOPS
自動化: ARM テンプレートでの構築
監視: Azure Monitor による24時間監視
災害復旧: Azure Site Recovery

コスト効率:

  • 従量課金制による柔軟な課金
  • リザーブドインスタンスで最大72%割引
  • ハイブリッド特典による既存ライセンス活用

2. B1sプランでの小規模サーバー構築

B1sプランの仕様と制限

B1sプランスペック:

vCPU: 1コア
メモリ: 1GB
ストレージ: Premium SSD 対応
ネットワーク: 制限あり(640 Mbps)
月額料金: 約¥1,200-1,500

適用範囲:

  • 2-5人の小規模サーバー
  • バニラサーバー(MODなし)
  • テスト・開発環境
  • 学習目的

Azure Portal での VM作成

ステップ1:仮想マシンの作成

1. Azure Portalにログイン
2. "仮想マシン" → "作成"
3. 基本設定:
   - リソースグループ: minecraft-rg
   - 仮想マシン名: minecraft-server
   - リージョン: Japan East
   - イメージ: Ubuntu Server 22.04 LTS
   - サイズ: Standard_B1s

ステップ2:認証設定

認証の種類: SSH公開キー
ユーザー名: azureuser
SSH公開キー: 新しいキーペアの生成
キーペア名: minecraft-server_key

ステップ3:ディスク設定

OS ディスクの種類: Premium SSD
暗号化の種類: 既定値
削除オプション: VM と一緒に削除

初期セットアップスクリプト

自動セットアップ用 cloud-init:

Copy#cloud-config
package_update: true
packages:
  - openjdk-21-jre-headless
  - screen
  - htop
  - unzip

write_files:
  - path: /opt/minecraft/start.sh
    content: |
      #!/bin/bash
      cd /opt/minecraft
      screen -dmS minecraft java -Xms512M -Xmx896M -jar server.jar nogui
    permissions: '0755'
    
  - path: /opt/minecraft/server.properties
    content: |
      server-port=25565
      gamemode=survival
      difficulty=normal
      max-players=5
      view-distance=6
      simulation-distance=4
      enable-command-block=false
      white-list=false
      motd=Azure Minecraft Server

runcmd:
  - mkdir -p /opt/minecraft
  - cd /opt/minecraft
  - wget https://piston-data.mojang.com/v1/objects/4707d00eb834b446575d89a61a11b5d548d8c001/server.jar
  - echo "eula=true" > eula.txt
  - chown -R azureuser:azureuser /opt/minecraft

3. Network Security Group 設定詳解

Network Security Group Configuration 出典: Microsoft Learning

NSGの作成と基本設定

NSG作成手順:

1. Azure Portal → "ネットワーク セキュリティ グループ"
2. "作成" をクリック
3. 基本設定:
   - リソースグループ: minecraft-rg
   - 名前: minecraft-nsg
   - リージョン: Japan East

マイクラサーバー用セキュリティルール

受信セキュリティルール設定:

1. Minecraft サーバーアクセス:

名前: Allow-Minecraft
優先度: 100
ソース: Any
ソースポート範囲: *
宛先: Any
宛先ポート範囲: 25565
プロトコル: TCP
アクション: 許可

2. SSH アクセス(管理用):

名前: Allow-SSH
優先度: 110
ソース: My IP address
ソースポート範囲: *
宛先: Any
宛先ポート範囲: 22
プロトコル: TCP
アクション: 許可

3. Query ポート(サーバー情報取得):

名前: Allow-Query
優先度: 120
ソース: Any
ソースポート範囲: *
宛先: Any
宛先ポート範囲: 25565
プロトコル: UDP
アクション: 許可

高度なセキュリティ設定

地域制限ルール(推奨):

Copy# PowerShell スクリプト例
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName "minecraft-rg" -Name "minecraft-nsg"

# 日本国内のみアクセス許可
$rule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-Japan-Only" `
  -Protocol TCP `
  -Direction Inbound `
  -Priority 90 `
  -SourceAddressPrefix "223.252.0.0/16,210.251.0.0/16" `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 25565 `
  -Access Allow

$nsg.SecurityRules.Add($rule)
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg

時間制限アクセス(Application Security Groups使用):

1. Application Security Group 作成
2. 時間ベースのアクセス制御
3. 自動化スクリプトによるルール更新

4. 自動バックアップシステム構築

Azure Backup の設定

Recovery Services コンテナー作成:

1. Azure Portal → "Recovery Services コンテナー"
2. "作成" をクリック
3. 基本設定:
   - コンテナー名: minecraft-backup-vault
   - リソースグループ: minecraft-rg
   - リージョン: Japan East

VM バックアップポリシー設定:

Copy{
  "name": "MinecraftDailyBackup",
  "properties": {
    "backupManagementType": "AzureIaasVM",
    "schedulePolicy": {
      "schedulePolicyType": "SimpleSchedulePolicy",
      "scheduleRunFrequency": "Daily",
      "scheduleRunTimes": ["2024-01-01T03:00:00.000Z"],
      "scheduleWeeklyFrequency": 0
    },
    "retentionPolicy": {
      "retentionPolicyType": "LongTermRetentionPolicy",
      "dailySchedule": {
        "retentionTimes": ["2024-01-01T03:00:00.000Z"],
        "retentionDuration": {
          "count": 30,
          "durationType": "Days"
        }
      },
      "weeklySchedule": {
        "daysOfTheWeek": ["Sunday"],
        "retentionTimes": ["2024-01-01T03:00:00.000Z"],
        "retentionDuration": {
          "count": 12,
          "durationType": "Weeks"
        }
      }
    }
  }
}

カスタム バックアップスクリプト

Minecraft データ専用バックアップ:

Copy#!/bin/bash
# minecraft_backup.sh

# Azure CLI認証
az login --identity

# 設定
STORAGE_ACCOUNT="minecraftbackup"
CONTAINER_NAME="world-backups"
MINECRAFT_DIR="/opt/minecraft"
DATE=$(date +%Y%m%d_%H%M%S)

# Minecraft サーバー停止
echo "Stopping Minecraft server..."
screen -S minecraft -X stuff "save-all$(echo -ne '\r')"
sleep 10
screen -S minecraft -X stuff "stop$(echo -ne '\r')"
sleep 30

# ワールドデータの圧縮
echo "Creating backup archive..."
tar -czf "/tmp/world_backup_$DATE.tar.gz" -C $MINECRAFT_DIR world

# Azure Blob Storage にアップロード
echo "Uploading to Azure Storage..."
az storage blob upload \
  --account-name $STORAGE_ACCOUNT \
  --container-name $CONTAINER_NAME \
  --name "world_backup_$DATE.tar.gz" \
  --file "/tmp/world_backup_$DATE.tar.gz"

# 古いバックアップ削除(30日以上前)
OLD_DATE=$(date -d '30 days ago' +%Y%m%d)
az storage blob list \
  --account-name $STORAGE_ACCOUNT \
  --container-name $CONTAINER_NAME \
  --query "[?properties.lastModified < '$OLD_DATE'].name" \
  --output tsv | \
  xargs -I {} az storage blob delete \
    --account-name $STORAGE_ACCOUNT \
    --container-name $CONTAINER_NAME \
    --name {}

# Minecraft サーバー再起動
echo "Restarting Minecraft server..."
cd $MINECRAFT_DIR
screen -dmS minecraft java -Xms512M -Xmx896M -jar server.jar nogui

# 一時ファイル削除
rm "/tmp/world_backup_$DATE.tar.gz"

echo "Backup completed: world_backup_$DATE.tar.gz"

Azure Automation での自動化

Automation Account 設定:

Copy# Runbook スクリプト例
param(
    [string]$ResourceGroupName = "minecraft-rg",
    [string]$VMName = "minecraft-server"
)

# 認証
$connectionName = "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
Connect-AzAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint

# カスタムバックアップスクリプト実行
$ScriptBlock = {
    /opt/scripts/minecraft_backup.sh
}

Invoke-AzVMRunCommand -ResourceGroupName $ResourceGroupName -VMName $VMName -CommandId 'RunShellScript' -ScriptString $ScriptBlock

5. SSD IOPS最適化テクニック

Azure Disk の種類と性能

ディスクタイプ比較:

ディスクタイプIOPSスループット価格/月推奨用途
Standard HDD50060 MB/s¥500テスト環境
Standard SSD6,000750 MB/s¥1,500小規模サーバー
Premium SSD20,000900 MB/s¥3,000中規模サーバー
Ultra SSD160,0004,000 MB/s¥10,000+大規模サーバー

Premium SSD 最適化設定

ディスク設定最適化:

Copy{
  "diskSizeGB": 128,
  "diskIOPSReadWrite": 500,
  "diskMBpsReadWrite": 100,
  "caching": "ReadWrite",
  "writeAcceleratorEnabled": false,
  "tier": "P10"
}

Linux ファイルシステム最適化:

Copy# /etc/fstab 最適化
/dev/sdc1 /opt/minecraft ext4 defaults,noatime,discard 0 2

# I/O スケジューラー最適化
echo mq-deadline > /sys/block/sdc/queue/scheduler

# Read-ahead 設定
blockdev --setra 4096 /dev/sdc1

Ultra SSD 構成(大規模サーバー用)

Ultra SSD 作成スクリプト:

Copy# Ultra SSD ディスク作成
$diskConfig = New-AzDiskConfig `
  -Location "Japan East" `
  -DiskSizeGB 1024 `
  -DiskIOPSReadWrite 10000 `
  -DiskMBpsReadWrite 500 `
  -AccountType "UltraSSD_LRS" `
  -CreateOption "Empty"

$disk = New-AzDisk `
  -ResourceGroupName "minecraft-rg" `
  -DiskName "minecraft-ultra-disk" `
  -Disk $diskConfig

# VM にアタッチ
$vm = Get-AzVM -ResourceGroupName "minecraft-rg" -Name "minecraft-server"
$vm = Add-AzVMDataDisk -VM $vm -Name "minecraft-ultra-disk" -CreateOption "Attach" -ManagedDiskId $disk.Id -Lun 1
Update-AzVM -ResourceGroupName "minecraft-rg" -VM $vm

6. Azure独特の運用ベストプラクティス

Azure Monitor による監視

カスタムメトリクス設定:

Copy#!/bin/bash
# azure_metrics.sh

# Azure Monitor エージェント設定
curl -sL https://aka.ms/InstallAzureMonitoringAgent | bash

# カスタムメトリクス送信
TPS=$(screen -S minecraft -p 0 -X stuff "forge tps$(echo -ne '\r')" | grep "TPS" | awk '{print $2}')
PLAYERS=$(screen -S minecraft -p 0 -X stuff "list$(echo -ne '\r')" | grep "players online" | awk '{print $3}')

# メトリクス送信
curl -X POST https://dc.services.visualstudio.com/v2/track \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Microsoft.ApplicationInsights.Event",
    "time": "'$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)'",
    "data": {
      "baseType": "EventData",
      "baseData": {
        "name": "MinecraftMetrics",
        "properties": {
          "TPS": "'$TPS'",
          "Players": "'$PLAYERS'"
        }
      }
    }
  }'

Application Insights ダッシュボード設定:

Copy{
  "widgets": [
    {
      "name": "TPS Trend",
      "type": "chart",
      "query": "customEvents | where name == 'MinecraftMetrics' | extend TPS = toreal(customDimensions.TPS) | summarize avg(TPS) by bin(timestamp, 5m)"
    },
    {
      "name": "Player Count",
      "type": "chart", 
      "query": "customEvents | where name == 'MinecraftMetrics' | extend Players = toint(customDimensions.Players) | summarize max(Players) by bin(timestamp, 1h)"
    }
  ]
}

Azure DevOps によるCI/CD

パイプライン設定例:

Copy# azure-pipelines.yml
trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  resourceGroup: 'minecraft-rg'
  vmName: 'minecraft-server'

stages:
- stage: Deploy
  jobs:
  - job: UpdateServer
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'minecraft-service-connection'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          # サーバー停止
          az vm run-command invoke \
            --resource-group $(resourceGroup) \
            --name $(vmName) \
            --command-id RunShellScript \
            --scripts "screen -S minecraft -X stuff 'stop'"
          
          # サーバーファイル更新
          az vm run-command invoke \
            --resource-group $(resourceGroup) \
            --name $(vmName) \
            --command-id RunShellScript \
            --scripts "cd /opt/minecraft && wget -O server.jar https://piston-data.mojang.com/v1/objects/latest/server.jar"
          
          # サーバー起動
          az vm run-command invoke \
            --resource-group $(resourceGroup) \
            --name $(vmName) \
            --command-id RunShellScript \
            --scripts "cd /opt/minecraft && screen -dmS minecraft java -Xms512M -Xmx896M -jar server.jar nogui"

7. コスト最適化戦略

Azure Cost Management の活用

コスト予算アラート設定:

Copy{
  "name": "minecraft-budget",
  "properties": {
    "category": "Cost",
    "amount": 5000,
    "timeGrain": "Monthly",
    "timePeriod": {
      "startDate": "2025-01-01T00:00:00.000Z"
    },
    "notifications": {
      "Actual_GreaterThan_80_Percent": {
        "enabled": true,
        "operator": "GreaterThan",
        "threshold": 80,
        "contactEmails": ["admin@example.com"],
        "contactRoles": ["Owner"]
      }
    }
  }
}

スケジュールベースの自動停止

自動停止/開始スクリプト:

Copy# 自動停止 Runbook
param(
    [string]$ResourceGroupName = "minecraft-rg",
    [string]$VMName = "minecraft-server"
)

# 接続
$connectionName = "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
Connect-AzAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint

# プレイヤー数確認
$PlayerCheck = Invoke-AzVMRunCommand -ResourceGroupName $ResourceGroupName -VMName $VMName -CommandId 'RunShellScript' -ScriptString 'screen -S minecraft -p 0 -X stuff "list$(echo -ne "\r")" && sleep 2 && screen -S minecraft -X hardcopy /tmp/output && cat /tmp/output | grep "players online"'

# プレイヤーがいない場合のみ停止
if ($PlayerCheck.Value -match "0 of .* players online") {
    Stop-AzVM -ResourceGroupName $ResourceGroupName -Name $VMName -Force
    Write-Output "VM stopped due to no active players"
} else {
    Write-Output "Players online, VM remains running"
}

Reserved Instances とSpot Instances

リザーブドインスタンス計算:

B1s従量課金: ¥1,200/月 × 12ヶ月 = ¥14,400/年
B1s 1年Reserved: ¥10,080/年 (30%割引)
B1s 3年Reserved: ¥7,200/年 (50%割引)

Spot Instance 設定(開発用):

Copy{
  "priority": "Spot",
  "evictionPolicy": "Deallocate",
  "maxPrice": 0.50,
  "spotRestorePolicy": {
    "enabled": true,
    "restoreTimeout": "PT1H"
  }
}

8. Azure vs 他社VPS比較

包括的比較

項目Azure B1sXServer VPSConoHa VPSカゴヤ VPS
月額料金¥1,200¥830¥682¥550
CPU1コア2コア1コア1コア
メモリ1GB2GB1GB1GB
ストレージPremium SSDNVMe SSDSSDSSD
ネットワーク制限あり無制限無制限無制限
SLA99.95%99.99%99.99%99.95%
グローバル展開
エンタープライズ機能

Azure推奨シナリオ

Azureが最適な場合:

  • 海外プレイヤーが多い
  • エンタープライズ級の可用性が必要
  • 他のAzureサービスとの連携
  • 高度な監視・分析が必要
  • コンプライアンス要件が厳しい

他社VPSが最適な場合:

  • 国内プレイヤーのみ
  • シンプルな構成で十分
  • コスト最優先
  • 技術サポートを重視

推奨構成まとめ

小規模サーバー(2-5人):

中規模サーバー(5-15人):

大規模サーバー(15人以上):

  • Azure: D2s_v3 + Ultra SSD
  • 代替: ConoHa 8GBプラン
  • 推奨ConoHa for GAME

まとめ

Azure VPSは世界レベルのインフラと豊富な機能を提供しますが、設定の複雑さとコストが課題となる場合があります。Network Security Groupによる高度なセキュリティ、Azure Backupによる企業レベルの災害復旧、Premium SSDによる高性能ストレージなど、エンタープライズ級の機能が魅力です。

Azure VPS選択のポイント:

  1. グローバル展開: 海外プレイヤーとの低遅延通信
  2. エンタープライズ機能: 高度な監視・バックアップ・セキュリティ
  3. スケーラビリティ: 需要に応じた柔軟な拡張
  4. 統合性: 他のAzureサービスとのシームレス連携
  5. コンプライアンス: 厳格なデータ保護要件への対応

ただし、国内での小中規模運用では、エックスサーバー VPS for GameConoHa for GAMEカゴヤ CLOUD VPSの方がコストパフォーマンスに優れる場合が多いのも事実です。

2025年のマイクラサーバー運用では、要件に応じた適切なプラットフォーム選択が成功の鍵となります。この記事を参考に、最適なインフラを選択してください!


※本記事は2025年7月時点の情報に基づいて執筆されています。Azureの料金体系やサービス内容は変更される可能性があるため、最新情報は公式サイトをご確認ください。

参考リンク:

免責事項: Azure VPSの設定は複雑で、誤った設定により予期しない料金が発生する可能性があります。必ず料金アラートを設定し、テスト環境で十分検証してから本番環境に適用してください。重要なデータは複数の場所にバックアップを取ってください。

目次