一晩で街の裏側が更地になった


こんにちは!キヨナガです。

AWSのサービスを使ってマイクラサーバーを立ち上げて身内と遊んだので、そのときに掛かった諸費用について公開したいと思います。

はじめに

マイクラサーバーの立て方とかはいくらでも記事があるのですが、以下のような記載がなかったため、備忘録として残そうと思います。

  • 実際立てたらどれくらい費用が掛かったか
  • スペック的にはどれくらいが必要か
  • 費用を抑えるためにどのような取り組みをすべきか

※なお、本記事では具体的なコマンドやソースコードについては述べません。ご了承ください。

今回の構成・スペックについて

費用の前に、今回の使用した構成を説明します。
ざっくり、以下のような構成になっています。

AWS構成図

仕組みとしては以下のようになっています。

  1. Discordで特定のコマンドを打つことにより、EC2インスタンス①のbotが反応する
  2. EC2インスタンス①内のbotがLambdaにEC2インスタンス②を起動・停止する関数を実行させる
  3. Lambdaはそれを受け取り、EC2インスタンス②を起動・停止させる。
    • EC2インスタンス②の起動時、worldフォルダの中身をS3バケットにコピーし、バックアップを取る。

EC2インスタンス①

  • 仮想サーバーサービスです。
  • Discordのbotが入っています。このbotがいるチャンネルで特定のコマンドを入力することで様々な機能が使えます。自作。
    • 今回は後述するEC2②を起動・停止させるコマンドの受け付けに使用しています。
    • ほかにも、サイコロを振る機能、ゲーム『valorant』のマップピックを勝手にしてくれる機能、競馬の重賞が近くなると勝手にスレッドを建てる機能などが入っています。
  • スペックはt2.micro。リージョンは無料利用枠を考えus-east2(オハイオ)です。

Lambda

  • サーバーレスなイベント駆動型のコンピューティングサービスです。
  • 今回は、EC2②を起動や停止させるために使用します。

EC2インスタンス②

  • 仮想サーバーサービスです。
  • この中にマインクラフト(バニラ) が入っています。
    • インスタンスが起動すると、自動でMinecraftのサーバーが立ち上がるように設定しています。
  • スペックはt3a.medium。リージョンは通信速度を考えap-northeast1(東京)です。
    • 5~6人でプレイしながらチャンクを大量に読み込んだりするとちょっと重くなるみたいです。ゲームできないほどではないかな…というくらい。
    • 一度t3a.smallに変更してみたのですが、起動段階でサーバーが落ちてしまったので、おそらくここが最低値なんじゃないかなと思います。

Elastic IP

  • 固定IPアドレスを提供するサービスです。
  • マインクラフトはIP(orドメイン)を指定して接続します。EIPを使用することで固定ができます。
    • 起動する度にIPを取得して通知すればよいので不要ではあるのですが、プレイヤーにいちいちIPを設定させるのが面倒だったため採用。

S3 bucket

  • データを保存できる、いわゆるストレージサービスです。
  • アクセス頻度や重要性を考え、ストレージクラスはOneZone-IAを採用しました。
  • リージョンはap-northeast1(東京)ですが、別に安いリージョンでも良かったかも。

ほか、使用料金に応じてアラートを出してくれるBudgetや、Budgetや各Lambda関数などに権限を与えるIAMサービスロールなどを使用していますが、本題ではない&今回は料金が発生しなかったため割愛します。

費用

一ヶ月稼働させたところ、以下のような費用でした。

項目 費用
EC2インスタンス②の起動 202.37時間 $9.92
EC2インスタンス②のCPUクレジット 27.735vCPU-Hrs $1.39
ElasticIPがアタッチされていない時間 490.4時間 $2.45
S3バケットに対する書き込み/削除 9.7778GB/月 $0.11
S3バケットに対するリクエスト 3815リクエスト $0.04
S3バケットに対するアクセス 5.918GB/月 $0.07
10% $1.40
合計 $15.38

というわけで合計は15.38ドル。この記事を書いている日は1ドル≒150円なので、だいたい2300円でした。税金と円安マジで許せねえ

無料利用枠の期限切れやバックアップストレージの肥大化が予想されるため、工夫しない限りはどんどん費用も上がっていくと思うので、安くするにはなにか対策を打たないとだめそうですね…

おわりに

AWSを使ってマインクラフトのマルチサーバーを建ててみました。

正直値段的に見たらRealmsのほうが良さそうな気はしますが、自分の場合はAWSの勝手を知りたかったこともあるので利用していました。また、MODはRealmsだとできないので、そのために建てる必要がある方もいるかも。
ただし、MODを入れると重くなるのでインスタンスタイプを考える必要があると思いますが…。
AWSの練習ついでにマイクラの鯖を建ててみたい!という人や、MODに興味がある方は是非。

おまけ:費用を抑えるための取り組み

自分がおこなった費用を抑えるための取り組みです。他にも策はあると思うので、参考程度にしてください。

  • 使用後はインスタンスを停止して貰うように周知する
    • 起動と同様、停止するコマンドもDiscord経由で実行できるようにしておく
  • 軽量のサーバーを立てる
    • 私はオリジナルのMinecraftではなく、Spigotという軽量のサーバーを立てました。
    • EC2インスタンスはCPU使用率×起動時間で料金が掛かるので、サーバーが軽くなる上に費用も抑えられるので両得だと思います。
  • 停止忘れ回避のため、起動後3時間でインスタンスを自動停止するタイマーをEC2①に用意する(再起動がめんどくさいため現在は削除済)
    • 「サーバー内のログイン人数かログ調べて自動停止させたら良くね?」とは思う。