👾

自宅マイクラサーバ をAzureに移行

2023/12/07に公開

こんにちわ🎄
この記事は、Azure Advent Calnedar 2023 の 12/7 の記事になります。

はじめに

自宅で運用している(利用ユーザーは私と子どもの2名)をクラウドに載せたら、どのような構成になるか、移行方法を調べるがてら試してみました。

要件の整理

自宅では、Java版(私)と統合版(子ども)で遊んでおり、双方から遊べるという要件があります。これを実現するために Geyser というプラグインを入れて、統合版から Java 版のサーバにアクセスできるようにしてます。

そのため、通信要件として Java 版のクライアントからは 25565/TCP 、統合版のクライアントからは 19132/UDP を許可する必要があります。
また、World データを移行する必要があります。

Home base

拠点の村人さんたち 「フゥーン、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?

Alt text

おお、Azure Kubernetes Service や Azure Container Instance はお薦めされませんでした。

そして、Azure でのゲーム サーバーの基本的なホスティング や Minecraft サーバの設定ファイル (server.properties) まで教えてくれました。
結果的には VM を選択するのですが、もう少し聞いてみます。

Azure Container Instance でデプロイする例を見かけたので、
こちらなどはどうかと聞いてみました。

Alt text

Application Gateway は L7 ロードバランサーなので、Azure Load Balancer は使えるか。

Alt text

できるだ..と? ただこれは、サポートされていないネットワーク シナリオ - 仮想ネットワークのシナリオとリソース にある通りサポートされていないシナリオであるため、右下の down vote を押して、フィードバックを送りました。こちらからフィードバックを送ることで開発元に直接フィードバックが送ることができます。

Alt text

同じように Azure Container Apps についても、UDP プロトコルによるアクセスがサポートされておらず、WebApp for Container も TCP/UDP プロトコルがサポートされていないとわかりました。
質問の仕方によるかと思いますが、ドキュメントベースで仕様を確認する分には、申し分ないです。


次に VM をデプロイする方向でその方法を質問してみます。
右上のメニューから "New chat" を選択し、新しいセッションを立ち上げます。

Alt text

Alt text

Alt text

結果的に 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 版からこんにちわ

Alt text

統合版からもこんにちわ。

Alt text

ということで移行できました。

まとめ

Azure Copilot for Azure は上記のような設計の相談以外にも、
トラブルシューティングやコスト削減の相談などもできるので、どしどしご利用&フィードバックいただいて、より良い Azure ライフをお送りください🎅

GitHubで編集を提案

Discussion