Amazon Web Services ブログ

Amazon EC2 に Java 版 Minecraft サーバーをセットアップ

はじめに

本記事では、個人用の Java 版 Minecraft サーバーを AWS 上にデプロイする方法をご紹介します。サーバーを AWS にホストすることで、自宅サーバーを使用した際に伴う、一般的なネットワーク上の課題やセキュリティ上の懸念を解消することができます。また、仮想マシンを制御できるため、任意の MOD やプラグインを構成することができます。今回は、Amazon Elastic Compute Cloud(EC2) を使用して、友人と一緒に使用できる Minecraft サーバーを稼働させます。本記事で、コストの最適化についての説明は省きますが、サーバーのコストを削減する方法はたくさんあります。

ソリューション概要

本ソリューションは、Amazon EC2 を使用して、Minecraft サーバー用の仮想マシンを起動します。EC2 ではネットワーク構成を制御でき、さまざまな CPU および RAM オプションを備えた数百種類の EC2 インスタンスタイプから選択できます。この柔軟性により、小規模なプレイヤーベースと大規模なプレイヤーベースの両方をサポートするサーバーをホストできます。
仮想マシンは、AWS クラウド上の仮想プライベートネットワークである Amazon Virtual Private Cloud (VPC) で起動されます。さらに、EC2 インスタンスをセキュリティグループで保護します。セキュリティグループは、EC2 インスタンスへのアクセスを制御できる仮想ファイアウォールです。サーバーの設定を簡単にするために、必要なソフトウェアをインストールしてサーバーを実行するのに役立つ bash スクリプトを用意しています。

Minecraft 構成図

ウォークスルー

前提条件

ステップ

  • EC2 インスタンスのセットアップ
  • カスタムスクリプトを使用して Minecraft サーバーのセットアップを自動化
  • Minecraft サーバー専用の IP アドレスを割り当て
  • サーバーオペレータの設定、ワールドファイルの変更など
  • クリーンアップ

EC2 インスタンスのセットアップ

Java 版 Minecraft サーバーを実行するには、Amazon EC2 を使用して仮想マシンを作成する必要があります。

    1. AWS コンソールにログインします。
    2. コンソールの右上で、プレイヤーのロケーションに適した AWS リージョンを選択します (たとえば、プレイヤーベースが米国西海岸にある場合は、us-west リージョンのいずれかを選択します)。
    3. EC2 と検索し、EC2 ダッシュボードに移動します。インスタンスを起動を押します。
    4. EC2 インスタンスの設定をここで行います。インスタンスに Minecraft Server などの名前を付けます。1 番目の Amazon Linux AMI を選択し、アーキテクチャを 64 ビット (Arm) に変更します。今回は、Amazon Linux 2023 AMI を使用しました。
    5. インスタンスタイプで、t4g.small を選択します。サーバーが処理しきれないほどの多くのユーザが接続する場合は、いつでもサーバーをより大きな EC2 インスタンスにアップグレードできます。
    6. キーペア名で新しいキーペアを作成を押します。キーペア名を入力し、キーペアを作成を押します。秘密鍵は自動的にダウンロードされます。

    プレイヤーは EC2 インスタンスで実行されている Minecraft サーバーにアクセスします。EC2 インスタンスは、ポート 25565 経由のトラフィックを許可するセキュリティグループを持つ VPC に配置されます。

    1. ネットワーク設定のセクションまでスクロールします。右上の編集ボタンをクリックします。ここで、EC2 インスタンスを保護し、安全でない接続を防ぐためのセキュリティグループを作成します。デフォルト VPC を選択し、サブネットは指定しないままにして、パブリック IP の自動割り当てを有効にします。デフォルト VPC には、各アベイラビリティーゾーンに 1 つのパブリックサブネットがあるため、変更せずに選択できます。

    EC2 起動画面の [ネットワーク設定] で [編集] をクリックします。

    1. ファイアウォールで、セキュリティグループの作成を選択します。セキュリティグループ名を Minecraft Security Groupに変更します。オプションで、Security group with ports open for Minecraft Server & SSH などの説明を追加します。

    EC2 インスタンス設定でファイアウォール (セキュリティグループ) を作成します。

次に、接続を許可するインバウンドルールを 2 つ追加します。EC2 Instance Connectは、AWS コンソールから EC2 インスタンスに安全に接続する方法です。EC2 インスタンスに接続するには、EC2 Instance Connect IPアドレスからの SSH トラフィックを許可する必要があります。EC2 Instance Connect IP アドレスの範囲は、EC2 インスタンスが置かれている AWS リージョンによって異なります。EC2 インスタンス接続の一般的な US の IP 範囲は次のとおりです。

IP CIDR Ranges
us-east-1: 18.206.107.24/29
us-east-2: 3.16.146.0/29
us-west-1: 13.52.6.112/29
us-west-2: 18.237.140.160/29

