まかろぐ

PCゲームのこととかWeb関連のこと

ARKのサーバーをAWSで立てる (5)運用上の注意点など

この記事では運用上の注意点やdiscord通知などなど雑多な情報を共有します。

インスタンスの稼働

既にご存知だと思いますが、インスタンスは稼働時間に応じて料金が発生するので、必要ない場合は必ずインスタンスを停止させてください。

f:id:oosi0226:20200312093846p:plain

(右クリックから停止を選択。 終了 だとサーバ消えちゃいます)

なお、Webコンソールを開きっぱなしだとリロードが走って操作できていない場合があるので、必ず止まったことを確認するようにしてください。

スマホからEC2操作

iPhoneでしか確認していないのですが、 iOSAWS Console というアプリを使うことで、 スマホからインスタンスの起動・停止・稼働状況の確認などが可能になります。

今どきのサーバ管理者って感じがしてちょっと楽しい

EC2のIPアドレス

基本的にはインスタンスを起動し直すごとにサーバーのPublic IPは変わってしまいます。

そのため、ARKのゲーム内のお気に入りサーバーとかに検索しても、起動し直すと出てこなくなると思います。。

ゲーム内のサーバー検索は反映に時間がかかるので、discord通知(後述)などで接続可能になったら他のメンバーに知らせてあげるのがいいかもです。

IPを固定したいという方は、EC2に関連するAWSのサービスとして、IPを固定することができるElastic IPというのがあります。

料金はインスタンスを停止している時間に応じて$0.005/時間 が発生します。日本円で月¥400くらいでしょうか。 これくらいのコストをかけてもいいという方であれば利用してみてください。

restart時の注意点

main.cfg などの変更を反映するためには arkmanager restart による再起動が必要になります。

再起動を行う際にはその前に arkmanager saveworld でデータ保存することをおすすめします。

というのも、サーバーのデータ保存は15分間隔で行なっており、再起動でそこまでの内容が消えるためです。この間隔は設定で変更可能ですが、保存時に数秒のラグが発生するので、そこの快適さとのトレードオフとなります。

Discord通知

ark server toolsにはサーバーの起動時などにdiscordでメッセージを通知する機能があります。

詳しい使い方は https://github.com/FezVrasta/ark-server-tools#configuration-filesnotifyTemplate のあたりをご確認ください。

簡単に使い方を説明します。

main.cfg に下記のように追記します。

discordWebhookURL=https://discordapp.com/api/webhooks/68*****/50xq***********
notifyTemplate="ARKサーバー {msg}"
notifyMsgStarting="起動中..." # 起動中メッセージ
notifyMsgServerUp="起動しました" # 起動後メッセージ(接続可能)

流れてくるメッセージとしては、 ARKサーバー 起動中... などになります。

  • discordWebhookURL はDiscordの通知したいチャンネルを右クリック > 編集 > ウェブフック からURLが取得可能です。
    • こいつに所定の形式でリクエストを送ることで通知が送れます
  • notifyTemplate の部分が通知メッセージのベースとなります。
  • {msg} は通知タイミングによって、 notifyMsgServerUp などに設定したコメントが入ってきます。
  • サーバー終了時の通知については、インスタンスをブチッと終了させるため動作しません。。

Discord通知(Advanced)

こちらは結論からいうとできませんでした。

本当は通知のときに steam://のリンクを飛ばしてメンバーが接続できるようにしてあげたいです。

notifyCommand の設定を使うと、各通知タイミングで任意のshellコマンドを実行することができます。

なのですが、steamリンクを取得する際に arkmanager status を実行する必要があり、このコマンドもmain.cfgを参照するので、コマンド実行が無限ループしてしまいうまくいきません。

シェルでやろうとしたのはこんな感じ(うまくいきません)

link=$(arkmanager status | grep Steam | awk -F':  ' '{print $2}' | sed -E "s/"$'\E'"\[([0-9]{1,2}(;[0-9]{1,2})*)?m//g")

curl --request POST --url 'https://discordapp.com/api/webhooks/68..' --header 'content-type: application/json' --data '{"content" : "server is up '"${link}"'" }'

やろうとするならAWS LambdaでIP通知するスクリプト仕込むとよさげなのですが、僕はまだ使えませんでした・・誰か教えてください。