マイクラデータパック、リソースパック開発のCI/CD環境を構築 ~準備編~

## はじめに

私の友人がMinecraftのデータパック開発をしており、「データパック開発とかでCI/CD環境があればうれしいな～」みたいなお話があったので、じゃあ、作ってみようかなという感じで作りました。
まだ検証段階でセキュリティやら色々と対応する必要がありますが、ひとまず形になりましたので、やったことを整理しました。

ちなみに、私はデータパック開発はできませんし知識もないです。ちょっとfunctionを利用してデータパックをいじれるくらいです。

## CI/CD環境構築の記事一覧
全部書くと長いので4編に分けて説明します。各編で記載されている内容をすべて実施していただければ、CI/CD環境が構築できる状態になるよう努めて参ります。
- マイクラデータパック、リソースパック開発のCI/CD環境を構築 ~準備編~
- [マイクラデータパック、リソースパック開発のCI/CD環境を構築 ~GitLab、GitLab-Runner編~ ](https://qiita.com/kkbase515/items/d2d70671ef999cc47b59)
- [マイクラデータパック、リソースパック開発のCI/CD環境を構築 ~GitLab-CI編~ ](https://qiita.com/kkbase515/items/3d1a02e107f160cdc0ab)
- マイクラデータパック、リソースパック開発のCI/CD環境を構築 ~SSL化編~ （準備中）

## CI/CD環境を構築する上での環境
今回は以下のマシンでCI/CD環境を構築していきます。基本的にLinuxであれば問題ないです。
- クラウド: AWS
- OS: Linux(AL2023)
- インスタンスタイプ: m6i.large（2コアのCPUと8GB以上のメモリを持つスペックがあればよい）

## 費用について
マシンを借りたり、クラウドを利用したりなどする人は気にするはずですので、1か月で大体どの程度の料金が発生するかを簡単に計算してみました。

以下の表は24時間31日稼働で計算したときの料金になります（1USD = 150円）
※インスタンスはスポットインスタンスを利用しています。

| 項目 | 価格 |
|:-----------|------------:|
| インスタンス利用料金（m6i.large）       |4464円 |
| EBS使用料（30GB - GP3）     | 432円|
| Route53 | 75円|
|パブリックIP使用料（2024年2月より） | 558円|
|合計|5529円|

本当にざっくり計算しただけですが、24時間起動しっぱなしでも5500円で抑えられるのは魅力的だと思います。（スポットインスタンスの料金設定がお得すぎる）
1日6時間利用するとした場合、約1800円までコストを下げることができます。さらに、週2での利用とした場合、もっとコストを下げられるでしょう。使用した分だけコストがかかるのがクラウドですので、この特徴を活用して費用を抑えましょう。

## インスタンスの作成

※ 自宅サーバできる人はこの手順をスキップしてください。

基本Linuxマシンであれば、何でもいいです。私の場合はawsを利用しているので、以下の通りにEC2インスタンスを作成しました。ちなみに、以下のスペック、ストレージはGitLabとマイクラサーバを併用したときの必要最小要件なのでこれより小さいリソースで作成することはお勧めしません。

| 項目 | 設定値 |
|:-----------|:------------|
| インスタンス名       | Mincraft_CICD|
| AMI     | Amazon Linux 2023 AMI
||(AMIID: ami-012261b9035f8f938)|
| インスタンスタイプ| m6i.large|
|キーペア | 各自好きなものを設定|
|ネットワークの設定 | デフォルト（人によっては設定）|
|セキュリティグループ |SSH, Minecraft, GitLab ※この後記載|
|ストレージ|10GB（GP3）|

## セキュリティグループ作成
必要な通信のみを許可していきます。
基本はインバウンドルールを編集します。アウトバウンドは特別な理由がない限りはデフォルトである「すべてのトラフィック」を`0.0.0.0/0`で設定してよいです。
MinecraftやGitLabのソースにプライベートIPを設定しているのは、ホストマシンがアクセスするためのものですので、各自のサブネットに合わせて設定してください。ちなみに、`172.31.0.0/16`は初期で作成されるCIDRですので、特にVPCやサブネットなどの設定をしていなければ、`172.31.0.0/16`と設定してよいと思います。

- SSH

| タイプ | プロトコル | ポート範囲 | ソース| 説明|  
|:-----------|:-----------|:-----------|:-----------|:-----------|
| SSH| TCP| 22| 自分のPCのグローバルIP|ssh用 |

- Minecraft

| タイプ | プロトコル | ポート範囲 | ソース| 説明|  
|:-----------|:-----------|:-----------|:-----------|:-----------|
| カスタムTCP| TCP| 25565| 0.0.0.0/0| Minecraftアクセス用|
| カスタムTCP| TCP| 25575| 172.31.0.0/16（人によって設定は異なります）| RCON用|

- GitLab

| タイプ | プロトコル | ポート範囲 | ソース| 説明|  
|:-----------|:-----------|:-----------|:-----------|:-----------|
| HTTP| TCP| 80| GitLab利用する人のIP <br>もしくは0.0.0.0/0| GitLab-Webサービスアクセス用|
| HTTP| TCP| 80| 172.31.0.0/16（人によって設定は異なります）| GitLab-Webサービスアクセス用|
| SSH| TCP| 22| 172.31.0.0/16（人によって設定は異なります）| ssh用（なくても動きそうな気がする）|

## docker-composeをインストール
GitLabを建てるのにdockerを使うので、dockerとdocker-composeをインストールします。

- dockerインストール
```
sudo yum install -y docker

docker -v
> Docker version 24.0.5, build ced0996
```

- docker-composeインストール
```shell
# URLはdocker/composeリポジトリで確認してください
wget https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64
chmod +x docker-compose-linux-x86_64
mv docker-compose-linux-x86_64  docker-compose
mv docker-compose /usr/local/bin/

docker-compose -v
> Docker Compose version v2.23.3
```

## java インストール

Minecraftサーバを建てるので、javaをインストールします。Amazon Linuxにはデフォルトでamazon-correttoというOpenJDKのパッケージがあるので、これを使ってインストールします。
```shell
sudo yum install -y java-21-amazon-corretto

java --version
openjdk 21.0.1 2023-10-17 LTS
OpenJDK Runtime Environment Corretto-21.0.1.12.1 (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM Corretto-21.0.1.12.1 (build 21.0.1+12-LTS, mixed mode, sharing)
```

## Route53のレコードを自動更新する設定を追加

ドメインがなくても問題ない（IPアドレスを直接叩く）場合は、この作業は実施しなくてよいです。

Elastic IPを設定していない場合、EC2インスタンスのパブリックIPはインスタンスを開始するたびに変わります。そのため、インスタンス開始時にRoute53のレコードを更新して`sample.com`のようなURLでアクセスできるようにします。なお、この設定を行うにはドメインを登録する必要があります。ドメインを持っていない人は[この記事](https://zenn.dev/hayato94087/articles/f03773b87a9837)を参考に登録してください。


レコードの自動更新については、以前投稿した記事に手順を整理しています。設定する際はこちらを参考にしてください。
[aws インスタンス開始時にRoute53のレコードのIPアドレスを自動更新する](https://qiita.com/kkbase515/items/cdd371fb7bebd9043b12)

以上でCI/CD環境を構築するための準備が完了しました。
次はGitLabとGitLab-Runner編ということで、GitLabとGitLab-Runnnerのインストールと設定方法について説明します。