EC2 インスタンスを起動するリージョンが上記のリストにない場合は、AWS IP アドレスのドキュメントで IP 範囲を確認できます。JSON ファイルをダウンロードし、ブラウザで開きます。それを生データとして表示し、Ctrl+F または Command+F を使用して文書内のテキストを検索します。検索バーに EC2_INSTANCE_CONNECT と入力し、利用するリージョンのインスタンス接続 IP を見つけます。

    1. インバウンドセキュリティグループのルールに進んでください。デフォルトの SSH トラフィックルールで、ソースタイプをカスタムに変更します。使用している地域の IP アドレス範囲をソースフィールドに入力します。us-east-1 IP の使用例については、以下のスクリーンショットを参照してください。

    EC2 インスタンス接続 IP CIDR をカスタム SSH ルールとしてインバウンドセキュリティグループに追加します。

    1. セキュリティグループに別のインバウンドルールを追加して、ポート 25565 でどこからでも (0.0.0.0/0) TCP トラフィックを許可します。これにより、Minecraft プレーヤーがサーバーに参加できるようになります。

ネットワーク設定は次のようになります (この例では us-east-1 リージョンを使用しました)。

セキュリティグループのネットワーク設定には、us-east-1 リージョンの特定の EC2 Instance Connect で許可されている SSH トラフィックが表示されます。ポート 25565 からのすべてのトラフィックを許可する TCP ルールもあります。

    1. ストレージ設定のセクションに進んでください。ルートボリューム EBS には 8GB を選択します。これは、EC2 インスタンスが関連付けているストレージの量です。必要に応じてストレージを追加することもできますが、始めるには 8GB で十分です。無料利用枠の対象となるお客様は、EBS で最大 30GB の SSD を無料で入手できます。

Minecraft を自動的にダウンロードしてセットアップするようにユーザーデータを設定する

次に、EC2 インスタンスを起動するたびに Minecraft サーバーを自動的にダウンロード、設定、実行する bash スクリプトを追加します。

重要: スクリプトは、お客様に代わって Minecraft とのエンドユーザー使用許諾契約 (EULA)に自動的に署名します。これは Minecraft サーバーの jar ファイルを実行するために必要で、通常はユーザーが行います。このスクリプトを使用することにより、Minecraft サーバーを実行するための EULA に同意したものとみなされます。

    1. ページの一番下までスクロールし、高度な詳細セクションを見つけて展開します。もう一度ページの一番下までスクロールして、ユーザーデータフィールドを見つけます。
    2. ユーザーデータフィールドに、以下の Minecraft セットアップスクリプトの自動化セクションのスクリプト全体をコピーして、ユーザーデータセクションに貼り付けます。

Minecraft セットアップスクリプトの自動化

#!/bin/bash

# *** INSERT SERVER DOWNLOAD URL BELOW ***
# Do not add any spaces between your link and the "=", otherwise it won't work. EG: MINECRAFTSERVERURL=https://urlexample


MINECRAFTSERVERURL=


# Download Java
sudo yum install -y java-17-amazon-corretto-headless
# Install MC Java server in a directory we create
adduser minecraft
mkdir /opt/minecraft/
mkdir /opt/minecraft/server/
cd /opt/minecraft/server

# Download server jar file from Minecraft official website
wget $MINECRAFTSERVERURL

# Generate Minecraft server files and create script
chown -R minecraft:minecraft /opt/minecraft/
java -Xmx1300M -Xms1300M -jar server.jar nogui
sleep 40
sed -i 's/false/true/p' eula.txt
touch start
printf '#!/bin/bash\njava -Xmx1300M -Xms1300M -jar server.jar nogui\n' >> start
chmod +x start
sleep 1
touch stop
printf '#!/bin/bash\nkill -9 $(ps -ef | pgrep -f "java")' >> stop
chmod +x stop
sleep 1

# Create SystemD Script to run Minecraft server jar on reboot
cd /etc/systemd/system/
touch minecraft.service
printf '[Unit]\nDescription=Minecraft Server on start up\nWants=network-online.target\n[Service]\nUser=minecraft\nWorkingDirectory=/opt/minecraft/server\nExecStart=/opt/minecraft/server/start\nStandardInput=null\n[Install]\nWantedBy=multi-user.target' >> minecraft.service
sudo systemctl daemon-reload
sudo systemctl enable minecraft.service
sudo systemctl start minecraft.service

# End script
 
       
    1. 次に、Minecraft サーバーファイルをダウンロードするために、スクリプトにリンクを追加する必要があります。Minecraft サーバーの最新バージョンを実行するには、公式の Minecraft サーバーダウンロードページにアクセスしてください。Download minecraft_server.1.20.4.jar and run it with the following command: と表示されている場所を見つけてください。ハイパーリンク Minecraft_server.jar を右クリックして、リンクをコピーします。

