コストは遊んだ分だけ。低コスト+高機能なマイクラマルチサーバをCDKで作って遊んでみた

🏷️ AWS  /  APIGateway  /  Lambda  /  Amazon SQS  /  CDK

「マイクラやらね?」

よくゲームをして遊んでいる友達とそういう話になりました。

せっかくなので、学習がてらAWSで、「基本的にいつでも遊べる」、「遊びたい時だけ立ち上げられればいい」「最悪鯖の管理者いなくてもだいたいのことはできる」サーバを目指していろいろ作ってみたのでその話をまとめたものになります。EC2は起動している時間分だけ課金される仕組みなので、遊びたい時だけ起動すればコストは最小限に抑えられます。

今回マイクラ用サーバーをEC2で動かす際、「サーバーの起動・停止はその時遊びたいプレイヤーに任せたい」「Modやホワイトリストの管理を管理者以外でも行えるようにしたい」と考えていました。今回はこれらをAPI Gateway + LambdaによるシンプルなWebコンソールと、SQSを活用した非同期処理で解決しました。

本記事は全2回シリーズの前編です。今回はまず、実際に構築したマイクラサーバがどんな感じで遊べるのかをざっくりご紹介します。CDKを使った詳しい構築方法は後編で解説します。

おことわり

  • このお話の中のマイクラは基本的にJava版のお話になります。

統合版もほぼ同様のやり口で実装できますが、開放するポートやら使用するリポジトリ等、話が変わってくる部分もあるのでそちらについては各自ggりながらいい塩梅にしてください。

この記事でわかること

  • APIGateway + Lambdaのシングルファイル管理画面から、サーバの起動・停止をオンデマンドで行う使い方
  • SQSを使った、EC2停止中でも受け付けられるホワイトリスト登録
  • S3経由でのMod/プラグイン導入の流れ

全体構成

管理コンソールでは、①サーバーの起動・停止、②ホワイトリストの登録、③Mod/プラグインの管理、の3つをまとめて行えます。

そこで本記事では、以下の3ステップに分けて、それぞれの使い方をご紹介します。

  1. Step 1  サーバを起動してみる
  2. Step 2  ホワイトリストを登録してみる
  3. Step 3  Modやプラグインを導入してみる

使ってみる

管理コンソールをのぞいてみる

Lambdaで実装した管理コンソールを確認してみます。

API Gateway > ステージ より、先ほどデプロイしたAPIのURLを取得し、ブラウザで開きます。

引数で渡したパスワードでログインするとこのような画面になるよう、Lambda関数内にWebコンソールを実装してみました。

マイクラのマルチプレイ時のアクセス先として使用するパブリックIPや、CPUクレジット残高(t系インスタンスを使用していないので表示されてないが)などを表示させてみています。

中央部にある大きなボタンが「サーバ起動/停止ボタン」です。

遊びたい時にポチっと押して、遊び終わったら停止させる、という運用をしています。

起動停止からホワイトリスト管理まで、必要な操作がこの画面ひとつで完結するので、遊びたい時にサクッと使えます。

お金もったいないのでEC2を一旦停止しておきました。

ここまででとりあえず、EC2の起動、Lambda、APIGatewayが無事に稼働していることは確認できました。

続いて、EC2が停止している状態でSQSにホワイトリストの登録が投げられるかを見てみます。

🌟マイクラのホワイトリストについて マイクラのホワイトリストは内部的にプレイヤーの「UUID」で管理されていますが、プレイヤー名を入力するだけで登録できるようにしています。

先ほどのWeb画面から、自身のプレイヤー名を入力して登録してみます。

SQSを見てみます。

利用可能メッセージ が 1 になっていますね。

ここで、再度EC2を起動し、ポーリングされるか見てみます。

登録したキューがポーリングされ、whitelist.jsonに反映されました。

これで、このマイクラサーバで遊ぶ準備は整いました。

マイクラにログインしてみる

ここから実際に構築したマイクラマルチサーバーにログインしてみます。

「マルチプレイ」 > 「ダイレクト接続」を選択し、サーバアドレスにEC2のパブリックIPを入力して接続します。

🌟マイクラのサーバアドレス 基本的にEC2のパブリックIPは起動/停止ごとに別のIPが振り分けられます。 ElasticIPを紐づけて固定は可能ですが、コストをかけたくないので・・・

無事にログインできました。

夜が近いので適当に村を探して寝床を確保します・・・

💰 注意 こちらはデプロイ時にMod/プラグインサーバとしてデプロイした場合の機能です。 Modやプラグインの追加も、Step1で紹介した管理コンソールから行います。アップロードしたファイルはいったんS3に格納され、EC2起動時に自動で同期される仕組みです。

S3にプラグインを投げる

今回はPaperプラグインを利用したサーバを立てました。

木こりがめんどくさいので、樹木の一括破壊プラグインを導入してみようと思います。

・Smooth Timber

https://www.spigotmc.org/resources/smoothtimber.39965

ダウンロードした.jarファイルを先ほどのWebコンソールからアップしてみる。

アップロード完了

EC2にてS3にアップしたデータを同期します。

(ユーザデータで流し込んでおいていたシェルでS3 syncとコンテナの再起動をしています)

/data/plugins にいますね。

再度、マイクラにログインしてみます。

このように、コマンドを実行すると、Server Pluginsの一覧に「SmoothTimber」が表示され、プラグインが正しく読み込まれていることが確認できました。

ここまでで、実際にサーバを起動してマイクラに接続し、Modを導入するところまで体験できました。後編では、このサーバをCDKでどのように構築しているか、インフラ定義からデプロイまで詳しく解説します。