新卒一年目がAWSで統合版Minecraftサーバーを構築した話（無料枠編）

## はじめに
こんにちは。新卒一年目エンジニアのkotenpanと申します。
研修で実施したAWSの勉強が思いのほか楽しかったため、実際にサーバーを立ててみようと思い、友達とみんなでできるMinecraft（統合版）というゲームのサーバーを構築しました。
この記事では費用を最小限（無料）でできる範囲でのサーバー構築について書いていこうと思います。
以下の記事を参考にしました。
- [AWSを利用して統合版Minecraftサーバーを可能な限りお金をかけずに構築・運用したい](https://qiita.com/Hebbi554689332/items/c9718a414c732a0d66f1)

## 今回の構築によって実現できること
- ~6人で同時に遊べる
- どの媒体からでも接続できる
- 24時間自由に出入りすることができる
- 費用が一切かからない（アカウント設定してから1年間）

## 無料利用枠の範囲内におけるサーバー構築
Amazon EC2はアカウント設定を行ってから12ヶ月間、ひと月あたり750時間利用できる無料枠が設定されています（2024/07/26 時点）。それを利用してサーバーを構築していきます。

### 使用したもの
- Amazon EC2
- Linux screen コマンド

### Step1. EC2インスタンスの起動設定
アベイラビリティゾーンを東京（ap-northeast-1）に設定し、インスタンスを設定していきます。
#### アプリケーション・OS イメージ・インスタンスタイプ
アプリケーションおよび OS イメージ：Ubuntu Server 24.04 LTS (HVM)
インスタンスタイプ：t2.micro

#### 新しいキーペアを作成し、キーペアを設定
タイプ：ED25519
キーファイル形式：.pem
ここで秘密鍵をダウンロードしておきましょう。

#### セキュリティグループを作成する
セキュリティグループ名は分かりやすいように設定する。（例: minecraft_bedrock）
アウトバウンドルールを二つ設定する。
- タイプ：SSH　送信先：マイIP
- タイプ：カスタムUDP　ポート範囲：19132　送信先：Anywhere-IPv4
※ Java版の場合はカスタムTCPでポート範囲を25565に設定

他の設定はデフォルトのままで大丈夫です。設定ができたらインスタンスを起動しましょう。

:::note
今回構築した無料枠EC2インスタンスは停止する必要がありません。ずっと起動した状態で大丈夫です。再起動した場合、EC2のパブリックIPアドレスが変わってしまうので少し面倒くさいです。
インスタンスを再起動する必要があり、かつIPアドレスが変わってほしくない場合はElastic IPの設定をしてください。インスタンスが停止している時間の分だけElastic IPの費用（$0.005/h）が課金されます。
:::
### Step2. EC2インスタンスにMinecraftサーバーを導入
#### EC2インスタンスにSSH接続する
今回はWindows Subsystem For Linux（WSL）からSSH接続する方法を紹介します。
WSLのインストールに関しては他の記事を参考にして下さい。

SSH接続のためにダウンロードした秘密鍵ファイルを適した場所に移動させます。Ubuntuを起動し、以下のコマンドをひとつずつ実行していきます。
```bash
# ホームディレクトリに移動
$ cd ~

# .sshディレクトリの作成
$ mkdir ~/.ssh

# ダウンロードした秘密鍵ファイルを作成した.sshディレクトリに移動
# {username}と{秘密鍵}は自分のものに書き換える
$ mv /mnt/c/Users/{username}/Downloads/{秘密鍵}.pem ~/.ssh

# 秘密鍵ファイルに対してアクセス権限を変更
$ chmod 600 ~/.ssh/{秘密鍵}.pem
```
秘密鍵の準備ができたので、EC2インスタンスにSSH接続していきます。
EC2インスタンスの画面では、右上にボタンがいくつかあると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840383/a3b98c64-4919-3cbb-bf46-3be3064b1447.png)

作成したEC2インスタンスを選択したあと、接続ボタンを押し、SSHクライアントのタブ内の一番下にある（例：）の部分のコマンドをコピーしましょう。（下のコマンドみたいな感じのやつ）

```bash
$ ssh -i "{秘密鍵}.pem" ubuntu@ec2-{グローバルIPv4アドレス}.ap-northeast-1.compute.amazonaws.com
```

WSLに戻ってSSH接続をしていきます。以下のコマンドを実行してください。
```bash
# ~/.ssh に移動
$ cd ~/.ssh

# コピーしたコマンドを実行しSSH接続する
$ ssh -i "{秘密鍵}.pem" ubuntu@ec2-{グローバルIPv4アドレス}.ap-northeast-1.compute.amazonaws.com
```

これでEC2インスタンスに接続できました。

#### Minecraft専用サーバーソフトウェアのダウンロードして起動する
Minecraft用のサーバーソフトウェアをダウンロードしていきます。リンクは[こちら](https://www.minecraft.net/ja-jp/download/server/bedrock)にあります。Ubuntu (Linux) 用 Minecraft 専用サーバーのソフトウェアのダウンロードボタンを右クリックし、「リンクのアドレスをコピー」してください。

```bash
# ホームディレクトリに移動
$ cd ~

# minecraftという名のディレクトリを作成
$ mkdir minecraft

# minecraftディレクトリに移動
$ cd minecraft

# サーバーソフトウェアのダウンロード（コピーしたリンクを貼り付ける）
$ wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.21.3.01.zip

# unzipをインストール
$ sudo apt install -y unzip

# zipファイルを解凍
$ unzip bedrock-server-1.21.3.01.zip

# Minecraftサーバーを起動する
$ LD_LIBRARY_PATH=. ./bedrock_server
```

上記のコマンドを一つずつ実行することでサーバーに接続できる状態となります。
Minecraft（統合版）を開き、「サーバーを追加」においてサーバーアドレスにグローバルIPv4アドレス、ポートに19132を書きこんで保存するとワールドに入れます。

#### しかし
この状態ではSSH接続を切断するとMinecraftサーバーも切断されてしまいます。
これを回避するためにscreenコマンドを利用します。
詳しい説明はこちらの記事で解説されているので参考にしてください。
- [AWSを利用して統合版Minecraftサーバーを可能な限りお金をかけずに構築・運用したい](https://qiita.com/Hebbi554689332/items/c9718a414c732a0d66f1)

## まとめ
今回は無料枠のみでMinecraftサーバーを構築してみました。AWSを勉強していて実際に触ってみたい人にはいい教材なのかなと思っています。自分にとってもEC2インスタンスのいい勉強になったと思います。
少人数のグループでMinecraftを遊びたい場合は今回の構築方法を使えば無料でマルチプレイできるのでハッピーになれます。
次回は無料枠でのスペックが足りなくなってしまった場合に、LambdaやEventBridgeを利用したサーバー強化＋自動起動・停止機能について解説をする予定です。