下の画像は、Minecraftの公式サイトからサーバー jar ファイルのダウンロードリンクを取得する方法を示しています。

Minecraft サーバーの JAR ファイルのダウンロードリンクを右クリックして、リンクをコピーします。

    1. 前のステップでコピーしたリンクを使用して、EC2 インスタンス起動ページのユーザーデータに戻ります。スクリプトの上部にある MINECRAFTSERVERURL= フィールドを探してください。マインクラフトサーバーのリンクを MINECRAFTSERVERURL 変数フィールドに貼り付けます。= と貼り付けようとしている Minecraft jar ファイルの URL の間にスペースを入れないでください。スクリプトの他の部分は編集しないでください。以下の画像は、ユーザーデータフィールドでの正しい設定の例を示しています。

例: Minecraft 1.20.1 では、ユーザーデータ内のコマンドは以下になります。
“MINECRAFTSERVERURL=https://piston-data.mojang.com/v1/objects/84194a2f286ef7c14ed7ce0090dba59902951553/server.jar”

ユーザーデータフィールドには上記のスクリプトが含まれています。MINECRAFTSERVERURL= フィールドには、マインクラフトのウェブサイトからの Minecraft サーバー jar リンクが入力されています。

    1. 上記の手順をすべて完了したら、インスタンスを起動を押します。EC2 インスタンスは、初回起動時にサーバーの設定と起動に最大 5 ~ 10 分かかる場合があります。Minecraft サーバーをテストするには、インスタンス設定でパブリック IPv4 アドレスを探し、起動後数分経ってから Minecraft でその IP に接続します。

Minecraft サーバーへの接続に問題がある場合は、以下のオプションを試してください。

    • ユーザーデータスクリプトは、初回起動時に実行に最大 10 分かかることがあるため、十分に待ってください。
    • EC2 インスタンスを停止して起動してみてください。
    • セキュリティグループのネットワーク設定を確認してください。

マインクラフトサーバー専用の IP アドレスを設定する

EC2 インスタンスがオフになるたびに、そのパブリック IP アドレスが変更されます。サーバーの電源を入れたり切ったりするたびに新しい IP を検索しなければならないのは非効率的です。この問題を解決するために、Elastic IP を EC2 インスタンスに関連付けます。Elastic IP アドレスは、変更されず、さまざまなリソースにアタッチできる専用 IP アドレスです。

Elastic IP などのパブリック IPv4 アドレスには、AWS 上で料金が発生します。コストを節約するためには、サーバーがしばらくアイドル状態になる場合は、 Elastic IP アドレスを解放してから、EC2 インスタンスを停止します。Elastic IP を解放して再度関連付けると、サーバーの IP アドレスが変更されることが多いことに注意してください。

Elastic IP のセットアップ

    1. EC2 ダッシュボードで、左側のツールバーを展開します。ネットワーク&セキュリティで、Elastic IP をクリックします。

EC2 ダッシュボードの左側のタスクバーで、[Elastic IP] を選択します。

    1. 右上の Elastic IP アドレスの割り当てるボタンをクリックします。Amazon の IPv4 アドレスプールからパブリック IPv4 を選択します。割り当てを押します。
    2. Elastic IP を選択し、アクションElastic IP アドレスの関連付けをクリックします。リソースタイプをインスタンスとしてクリックし、ドロップダウンメニューから Minecraft Server インスタンスを選択します。次に、関連付けるをクリックします。

作成した Elastic IP を選択し、それを Minecraft サーバーインスタンスに関連付けます。「アクション」のドロップダウンにあるオプションになります。
「アソシエイト Elastic IP アドレス」メニューで Minecraft サーバーインスタンスを選択します。

    1. Minecraft Server EC2 インスタンスに戻り、パブリック IPv4 フィールドの下を見るとご自身の Elastic IP アドレスを確認できます。

EC2 ダッシュボードで作成した EC2 インスタンスに移動します。チェックボックスをクリックし、[詳細] でパブリックIPv4アドレスをコピーします。

    1. Minecraft サーバーに接続するには、ゲームのマルチプレイヤー画面に移動し、サーバーを追加するか、直接接続を使用してください。サーバーアドレスフィールドに、EC2 インスタンスのパブリック IPv4 アドレスを入力します。Elastic IP をインスタンスに関連付けた場合、Elastic IP はサーバーアドレスになります。

サーバーオペレータの設定、ワールドファイルの変更など

