🗜️
マイクラサーバーの自動停止の仕組みをlambdaで作る
最近EC2にマイクラサーバーを立てて家族で遊んでいるのですが、たびたびインスタンスの停止を忘れ、ムダな課金が発生してました。これはまずいと、自動停止の仕組みを作ってみたので紹介です。
🛠️ 作ったもの
以下の要件を満たす仕組みをlambdaで作りました。
- 1時間に1回、各サーバーのワールドのオンラインユーザー人数をチェック
- もしオンラインユーザーが0人の場合は対象のEC2インスタンスを停止する。
🧑💻 実装紹介
手軽にlambdaを開発できるserverless frameworkを使って実装しました。
これから紹介するコードは以下のリポジトリで公開しています。リポジトリをcloneして、READMEの通りにデプロイすればすぐに試せます。
マインクラフトの状態確認とEC2の停止
以下の関数で、環境変数で設定している情報(MC_SERVERS)をもとに、各サーバーの状態を確認し、オンラインのユーザーが0人の場合はEC2を停止しています。
MC_SERVERSは以下の型の配列です。
また、マイクラサーバーの状態確認にはmine-craft-protocolというnpmのping関数を使っています。他にも色々な操作ができて便利そうです。
定期実行
1時間に1回の定期実行にはEventBridgeを使っています。serverless frameworkではserverless.ymlで以下のように設定するだけでOKです。
おわりに
serverless Frameworkがとても便利で、サクッとできて良かったです。これで課金に怯えずマイクラを心置きなく楽しめそうです。
Discussion