自宅マイクラサーバ をAzureに移行
こんにちわ🎄
この記事は、Azure Advent Calnedar 2023 の 12/7 の記事になります。
はじめに
自宅で運用している(利用ユーザーは私と子どもの2名)をクラウドに載せたら、どのような構成になるか、移行方法を調べるがてら試してみました。
要件の整理
自宅では、Java版(私)と統合版(子ども)で遊んでおり、双方から遊べるという要件があります。これを実現するために Geyser というプラグインを入れて、統合版から Java 版のサーバにアクセスできるようにしてます。
そのため、通信要件として Java 版のクライアントからは 25565/TCP
、統合版のクライアントからは 19132/UDP
を許可する必要があります。
また、World データを移行する必要があります。
拠点の村人さんたち 「フゥーン、Azure ってどんなところなんだろう」
Microsoft Copilot for Azureで相談
移行先の技術選定については、現在プライベートプレビュー中の Microsoft Copilot for Azure で相談してみたいと思います。
なお現在利用に際しては、プライベートプレビューへの参加申請と、以下の制限があります。
参考; 現在の制限 - Microsoft Copilot for Azure (プレビュー) 機能
現在の制限事項に留意してください。
・現在、各ユーザーの対話は、会話ごとに 10 回の質問、1 日に 5 回の会話に制限されています。
・一覧を表示する一部の応答は、上位 5 項目に制限されます。
・一部のタスクとクエリでは、リソースの名前を使用できません。また、Azure リソース ID を指定する必要があります。
・Microsoft Copilot for Azure (プレビュー) は現在、英語でのみ使用できます。
まずはざっくり相談してみました。
I want to migrate Minecraft server (Docker container) running on-premises. It is necessary to allow 25565/TCP and 19132/UDP as network requirement. What should I do?
おお、Azure Kubernetes Service や Azure Container Instance はお薦めされませんでした。
そして、Azure でのゲーム サーバーの基本的なホスティング や Minecraft サーバの設定ファイル (server.properties) まで教えてくれました。
結果的には VM を選択するのですが、もう少し聞いてみます。
Azure Container Instance でデプロイする例を見かけたので、
こちらなどはどうかと聞いてみました。
Application Gateway は L7 ロードバランサーなので、Azure Load Balancer は使えるか。
できるだ..と? ただこれは、サポートされていないネットワーク シナリオ - 仮想ネットワークのシナリオとリソース にある通りサポートされていないシナリオであるため、右下の down vote を押して、フィードバックを送りました。こちらからフィードバックを送ることで開発元に直接フィードバックが送ることができます。
同じように Azure Container Apps についても、UDP プロトコルによるアクセスがサポートされておらず、WebApp for Container も TCP/UDP プロトコルがサポートされていないとわかりました。
質問の仕方によるかと思いますが、ドキュメントベースで仕様を確認する分には、申し分ないです。
次に VM をデプロイする方向でその方法を質問してみます。
右上のメニューから "New chat" を選択し、新しいセッションを立ち上げます。
結果的に Azure Bicep でのデプロイを行う方法で質問していましたが、
Bicep テンプレートを提案いただくには、実際のテンプレートを教えてほしい旨を伝える必要がありました。ただ、Bicep テンプレートの生成自体は機能に謳っていないため、期待された応答かもしれません。
タスクの実行 - Microsoft Copilot for Azure (プレビュー) 機能
移行の実行
移行先のインフラ一式を先に提案してもらった Bicep テンプレート (部分的に変更) で展開します。
使ったテンプレートや Docker Compose ファイルは、こちら に置いてあります。
$ az group create -n labmc -l japaneast
$ az deployment group create -g labmc --template-file ./minecraft-server/bicep/deploymcvm.bicep
展開が完了したら、次はデータの移行です。
ローカル環境で Mincecraft のデータを格納しているフォルダ data
を圧縮し、
Azure VM にコピーします。
$ scp minecraft-server/docker-compose.yaml azureuser@(仮想マシンのパブリック IP アドレス):/home/azureuser
$ cd (ローカルの Minecraft サーバディレクトリに移動)
$ tar -czvf data.tgz data/
$ ls -lh
total 2.4G
drwxrwxrwx 1 yurio yurio 512 Dec 4 07:07 data
-rwxrwxrwx 1 yurio yurio 2.4G Dec 4 07:15 data.tgz
-rwxrwxrwx 1 yurio yurio 1.7K Dec 4 06:59 docker-compose.yml
drwxrwxrwx 1 yurio yurio 512 Apr 29 2023 mc-backups
-rwxrwxrwx 1 yurio yurio 261 Sep 24 15:53 mods.txt
-rwxrwxrwx 1 yurio yurio 128 Mar 26 2023 start.sh
$ scp data.tgz azureuser@(仮想マシンのパブリック IP アドレス):/home/azureuser
次は サーバ側での設定に移ります。
Geyser の起動が確認できましたら、クライアント側で Minecrat (Java 版 / 統合版)からアクセス可能か確認します。
azureuser@mcsvr:~$ tar -xzvf data.tgz
azureuser@mcsvr:~$ ls -l
total 2469448
drwxrwxr-x 13 azureuser azureuser 4096 Dec 3 22:07 data
-rwxrwxr-x 1 azureuser azureuser 2528698760 Dec 4 08:58 data.tgz
-rw-r--r-- 1 azureuser azureuser 816 Dec 4 09:03 docker-compose.yaml
azureuser@mcsvr:~$ docker compose up
...
mc-server | [18:08:09 INFO]: [Geyser-Spigot] ******************************************
mc-server | [18:08:09 INFO]: [Geyser-Spigot]
mc-server | [18:08:09 INFO]: [Geyser-Spigot] Loading Geyser version 2.2.0-SNAPSHOT (git-master-b8481cc)
mc-server | [18:08:09 INFO]: [Geyser-Spigot]
mc-server | [18:08:09 INFO]: [Geyser-Spigot] ******************************************
mc-server | [18:08:22 INFO]: [Geyser-Spigot] Started Geyser on 0.0.0.0:19132
mc-server | [18:08:22 INFO]: [Geyser-Spigot] Done (12.187s)! Run /geyser help for help!
mc-server | [18:08:22 INFO]: Done (46.870s)! For help, type "help"
mc-server | [18:08:22 INFO]: Starting GS4 status listener
mc-server | [18:08:22 INFO]: Thread Query Listener started
mc-server | [18:08:22 INFO]: Query running on 0.0.0.0:25565
mc-server | [18:08:22 INFO]: Starting remote control listener
mc-server | [18:08:22 INFO]: Thread RCON Listener started
mc-server | [18:08:22 INFO]: RCON running on 0.0.0.0:25575
mc-server | [Rcon loop] MCServer is listening, running startup
mc-server | [Rcon loop] running - gamerule playersSleepingPercentage 1
mc-server | [18:08:22 INFO]: Thread RCON Client /127.0.0.1 started
mc-server | [18:08:23 INFO]: [Rcon: Gamerule playersSleepingPercentage is now set to: 1]
mc-server | [Rcon loop] Gamerule playersSleepingPercentage is now set to: 1
mc-server | [Rcon loop] running - setworldspawn -424 68 2257
mc-server | [18:08:23 INFO]: Thread RCON Client /127.0.0.1 shutting down
mc-server | [18:08:23 INFO]: Thread RCON Client /127.0.0.1 started
mc-server | [18:08:24 INFO]: [Rcon: Set the world spawn point to -424, 68, 2257 [0.0]]
mc-server | [18:08:24 INFO]: Thread RCON Client /127.0.0.1 shutting down
mc-server | [Rcon loop] Set the world spawn point to -424, 68, 2257 [0.0]
mc-server | [Rcon loop] No addition rcon commands are given, stopping rcon cmd service
Java 版からこんにちわ
統合版からもこんにちわ。
ということで移行できました。
まとめ
Azure Copilot for Azure は上記のような設計の相談以外にも、
トラブルシューティングやコスト削減の相談などもできるので、どしどしご利用&フィードバックいただいて、より良い Azure ライフをお送りください🎅
Discussion