マインクラフト、たまーに遊ぶと面白いっす。
最近まではOracleCloudの無料Armインスタンス(4OCPU/24GBメモリ)で、
半ば強引に統合版サーバを動かしていた。
その時の記事が↓
これはこれでDockerで動かしていたのでアップデートは簡単な運用ができていたんだけど、
やはりMobというか村人がたくさんいるような環境だとカクカクしていた。
メモリ24GBで動かしていたけど、Armプロセッサでx86をエミュレートしているのか、
すごくもっさりしていたのよね。
特にOCIでサーバを使い続けることで不満はないんだけど、
AWSでサーバレスに実装できる仕組みもあるということで、
AWSの環境構築がてら、マイクラの環境も移行できたっていうお話。
詳細はGitHubを参照。
OCI上にサーバ環境を作る時点で、この仕組みがあることは知っていたのだけど、
当時はAWSのことが今よりも理解できていなかったので、
ECS??ナニソレ???状態だったw
AWS資格をたくさん取った今ではECSもそれなりに理解できているので、
せっかくなので自分でAWS環境を作ってみよう、と思った次第でもある。
アーキテクチャ構成図、動作仕様
出来上がったアーキテクチャはこんな感じ。
リージョンは大阪を選んだ。
特に理由はないw
利用時の動作は以下の通り。
①Minecraftのサーバ(FQDN名指定)にアクセスしようとするがエラーになる
②DNSクエリをトリガーにしてFargateタスクの統合版サーバおよび監視サーバを起動させる
③監視サーバがFargateのパブリックIPを取得して、Route53上のDNSレコードを更新
④続けてサーバ起動完了をSNSで通知
⑤マイクラで遊ぶ(・∀・)
この①〜⑤までの流れが1分程度なので全然許容範囲内である。
ゲーム終了後はFargateタスクを停止するLambdaを実行するか、
最後のプレイヤーが切断して20分後に自動で停止される。
これらの実際の動きをゲーム画面を交えて記載する。
まず①として、Minecraftを起動してサーバにアクセスしようとする。
この「mine」というのがAWSで実装した統合版サーバ。
が、当然ながら統合版サーバは起動していないので繋がらない。
しばらくすると、以下のようなメッセージがSMSで通知される。これが④。
もう一度、統合版サーバに繋ぐと無事に接続できた(・∀・)
スペックは1vCPU/6GBメモリにしてみたけど、まさに快適。
OCIの時よりサクサクだったw
少人数でやる分には十分すぎるぐらい。
もう少し低めでもいいかな?
あとは気持ち程度でEFSをバックアップするためにAWS Backupを利用。
元々OCIで遊んでいたサーバのデータをS3にアップロードしていたので、
DataSyncを用いてS3→EFSによるデータ移行を実施。
サーバ起動・停止は手動でも実行できるように
サーバへのDNSクエリを起動するトリガーとしているが、
実際はLambdaを実行しているだけに過ぎないので、
直接Lambdaを実行してFargateを起動・停止させるようにした。
最近のLambdaは関数URLを設定することで、API Gatewayを利用することなく
APIチックにLambdaを実行させることができるので、
そのURLに対してcurlを実行するようにiOSのショートカットに実装。
サーバで遊ぶ時にはショートカットでサーバを起動、
遊び終わったらショートカットでサーバを停止、という運用でも問題ないかな?
どれぐらいコストかかったか?
まずは見積。
最低限発生するコストとしては、
- Route 53のホストゾーン費用($0.50)
- ECS費用($1.67)※1vCPU/6GBを20時間/月動かした場合
EFSおよびBackupは5GBまでなら無料利用枠の範囲。
BackupはS3と同じ扱いだと思ってるけど、無料利用枠の範囲外ならスミマセン。
ECSはFartageをスポット利用すれば、さらにコストが下げられる。
EFSも1ゾーンIAにすれば同様にコストが下がる。
で、実際に発生したコストは以下の通り。
10/7:$2.04
10/8:$0.92
と、初期構築を行った10/7だけコストがそれなりにかかっているが、
10/8には2時間だけプレイしてこの値段。
ECSだけで見たら$0.05しか掛かっていないので、
毎週末にがっつり遊んだとしても月に$10前後じゃないかな。
ちなみに俺の環境はAWSクレジットをいくらかチャージしているので、
多少費用が発生しても0円にできているw
世の中にはマインクラフト専用のレンタルサーバも提供されており、
相応のスペックを用意すると月1,000円以上はかかるので、
ちょこっとだけサーバで遊びたい場合とかはAWSに立てた方がリーズナブルな気がする。
というよりも、そもそもEC2で統合サーバを立てた方がもっと楽に実装できると思うwwww
EC2だとAWSエンジニアとしてはつまらんので、どうしてもコンテナとして動かしてみたかった。
記事が長くなったので、概要編としてここまで。
次回は実際にAWS上に環境を構築する内容を書こうと思う。
---------------------------
0 件のコメント:
コメントを投稿