GCPでARKサーバーを作った！

こんにちは！GxPの肥後です
この記事は[グロースエクスパートナーズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/gxp) 17日目です！
今回はARKというゲームがやりたく、勉強もかねてクラウドでゲームサーバーを構築してみました！
## ARKとは？
ARK: Survival Evolvedと名前で恐竜のいる島に裸一貫から始まるオープンワールドのサバイバルゲームです
配信者がやっているのを見て自分も友人たちと遊びたかったので、みんなで遊べるようにサーバーを構築します！
## GCPを選んだ理由
* 初回登録を行えば300ドルのクレジットが無料で付いてくる
* プリエンプティブを有効にすることで大幅な割引がつく

## 使うサービス
* GCE (Google Compute Engine)
* VPCネットワークのファイアウォールルール

## GCE構築
まずはGCPコンソールからCompute Engine > VMインスタンスの項目を選択し、インスタンスを作成しましょう
以下はインスタンス作成画面
![スクリーンショット 2022-11-27 131117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612391/713ca8c7-55b4-101a-3e6c-8ec488af4d06.png)

名前は自由に決めてもらってリージョンやゾーンは好きなところで良いのですが
費用を節約したいのでアメリカにサーバーを作ろうと思います
CO2マークがついててECOそうなのでオレゴンを選択しました
マシンタイプは１人でやるならメモリ8GB程度で良いと思います

OSは**Ubuntu 18.04 LTS**を使用するのでブートディスクからOSイメージを変更しましょう!
また**ディスク容量は100GB**に変更します
画像は10GBになってます
![スクリーンショット 2022-11-27 131758.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612391/0274d549-5c5e-a120-66b1-b0fd18d6bafa.png)


次は可用性ポリシーでVMプロビジョニングモデルをスポットに選択します
インスタンス作成画面の下に行くと詳細オプションで色々閉じているものがありますが
管理を押下して展開し以下の画像のように設定します
![スクリーンショット 2022-11-27 132059.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612391/22487161-a35e-6168-9fc2-8adbf27593b1.png)

これでプリエンプティブを有効にできたので大幅な割引を得られます
24時間常用したい場合は【標準】で設定してください
この設定を行い月間予測を見てみるとめちゃくちゃ割引されていますね！！！
10GBの設定ですが100GBだと$28くらいになります！
![スクリーンショット 2022-11-27 132415.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612391/790b9dfd-8887-ae63-ae23-2087e9cb335f.png)

## サーバー構築
インスタンスを起動してSSHで接続します
まぁ、まずはおまじない
```
sudo apt-get update && sudo apt-get upgrade
```
ASMはsteamユーザーで動かすことが前提となっているようです
※ARK Server Manager（ASM）とは　[公式サイト](https://wikiwiki.jp/arkse/%E6%A7%8B%E7%AF%89%E3%81%AE%E6%96%B9%E6%B3%95#af313eea)から引用
>通称ASM、Windows版のみですがSteamCMDで必要になる各種設定ファイルの膨大な記述をGUIにより行うことが可能です

というわけで、ユーザー作成を行います
```
sudo useradd -m steam
```
steamユーザーをsudoグループに登録
```
sudo usermod -G sudo steam
```
ユーザー切り替え
これは飛ばしてもよいです
steamユーザーのホームディレクトリに入りそこに必要なものをインストールできればOKです
```
sudo -u steam bash
```

CUI環境でGUIソフトを起動したいのであればi386 アーキテクチャのパッケージが必要らしいです
以下コマンド
```
sudo dpkg --add-architecture i386
```
次のコマンド
```
sudo apt-get install lib32gcc1
```
インストールが終われば以下を実行
```
sudo apt-get update
```

この後にSteamを入れましょう！
```
sudo apt-get install steam
```
利用規約に同意する画面がでると思いますので同意します
次はSteamCMDをインストールです！
```
sudo apt-get install steamcmd
```
インストール完了後
arkserverをのディレクトリを作ります
```
mkdir arkserver
```
ASMをインストール
```
curl -sL http://git.io/vtf5N | sudo bash -s steam
```

これでサーバー構築は完了です！
あとはゲームの設定をして起動するだけですね
その設定は割愛します
## ポート開放
起動する前に必要なことがあります
それはポート開放です！！！！
ufwコマンドで実施してもよいのですが、
22番ポートを開け忘れるととんでもないことが起きますね

そういう設定をGUIで行えるVPCネットワークという便利なサービスがGCPにあるわけです
やってみましょう！！
VPCネットワーク > ファイアウォールルール > ファイアウォール ルールの作成
 ![スクリーンショット 2022-11-27 140756.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612391/0376dcc9-ac16-e614-e31c-a19137b387f9.png)

ターゲットタグには【ark】とつけときましょう
ネットワーク上のすべてのインスタンスにすると後述する設定が不要になります
これでARKのファイアウォールルールだよということが分かりやすくなりますね
IPv4範囲ですがこれは0.0.0.0/0にします
来る者拒まず去る者追わずてきなことにしておきます
複数人でやる人が決まっているならそのIPにしても良いと思います
こんな感じで作成します
![スクリーンショット 2022-11-27 143730.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612391/8a9b8508-5303-ad4d-6e11-4a75fd13b793.png)

開放しているポートはゲーム側が初期設定を用意してくれているのでそれを指定します
このファイアウォールルールを作成したVMインスタンスに適用させなければなりません
GCEに行きVMインスタンスを編集しましょう
そこでネットワークタグという箇所がありますので、【ark】を設定し保存します
![スクリーンショット 2022-11-27 144013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612391/ff1c95da-115e-5633-a9ab-b0fa69768834.png)

## サーバー起動
これで準備は整いました
SSHしたVMインスタンスで以下コマンドを実行しましょう
```
sudo arkmanager start
```
5分か10分ほど待つとサーバーが起動し入れるようになります
## 感想
トリケラトプスを捕獲して一緒に島を駆け回ったり
強力なボスがいるので、ティラノサウルス10体くらい引き連れて戦いにいったり
プテラノドンで空をとぶことだってできます！
ぜひこの機会にサーバーを構築してARKを遊んでみてください！

## 最後に
ARKが遊びたくて構築しましたが色々やりたいことはたくさんあります
VMを起動した時点でASM起動をさせたりMAPごとに環境を分けて構築したりと
Terraformを使って構築すると楽になるとと思いますので、それもやってみたいと思っています