AWS 上に爆速で Palworld の専用サーバーを構築する (Amazon Lightsail編)
Table of Contents
Palworld では専用サーバーを建ててマルチプレイをすることができます。この記事では EC2よりも料金が分かりやすく、より簡単に使い始められる Lightsail を使って Palworld 専用サーバーを構築する方法やメリット、注意点について説明します。内容については趣味によるものなのでなにか問題が起きても保証しませんが、間違っているところがあったら教えてもらえると嬉しいです。
Palworld の専用サーバーを構築される際は 公式のドキュメントも一緒にご覧ください。Palworld は2024年1月時点でアーリーアクセスであり、仕様や設定方法が大きく変わる可能性があります。
AWS を初めて使う場合は、 AWSアカウント作成の流れを参考に AWS アカウントを作成します。AWS コンソールにログインできたら、画面上部から「lightsail」を検索し、Lightsail をクリックします。
初めて Lightsail にアクセスすると、以下のような画面が表示されます。一旦「後で何か作成」をクリックします。
以下は Lightsail の画面です。左のメニューから設定したい項目を選べます。また表示される言語を変えたい場合は、画面左下の「English」や「日本語」と表示されているセレクターから選択することができます。
インスタンスを作成する #
インスタンスのメニューから「インスタンスの作成」をクリックします。
インスタンスロケーション #
東京リージョンが選択されていることを確認します。パルワールドをプレイする人から近い国のロケーションを使用することで遅延の少ない環境で遊ぶことができます。
インスタンスイメージの選択 #
プラットフォームは「Linux/Unix」、設計図は「OSのみ」から「Ubuntu 22.04」を選択します。
オプションで、起動スクリプトの欄に以下のコードをコピー & ペーストします。インスタンス起動後に起動スクリプトが実行され、自動でパルワールドのインストールと起動のための設定が行われます。
#!/bin/bash
echo "# Install steamcmd"
add-apt-repository -y multiverse
dpkg --add-architecture i386
apt update
export DEBIAN_FRONTEND=noninteractive
echo steamcmd steam/question select "I AGREE" | debconf-set-selections
echo steamcmd steam/license note '' | debconf-set-selections
apt install -y steamcmd
echo "# Install Palworld server"
sudo -u ubuntu /usr/games/steamcmd +login anonymous +app_update 2394010 validate +quit
echo "# Install Steamworks SDK"
sudo -u ubuntu mkdir -p /home/ubuntu/.steam/sdk64/
sudo -u ubuntu /usr/games/steamcmd +login anonymous +app_update 1007 +quit
cp -p /home/ubuntu/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so /home/ubuntu/.steam/sdk64/
echo "# Start Palworld server"
cat <<'EOF' > /etc/systemd/system/palworld-dedicated.service
[Unit]
Description=Palworld Dedicated Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStart=/home/ubuntu/Steam/steamapps/common/PalServer/PalServer.sh port=8211 players=32
LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
Restart=always
User=ubuntu
Group=ubuntu
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now palworld-dedicated.service
インスタンスプランの選択 #
プレイする人数や予算に合わせてインスタンスプランを選択します。2024年1月24日現在、公式ドキュメントの推奨スペックは以下の通りになっています。
- CPU
- 4Cores (recommend)
- メモリ
- 16GB Recommend over 32GB for stable operation. It is possible to start the server with 8 GB, but the further you play, the server will crash due to out of memory. |
インスタンスを確認 #
ここまで設定できたら「インスタンスの作成」をクリックします。インスタンスが起動し、サーバーのインストールが完了するまでしばらく時間がかかるため、その間にネットワークの設定を行います。
ネットワークの設定を変更する #
Palworldのインスタンスから接続できるようにするために、ネットワークの設定を行います。Lightsailのホームから作成されたインスタンスをクリックし、「ネットワーキング」のタブを選択します。
(IPアドレスを隠していませんが、このサーバーはもう存在しません。)
IPv4 ネットワーキング #
Palworldからインスタンスに接続する際にはパブリックIPv4アドレスを使用します。 デフォルトの設定では、インスタンスを停止してから再度起動するとパブリックIPアドレスが変わります。いつでも同じIPアドレスで接続できるようにするため、「静的IPをアタッチする」をクリックし、静的IPをアタッチします。
IPv4 ファイアウォール #
Palworld では接続にデフォルト UDP 8211 ポートを使用するため開放します。IP総当りで侵入してくる攻撃があるみたいなのでゲームサーバーの設定と合わせて変えてもいいかもしれません。
80ポートは使用しないためゴミ箱のアイコンから削除します。最終的に以下のようになっていればOKです。
ゲームクライアントから専用サーバーに接続する #
LightsailのIPアドレス:8211
を入力し、接続をクリックします。
SSHでインスタンスに接続する #
サーバーを運用していると、サーバーのプロセスを再起動したり設定ファイルを編集するために、インスタンスにログインしたい場合があります。
Lighsailではインスタンスの接続タブからインスタンスにSSH接続することができます。使い慣れたSSHクライアントがある場合はそちらをお使いいただくこともできますし、SSHクライアントをインストールせずにブラウザからSSHすることもできます。
「ブラウザを使用する」から「SSHを使用して接続」をクリックすると、以下のようが画面が表示されます。ubuntu@ip-172-26-7-199:~$
(@ip-
以後のプライベートアドレスは環境によって変わります) に続けてコマンドを入力することができます。
Palworldのサーバーの管理によく使うコマンドを、一部紹介します。
# サーバーの起動
sudo systemctl start palworld-dedicated.service
# サーバーの停止
sudo systemctl stop palworld-dedicated.service
# サーバーの再起動
sudo systemctl restart palworld-dedicated.service
# ゲームサーバのステータスを確認
systemctl status palworld-dedicated.service
# サーバーのログを確認
sudo journalctl -u palworld-dedicated.service
また設定ファイルは /home/ubuntu/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
にあります。
専用サーバーをアップデートする #
ここから先はSSHで接続して最低限のコマンドの実行とテキストエディタ(vi
や nano
など)が使える人向けの内容となっています。
Palworldはアーリーアクセス中であり、今後も頻繁にアップデートがあることが想定されます。 SteamCMD API を使うとPalworldの最新のビルドバージョンを取得することができます。以下は最新のビルドバージョンと起動中のビルドバージョンを比較し、異なっている場合に新しいバージョンをインストールしてPalworldを再起動するスクリプトです。
#!/bin/bash
steam_app_id="2394010"
install_dir="/home/ubuntu/Steam/steamapps/common/PalServer"
steamcmd="/usr/games/steamcmd"
ruuning_build_id=`$steamcmd +login anonymous +app_status $steam_app_id +quit | grep -e "BuildID" | awk '{print $8}'`
latest_build_id=`curl -s "https://api.steamcmd.net/v1/info/$steam_app_id" | jq -r ".data.\"$steam_app_id\".depots.\"$steam_app_id\".manifests.public.buildid"`
if [ $ruuning_build_id = $latest_build_id ]; then
echo "The server is already running the latest version"
else
echo "New build_id ($latest_build_id) found. Updating..."
sudo systemctl stop palworld-dedicated.service
$steamcmd +login anonymous +app_update $steam_app_id validate +quit > /dev/null
sudo systemctl start palworld-dedicated.service
echo "Update completed."
fi
スクリプトの実行には jq
のインストールが必要です。
apt install -y jq
スクリプトを以下の様に保存してCronに登録すると、自動でアップデートを行うことができます。
# アップデート用Scriptを保存
vi /home/ubuntu/update-palworld-server.sh
# 1時間に1回アップデートを確認するようにCronに登録
(crontab -l; echo "0 * * * * /home/ubuntu/update-palworld-server.sh > /dev/null 2>&1") | crontab -
セーブデータをバックアップする #
セーブデータのバックアップを取っておくことで、不慮のバグや障害から大事なデータを守ることができます。Palworldのセーブデータは /home/ubuntu/Steam/steamapps/common/PalServer/Pal/Saved
に保存されています。以下は実行されるたびに Saved
フォルダをzipで圧縮して保存し、最新10世代分を残して古いものは削除するスクリプトです。
#!/bin/bash
# Backup source directory
backup_source="/home/ubuntu/Steam/steamapps/common/PalServer/Pal/Saved"
# Backup destination directory
backup_destination="/home/ubuntu/palworld_backup"
# Number of generations to keep
max_generations=10
# Get current date and time
current_date=$(date +"%Y%m%d%H%M")
# Backup file name
backup_filename="palworld-savedata_${current_date}.zip"
# Create backup destination directory if it does not exist
mkdir -p "$backup_destination"
# Perform the backup
zip -r "${backup_destination}/${backup_filename}" "${backup_source}"
# Delete old backups
cd "$backup_destination"
ls -t palworld-savedata_*.zip | tail -n +$(($max_generations + 1)) | xargs -r rm
スクリプトの実行には zip
のインストールが必要です。
apt install -y zip
スクリプトを以下の様に保存してCronに登録すると、自動でバックアップを行うことができます。
# バックアップ用Scriptを保存
vi /home/ubuntu/backup-palworld-server.sh
# 毎朝5時にバックアップを取るようにCronに登録
(crontab -l; echo "0 5 * * * /home/ubuntu/backup-palworld-server.sh > /dev/null 2>&1") | crontab -
サーバーの構築については以上になります。
EC2 と Lightsail の選択について #
Lightsail は一定のデータ転送量や SSD 込みの定額制の月額料金で使うことができ、予算が分かりやすいです。また違うインスタンスタイプなので直接的な比較はできませんが、EC2 を使って各リソースを積み上げた場合の値段の合計より安くてお得感があります。
例えば4vCPU、16GBメモリ、320GB SSDストレージ、転送量6TBを似たスペックである t3.xlargeと比較してみると:
- Lightsail
- $80 / month
- EC2
- EC2 t3.xlarge ($0.2176/h) = $156.6 / month
- EBS 汎用 SSD (gp3) - ストレージ $0.096 / GB・month x 320 = $30.72 / month
- データ転送(out) $0.02 / GB x 6TB = $122.88
- 合計 $310.2 / month
となります。
ただし Lightsail にはこの後説明する CPU バーストキャパシティの概念があり、CPU 使用率に制限があります。また EC2 は停止時にはお金がかからないのと、スポットインスタンスが使えるので工夫自体でもっと安く済ませられそうです。
CPU バーストキャパシティについて #
Lightsail は割り当てられた vCPUを 100% 常に使えるわけではなく、一定以上の CPU 使用率(ベースライン)を超えると CPU バーストキャパシティーを消費します。CPU バーストキャパシティーは一定の CPU 使用率以下の場合に時間経過で貯まります。詳しくは Amazon Lightsail でのインスタンスのバースト容量の表示 をお読みください。
Lightsail のメトリクスのタブをみると以下の様な CPU 使用率のグラフを確認することができます。
4vCPU、16GBインスタンスの場合は、CPU 使用率 40% がベースラインになっていて、これを超えるとバーストキャパシティを消費します。複数人で試したところ負荷がかかる場面ではベースラインを超えてしまっており、負荷のかかる状況が続くサーバーでは Lightsail のスペックを上げるか、EC2 などの他の選択肢を考える必要がありそうです。一方で集まって遊ぶのは夜の時間帯だけだけど、昼間もパルに拠点で労働はさせておきたいといったニーズには Lightsail がハマるパターンがあるかもしれません。