AWSでMinecraftサーバーを立てる

やってみたのでメモ。

サーバーソフト・・Spigot
検索したら出できたやつ。

手順
1. AWSでEC2インスタンス起動
2. 起動したEC2インスタンスに、Spigotをインストール
3.ログの設定

少しはまりポイントもありつつ、わりと簡単だった。 アーキはこんな感じ。シンプル。

アーキテクチャ

1. AWSでEC2インスタンス起動

EC2インスタンスのスペックはこんな感じにした。 とにかく快適に使いたいので、スペック高め。 お金は結構かかるけど、遊びたいときだけ起動しとけばいいし。

2. 起動したEC2インスタンスに、Spigotをインストール

#リポジトリ更新
sudo apt-get -y update

# タイムゾーンを日本にしておく
sudo apt-get install tzdata
sudo timedatectl set-timezone 'Asia/Tokyo'
systemctl restart rsyslog.service

# syslogを確認して、日本時間になっていることを確認
view /var/log/syslog

# Amazon correttoをダウンロードする。AWSで使えるjdk。
wget -O- https://apt.corretto.aws/corretto.key | sudo apt-key add - 
sudo add-apt-repository 'deb https://apt.corretto.aws stable main'

#Spigotはjava17で動くのでjava17をインストール
sudo apt-get install -y java-17-amazon-corretto-jdk

# gitをインストール
sudo apt-get -y install git

# minecraft用のディレクトリ作成して権限変更
sudo mkdir minecraft-spigot
sudo chmod 777 minecraft-spigot

# Spigotをダウンロード
cd minecraft-spigot
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
sudo java -jar BuildTools.jar --rev 1.19.2

# 実行!(事前に作っておいた起動用のスクリプト)
sh Minecraft_start.sh

スクリプトはこれだけ。

#!/bin/sh
java –Xmx4096M –Xms4096M -XX:+UseG1GC -jar /home/ubuntu/minecraft-spigot_1.19.2/spigot-1.19.2.jar nogui

これでEC2インスタンスに設定しておいたグローバルIPを指定して、 ローカルのマイクラから接続できた。感動した。

3.ログの設定

1.EC2用のIAMロールを作成し、CloudWatchServerAgentのポリシーを設定し、インスタンスにアタッチ(毎度のやつ)
2.CloudWatchをインストール
インストール方法はここ

wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

3.jsonの作成
---2023/5/25追記---
カスタムメトリクス(メモリ使用率)とかを監視したければ、CloudWatchAgentの設定は↓の記事のやり方のほうが良かった。
CloudWatchAgentでメモリ使用率を見たい - 勉強したこと、日記
この手順で下記にあるログの設定もまとめてできます。
---追記おわり---

sudo touch /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json

これあったら良いかなーっていうログを適当に設定。

{
   "logs": {
       "logs_collected": {
            "files": {
                "collect_list": [
                   {
                        "file_path": "/home/ubuntu/minecraft-spigot/logs/latest.log",
                        "log_stream_name": "{instance_id}",
                        "log_group_name": "/home/ubuntu/minecraft-spigot/logs",
                        "timestamp_format": "%d/%b/%Y:%H:%M:%S %z",
                        "timezone": "UTC"
                    },
                    {
                        "file_path": "/var/log/syslog",
                        "log_stream_name": "{instance_id}",
                        "log_group_name": "/var/log/syslog",
                        "timestamp_format": "%d/%b/%Y:%H:%M:%S %z",
                        "timezone": "UTC"
                    },
                    {
                        "file_path": "/var/log/auth.log",
                        "log_stream_name": "{instance_id}",
                        "log_group_name": "/var/log/auth.log",
                        "timestamp_format": "%d/%b/%Y:%H:%M:%S %z",
                        "timezone": "UTC"
                    }
                ]
            }
        }
    }
}

ログの場所はこれを見た
[メモ]Linuxの主なログファイル

あとはサービスの起動と、サーバー起動で自動的にサービスが動くように設定。

sudo systemctl start amazon-cloudwatch-agent
systemctl status amazon-cloudwatch-agent
sudo systemctl enable amazon-cloudwatch-agent
systemctl is-enabled amazon-cloudwatch-agent

参考

qiita.com サーバースペックが参考になった。

余談、ハマったとこ

最初、t2microで試してたらOutOfMemoryでうまくいかず、ヒープメモリについていろいろ調べることになった。 参考になったやつ。 qiita.com

qiita.com

qiita.com

インストール手順にメモリ指定よく載ってておまじないのように使ってたけど、 なるほどね、となった。

t2.microだとスワップメモリが割り当てられてないのですぐ落ちる。 結局、マイクラサーバーを動かすにはどうやってもスペック不足だったのでスペック上げました。