Minecraft サーバーのセットアップが完了したので、ゲーム内でコマンドを実行するサーバーオペレーターを追加する必要があります。新しいワールドファイルのアップロード、プラグインの追加などもできます。これは、EC2 インスタンスのセットアップ時に設定した EC2 Instance Connect を介して行うことができます。

    1. まず、EC2 ダッシュボードに移動し、Minecraft サーバーの EC2 インスタンスを見つけ、その横にあるチェックボックスをクリックして、コンソールの上部にある接続ボタンを押します。

    EC2 インスタンスの接続ボタンを押すと、EC2 インスタンス接続を使用できます。

    1. インスタンスに接続画面で、下にスクロールして接続をクリックします。ユーザーはすでに ec2-user になっているはずです。そうでない場合は、ec2-user に変更してください。接続に失敗した場合は、EC2 インスタンスを再起動し、数分待ってから再試行できます。接続するオプションがない場合は、EC2 インスタンスを正しく設定していない可能性があります。EC2 インスタンスのセットアップセクションに戻って再確認する必要があります。ここでは、一般的なトラブルシューティングのヒントをいくつか紹介しています。
    2. ログインに成功すると、端末画面が表示されます。次に、一連のコマンドを入力して Minecraft サーバーディレクトリに移動し、必要な設定ファイルを編集します。
    3. まず、 cd /opt/minecraft/server/ と入力して Enter キーを押します。これは サーバーファイルが格納されている EC2 インスタンスのディレクトリです。将来サーバー設定を編集する場合に備えて、このディレクトリを覚えておいてください。
    4. ls と入力して Enter キーを押して、サーバーファイルがすべて存在することを確認します。下の画像の ls コマンドにリストされているものと同じ出力が表示されるはずです (例: world、logs、server.jar)。startstop が緑色に強調表示されていることに注意してください。start ファイルは、EC2 インスタンスを起動したり再起動したりするたびに自動的に実行される実行ファイルです。この機能が Minecraft サーバーを起動するので、手動で起動する必要はありません。これらは編集しないでください。
    5. Minecraft サーバーコンソールは表示されませんが、まだ実行中です。最初にサーバーをオフにしないと、ファイルまたはフォルダーを編集できません。そのためには、sudo ./stop と入力して stop スクリプトを実行します。これにより、stop スクリプトが管理者として実行されます。これで、新しいワールドやプラグインなどを追加できます。

下の画像は、EC2 インスタンスの接続画面と、赤色のボックスで囲われた入力が必要な一連のコマンドを示しています。

EC2 インスタンス接続ターミナルで、コマンドを入力します。

    1. また、SCP コマンドまたは Amazon S3 を使用してアップロードすることで、ローカルコンピューターから EC2 インスタンスに新しいワールドやその他のファイルをアップロードすることもできます。また、 server.properties ファイルを vim や nano などの UNIX テキストエディターで編集することもできます。
    2. オペレータを追加したり、コンソール自体からコマンドを実行したりするには、sudo ./start と入力してサーバを再実行する必要があります。これにより、起動スクリプトが管理者として実行され、Minecraft サーバーがロードされます。下の画像のようにサーバーコンソールが起動します。サーバーが起動するまでに数分かかることがあります。

    EC2 インスタンス接続ターミナルで、コマンドを入力します。

    1. コンソールに Done と表示されたら、サーバーは稼働しています。これで、ターミナルで / なしで通常の Minecraft コマンドを入力して実行できます。たとえば、プレイヤーをオペレーターとして追加するには、op *PLAYERNAMEHERE* と入力します。

以下は、ロードが完了したときにサーバーコンソールが出力する内容の参照画像です。サンプルプレイヤー名を使用して、サーバーのオペレーターとして追加しました。

コンソールに「完了」と表示されたら、「OP your-player-name」でプレイヤーを操作できます

お疲れ様でした!サーバーディレクトリに正常にアクセスし、好みに合わせて変更しました。アップロードするサーバーファイルを完全に制御できます。MOD、プラグインなどを追加していきましょう!

クリーンアップ

この投稿でプロビジョニングされたリソースから課金されないように、リソースをクリーンアップします。

    1. EC2 ダッシュボードで、選択ボックスを使用して EC2 インスタンスを選択します。右上のインスタンスの状態を選択し、終了を選択します。
    2. 同じ EC2 の画面で、サイドバーを開いて Elastic IP を選択します。EC2 インスタンスに使用されている Elastic IP の横にある選択ボックスを押し、右上のアクションを押して、Elastic IP アドレスの解放を押します。

リソースのクリーンアップが完了しました。

結論

おめでとうございます!これで、専用 IP アドレスを持つ EC2 インスタンスに Minecraft サーバーができました。Minecraft サーバーでプレイしていないときは、EC2 インスタンスを小まめに停止することを強くお勧めします。これにより、コストを節約でき、 Minecraft サーバーが立ち上がっているときのみ料金が発生します。次のステップとして、Minecraft Server が使用されていないときに EC2 インスタンスを自動的に停止するソリューションの開発を検討することをお勧めします。

本ブログはソリューションアーキテクトの濵野が翻訳しました。原文はこちらです。