はじめに
こんにちは!
この記事は「2026 Japan AWS Jr. Champions 真夏のQiitaリレー」の14日目の記事となります。
過去の投稿(リンク集)はこちらからご覧ください。
この記事の目的
社内ではデータ基盤まわり(ETL・マスタデータ管理)を担当していますが、この記事は業務とは関係ない、個人で遊ぶためのMinecraftサーバーの話です。
このサーバーをAIエージェントに管理させるところまでを構想していて、本記事はその第1回です。
この記事の結論
- EC2 + Docker(itzg/minecraft-server + Geyser + Floodgate)で、Java版と統合版(スマホ)のクロスプレイサーバーを建てる
- つまずいたポイントはセキュリティグループのUDP設定漏れ
- RCONを仕込んであるので、次回以降 Lambda → Bedrock AgentCore Gateway + Policy と繋いでAIエージェントによる管理に進む
検証条件
- 検証日:2026年8月12日〜13日 / リージョン:ap-northeast-1
- EC2 t4g.medium(Ubuntu Server 24.04 LTS / ARM64)+ EBS gp3 10GB
- itzg/minecraft-server(TYPE: PAPER)+ Geyser + Floodgate
- クライアント:iPhone の Minecraft 統合版(1.26.40)
構成
スマホ (統合版) ──UDP:19132──┐
PC (Java版) ────TCP:25565──┤
▼
EC2 t4g.medium (東京)
└─ Docker
└─ Paper + Geyser + Floodgate
| コンポーネント | 役割 |
|---|---|
| Paper | 軽量なJava版サーバー実装 |
| Geyser | 統合版の通信をJava版プロトコルに変換するプロキシ |
| Floodgate | 統合版プレイヤーがJava版アカウント無しで参加できるようにする |
サーバーはJava版のまま、スマホ(統合版)からも入れる構成です。統合版の公式サーバー(BDS)はARM64ビルドが無い・RCON非対応・プラグイン非対応と制約が多いため、Java版サーバー + Geyser にしました。
構築手順
1. EC2インスタンスを作成
| 項目 | 設定 |
|---|---|
| AMI | Ubuntu Server 24.04 LTS |
| アーキテクチャ | 64ビット (Arm) ← プルダウンでの変え忘れに注意 |
| インスタンスタイプ | t4g.medium |
| キーペア | 新規作成(.pem をダウンロード) |
| ストレージ | gp3 / 10GB |
セキュリティグループはルール3本です。
| タイプ | ポート | ソース | 用途 |
|---|---|---|---|
| ssh | 22 | マイIP | 管理 |
| カスタムTCP | 25565 | 0.0.0.0/0 | Java版 |
| カスタムUDP | 19132 | 0.0.0.0/0 | 統合版(スマホ) |
2. SSH接続してDockerを導入
chmod 400 ~/Downloads/minecraft-key.pem
ssh -i ~/Downloads/minecraft-key.pem ubuntu@<パブリックIP>
sudo apt-get update
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker ubuntu
exit
exit で一度抜けて、同じコマンドで入り直します(dockerグループの反映に必要です)。docker --version が通れば導入完了です。
3. docker-compose.yml を作成
mkdir ~/minecraft && cd ~/minecraft
nano docker-compose.yml
services:
mc:
image: itzg/minecraft-server
environment:
EULA: "true"
TYPE: "PAPER"
MEMORY: "2500M"
ENABLE_RCON: "true"
RCON_PASSWORD: "openssl rand -base64 24 等で生成した強い文字列"
PLUGINS: |
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot
ports:
- "25565:25565"
- "19132:19132/udp"
volumes:
- ./data:/data
restart: unless-stopped
補足を3点。
-
PLUGINSにURLを並べるだけで、起動時にGeyserとFloodgateが自動ダウンロードされます(itzg/minecraft-serverの機能) -
ENABLE_RCONは次回のAI連携で使います。RCON(Remote Console)はマイクラサーバーが標準で持つ遠隔コマンド実行の仕組みで、ゲーム内で打つ/listや/sayなどのコマンドをネットワーク越しに送れます。パスワードは stop や op を含む全コマンドの実行権限に直結するため、強い文字列を設定してください - RCONのポート(25575)は
ports:に書きません。次回、VPC内に閉じた形でLambdaからだけアクセスできるようにします
4. 起動
docker compose up -d
docker compose logs -f mc
初回はサーバー本体のダウンロードとワールド生成で5〜10分かかります。以下の2行が出たら起動完了です。
[Geyser] Started Geyser on 0.0.0.0:19132
Done (XX.XXXs)! For help, type "help"
5. スマホから接続
Minecraft(統合版)→ 遊ぶ → サーバータブ → サーバーを追加
- サーバーアドレス:EC2のパブリックIP
- ポート:19132
つまずき:InitialConnection-13 で接続できない
サーバー追加はできたのに、接続すると「NetherNet / InitialConnection-13」エラーで弾かれました。
原因はセキュリティグループの UDP 19132 の設定漏れでした。Java版はTCPですが、統合版はUDPで通信します。タイプを「カスタムTCP」で作ってしまっていたり、ルール自体を忘れていたりすると、このエラーになります。
同じエラーが出たら、19132のルールが存在するか、タイプがUDPになっているかを確認してください。
修正後、無事ワールドに入ることができました。
次回:AIエージェントにサーバーを管理させる
ここまで読んでいただきありがとうございます。次回は、AIエージェントにサーバーを管理させることについて記載していきたいと思います。