1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MinecraftサーバをAWSで立ててみた #3

Posted at

はじめに

この記事は MinecraftサーバをAWSで立ててみた の第3回の記事となります。

前回CDK化を実施したので、今回は現時点でのMinecraft ServerについてのAWS上でのインフラ設計についてまとめてみます。

目次

  1. 構成図
  2. Minecraft Serverのインフラ設計詳細
  3. ソースコード
  4. 参考文献

全体構成図

まずは何度も出てきていますが、インフラ全体の構成です。

minecraft_server.jpg

全体としては、特に言及する点はありません。
Mincraft Serverのサービス提供という観点では、Public SubnetにMincraft用のEC2を1台配置し、Mincraft Serverのデフォルトポートを通信許可すればOKです。

(Ansibleサーバも現状使いみちが無さそうなので削除しようかと考えています)

今後、よりよい運用のために構成を変更していこうと思っています。
やってみたいと考えていることは以下です。

  • バックアップや定期的なサーバの再起動をLambdaで実施
  • Mincraft EC2インスタンスをPrivate Subnetに移動してフロントにELBを設ける
  • EFSを用意して可用性の向上

Minecraft Serverのインフラ設計詳細

Minecraft Serverについて構成の詳細は以下です。
(詳細というほど、詳細ではないですが)

minecraft_ec2.jpg

  • EC2にElastic IPをアタッチしてPublic IPを付与
  • Security GroupをMincraft Server用に作成し、Mincraft Serverのデフォルトポートのみアクセス許可
  • ServerへのSSHはSSM経由で行うためアクセス許可は行わない

EC2設定

Minecraft ServerのOSはAlmaLinux8インスタンスタイプはt3.smallで作成しました。
Minecraft Serverは特にOS問わずインストールできるようなのでOSは好みのもので問題ないと思います。

インスタンスタイプについてはメモリが2GiBあるt3.smallを選択しました。サーバアクセス数が多くなると4〜8GB程度のメモリが必要とのことでしたが、まずは検証レベルなので最低限のインスタンスタイプを選択しました。
(ちなみにt3.microだとマップの生成にめちゃくちゃ時間がかかっているようでした)

作成したCDKでのパラメータは以下。

resources/ec2.py
{
    'id': 'Ec2InstanceMinecraft1a',
    'availability_zone': 'ap-northeast-1a',
    'iam_instance_profile': iam_role.instance_profile_general_ec2.ref,
    'resource_name': 'EC2-Minecraft-1a',
    # Alma Linux 8
    'image_id': 'ami-0b299c22ffb336d85',
    'instance_type': 't3.small',
    'subnet_id': subnet.public_1a.ref,
    'security_group_id': security_group.minecraft.ref,
    'eip_id': elastic_ip.minecraft_1a.ref,
    'user_data_path': './scripts/user_data/minecraft.sh',
    '_assign_name': 'minecraft-1a'
}

また、EC2の作成時にMinecraft Serverを自動インストール・サービス起動を行うuserData.shを作成しています。

インフラ環境周りの設定・改善を進めていきたいのでMinecraft ServerのパフォーマンスチューンやMOD導入等々、マイクラマルチを快適に遊ぶという観点での改善はかなり後になりそうです。
以下のサービス設定についても改善点は多分にあると思います。

scripts/user_data/minecraft.sh
#!/bin/bash

sudo dnf -y update
sudo dnf -y install wget java-17-openjdk-headless-1:17.0.5.0.8-2.el8_6.x86_64
sudo useradd minecraft -M

mkdir /etc/minecraft/
cd /etc/minecraft
sudo wget https://piston-data.mojang.com/v1/objects/c9df48efed58511cdd0213c56b9013a7b5c9ac1f/server.jar
sudo java -Xmx1024M -jar server.jar nogui

sudo sed -i -e "s/false/true/" /etc/minecraft/eula.txt

touch boot.sh
echo '#!/bin/bash' >> /etc/minecraft/boot.sh
echo 'java -Xms$XMS_SIZE -Xmx$XMX_SIZE -jar /etc/minecraft/server.jar nogui' >> /etc/minecraft/boot.sh
chmod +x /etc/minecraft/boot.sh

touch environments
echo 'XMS_SIZE=1024M' >> /etc/minecraft/environments
echo 'XMX_SIZE=1024M' >> /etc/minecraft/environments

sudo chown -R minecraft:minecraft /etc/minecraft

touch /etc/systemd/system/minecraft-server.service
cat <<EOF > /etc/systemd/system/minecraft-server.service
[Unit]
Description=Minecraft Server
After=network-online.target

[Service]
ExecStart=/bin/bash /etc/minecraft/boot.sh
EnvironmentFile=/etc/minecraft/environments
WorkingDirectory=/etc/minecraft
Restart=always
User=minecraft
Group=minecraft

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable minecraft-server
sudo systemctl start minecraft-server

IAM Role

SSM経由でのサーバ接続を行うためにEC2にSSMを利用するためのロールを付与しておく必要があります。
構成図には載せていませんが、しっかり設定をしておく必要があります。

SSMでのサーバ接続には

  • Security Groupで22ポートを開放しなくて良くなる(セキュリティ上安全)
  • 踏み台サーバが不要(コスト削減)

という大きなメリットがあるので使用することをおすすめします。

設定については 実践!AWS CDK #25 Session Manager で SSH 接続 に詳しく記載してあります。

ソースコード

Security GroupやElastic IPについてはほぼデフォルトで作っただけですので記事には載せていません。
上記も含めた全体のソースコードはgithubに公開しております。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?