7 Days to Dieのマルチプレイサーバーを、AWS上に構築する。
- cdk: CDK関連
- bin/cdk.ts: CDKのメイン
- lib/*-stack.ts: スタックの設定
- files: EC2上で利用するスクリプトなど
- functions: Lambda関連
bun install
事前にインストールガイドを参考に、必要なツールをインストールしてください。
コードの修正
bun run fix
コードの確認のみ
bun run check
[SHOULD] エディターの保存時の設定でPrettierとESLintを実行するのを推奨します。
cdkディレクトリでcdkコマンドを実行します。
cd ./cdk && cdk deploy --all
デプロイ前にLambda関数の依存関係をインストールする必要があります。
cd ./functions && npm i
- EC2 Spot FleetでEC2インスタンスの条件を指定
- Spot Fleetのターゲットキャパシティを増減させることによってサーバーの起動停止を行う
起動
aws ec2 modify-spot-fleet-request --spot-fleet-request-id sfr-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --target-capacity 1
停止
aws ec2 modify-spot-fleet-request --spot-fleet-request-id sfr-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --target-capacity 0
サーバーの設定を変えるにはEC2インスタンス上の/mnt/game/ServerFiles/sdtdserver.xml
を更新します。
設定ファイルは手動更新せずにS3に保管して、それをサーバーから取得します。(自動化はしていない)
- プロジェクトルートに、現バージョンのデフォルト設定ファイル(
sdtdserver-default.xml
)があるので、任意の場所にXMLファイルとしてコピー - 1で作成したファイルで設定を変えて保存
./discord-utils/put-server-config-file-to-s3.sh
を実行してS3に設定ファイルをアップロード(コマンドの引数はスクリプトファイルを参照)- EC2インスタンスにSSHで接続して、
/var/lib/scripts/utils.sh
のupdate_server_config
を実行する - ゲームサーバーを再起動(Dockerコンテナを再度立ち上げる)
- https://note.sarisia.cc/entry/discord-slash-commands/
- https://github.com/masahide/spot-fleet-7dtd/blob/main/functions/discordbot/main.go
Discordbot特有のリクエスト処理とゲームサーバーの操作処理があるので、前者を処理するLambdaから後者を処理するLambdaを呼び出すようにして責務を切り分ける実装になっている。