Amazon Web ServiceのEC2にS3をストレージとしてs3fsにてマウントする

書いたことが無いけど最近、巷で言うクラウドであるAmazon Web Service=AWSをマイクラサーバーとして使っている。
娘と二人でマイクラをするため。いや、二人でやっているマイクラをどちらか一人でもできるようにサーバーが必要だった。そしたらなんと1年無料でAWSが使えるというではないか!
今回のテーマはAWSのEC2にS3をストレージとしてマウントする
なんだかんだうまく行っているので記録。

■背景


マイクラデータのバックアップファイルがかさばっている。
EC2の容量を圧迫してる。1年後の有料になったときに備え、なるべくEC2本体はコンパクトに小容量でやっていきたい。簡単にEC2の容量を増やしてもよいが、S3の方が使用料が安いらしい。
勉強がてらやってみる。
S3は遅い。そして、メインのデータをS3に置くとしょっちゅうアクセスがあるのでトラフィックが増えてコストに影響するかも。バックアップファイルだけをS3に置こう。
今までのUnix系の感覚からはS3をマウントしてバックアップするディレクトリをそこにリンクする。
という感じでぐぐってみた。出てくるね。

■ディレクトリのイメージ


~/MinecraftBedRockServer
|-worlds
|-backup -> link:~/mnt/S3_Minecraft/worlds_backup
/mnt/S3 ...新規作成、S3をマウントする。
Minecraft専用のS3。そもそもこのEC2はマインクラフトサーバーだからS3だけでよい
|-worlds_backup
・候補1...却下
~/mnt/S3_Minecraft ...新規作成S3をマウントする。
Minecraft専用のS3。そもそもこのEC2はマインクラフトサーバーだからS3だけでよいか?
|-worlds_backup
・候補2...却下
~/mnt/s3 ...新規作成S3をマウントする
|-Minecraft ...Minecraft以外のものが出てくるかもしれない?それは別のS3にしたほうが良い?
|-worlds_backup

■S3をマウントするための参考


候補1:マウントするツール:goofys ...の方が早いらしい
https://www.acrovision.jp/service/aws/?p=797
1. S3でバケット作成 名前:S3_Minecraft
2. IAMでロール作成 ソフトがアクセスするためのロール。WordpressでS3にアクスセスするときにも作ったものと同じ
  AmazonS3FullAccessとする
3. goofyのための?諸々のインストール
必要なものをインストール。
■Git
■golang
■goofys
以下は実行するコマンドになります
$ sudo yum -y install golang fuse git
$ export GOPATH=$HOME/go
$ go get github.com/kahing/goofys
$ go install github.com/kahing/goofys
 …下の候補のほうが名前が良かったのでこれは却下。
■候補2:マウントするツール:s3fs
  …とりあえずこちらのほうが名前がそれらしいのでこれにした。
  こっちは遅いらしい
https://qiita.com/latin1/items/aade223be36a87cbe538
AmazonLinux専用だったらいやだな?
俺のはUbuntuだ。とおもってそんなか検索するとあるね。
https://qiita.com/taito273/items/17e469373478ff38a200
0.S3 Bucket の準備
名前はminecraft-nyanpuとする。大文字NG。アンダーバーもNG。世界で一意。
1.IAM UserでIAM作成
  AmazonS3FullAccessとする
Access Key ID と Secret Access Key が表示されるので、控える。
  参考URLではグループから作っているが、USERでよいよね?
WordPressでの演習と同じにした。
s3userとする。
他、IAMRoleでもできるらしいs3fs のインストール
2.s3fs のインストール
GitHubから持ってきてビルド
ubuntuはいつものapt-get
sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
s3fsのコードをとってきてビルドしてインストール
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git
$ cd s3fs-fuse
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
Usage of /: 92.6% of 7.69GB Users logged in: 0
ディスク容量を圧迫していく…。
インストールしたあと、GitHubらはremoveした。
s3fsもrm -r した。
そして、sudo apt-get cleanとしてキャッシュも削除。
Usage of /: 90.4% of 7.69GB Users logged in: 0
■マウントポイント作成
$ sudo mkdir /mnt/s3
■IAM access keyを保存
$ echo : | sudo tee -a /etc/passwd-s3fs
$ sudo chmod 640 /etc/passwd-s3fs
■マウント
sudo s3fs -o rw,allow_other,uid=,gid=,default_acl=public-read
実際こうなる
sudo s3fs minecraft-nyanpu /mnt/s3 -o rw,allow_other,uid=1000,gid=1000,default_acl=public-read

■起動時に自動マウントがないではないか!

fstabの編集だっけ?
s3fs#bucketname /share fuse auto,rw,allow_other,use_cache=/tmp,uid=222,gid=500 0 0
#ってコメントじゃないのか?
# echo "s3fs#testubuntusvr01data /mnt/objstorage/data fuse nonempty,allow_other,url=http://inter-st.gmocloud.com,passwd_file=/etc/s3fs/s3fspasswd 0 0" >> fstab
s3fs#[バケット名] [マウントするディレクトリ] fuse allow_other,use_cache=/tmp,uid=[UID],gid=[GID],passwd_file=/etc/passwd-s3fs 0 0
s3fs#[バケット名]…ってなんかおかしくない?おかしくないみたい。

■結果

マウントはうまくいったが、ディレクトリに表示や移動、ファイルの読み込みはうまく行くが、書き込みや新規作成がうまくいかない。
S3のACLを有効にしてみたりしたが、どういじってもだめ。

■再起動してみた。

次の日、マイクラでトラップを3日ずっと動かしていたのでCPUクレジットが0になっていた。
以前はCPUクレイジットを消費するほどの負荷ではなかったが、忘れ物のトーチを外してから湧く数も増えて負荷がマイナスになったみたい。
CPUクレジットがほぼ0になってたのでついでに再起動してみた。
17に回復してから再起動したが、17のままだった。30より大きいときは30に下がるけど、30に増えることはないみたい。
fstabに書いているs3のマウントはうまくいった。なぜだかできてなかったファイルの書き出しもできるようになった。

■推定要因


1.コマンドではうまくいかず、fstabでうまく行く
2.S3のACL有効の設定のおかげ、反映にタイムラグがあるか再起動が必要か?
 WordPreの演習もこんな感じでいつの間にかうまく行った。
今度、ACLを外して様子を見よう。
//以下ログ
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.11.0-1028-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Feb 4 13:17:59 JST 2022
System load: 1.04 Processes: 124
Usage of /: 77.7% of 7.69GB Users logged in: 0
Memory usage: 19% IPv4 address for eth0: 172.31.45.138
Swap usage: 0%
* Ubuntu Pro delivers the most comprehensive open source security and
compliance features.
https://ubuntu.com/aws/pro
26 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
Last login: Fri Feb 4 10:05:08 2022 from 121.103.0.23
ubuntu@ip-172-31-45-138:~$ mount
/dev/xvda1 on / type ext4 (rw,relatime,discard)
devtmpfs on /dev type devtmpfs (rw,relatime,size=489256k,nr_inodes=122314,mode=755,inode64)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
:

:
/var/lib/snapd/snaps/snapd_14549.snap on /snap/snapd/14549 type squashfs (ro,nodev,relatime,x-gdu.hide)
s3fs on /mnt/s3 type fuse.s3fs (rw,relatime,user_id=0,group_id=0,allow_other) .....マウントできている
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=99172k,mode=700,uid=1000,gid=1000,inode64)
tmpfs on /run/snapd/ns type tmpfs (rw,nosuid,nodev,size=99176k,mode=755,inode64)
ubuntu@ip-172-31-45-138:~$ ls /mnt/s3
levelname.txt world_icon.jpeg worlds_backup
ubuntu@ip-172-31-45-138:~$ touch /mnt/s3/xxx ...「xxx」のファイルを作ってみる
ubuntu@ip-172-31-45-138:~$ ls
HowToUseRemoteXonSsh.txt MinecraftServerBedrock
ubuntu@ip-172-31-45-138:~$ ls /mnt/s3
levelname.txt world_icon.jpeg worlds_backup xxx ...ファイル「xxx」が書けた

■検証する

せっかくだから検証しよう。
1.コマンドラインとfstabの差か?
------
unmountしてまたコマンドラインでマウントしてみる。
ubuntu@ip-172-31-45-138:~$ sudo umount /mnt/s3
ubuntu@ip-172-31-45-138:~$ ls /mnt/s3
ubuntu@ip-172-31-45-138:~$ sudo s3fs minecraft-nyanpu /mnt/s3 -o rw,allow_other,uid=1000,gid=1000,default_acl=public-read
ubuntu@ip-172-31-45-138:~$ ls /mnt/s3
levelname.txt world_icon.jpeg worlds_backup xxx
ubuntu@ip-172-31-45-138:~$ touch /mnt/s3/xxx2
touch: failed to close '/mnt/s3/xxx2': Operation not permitted
ubuntu@ip-172-31-45-138:~$
-----
できない。
コマンドラインが悪いみたい。
2.ACL無効に戻して再起動=fstabしてみる
levelname.txt world_icon.jpeg worlds_backup xxx
ubuntu@ip-172-31-45-138:~$ touch /mnt/s3/xxx2
ubuntu@ip-172-31-45-138:~$
ubuntu@ip-172-31-45-138:~$
ubuntu@ip-172-31-45-138:~$ ls /mnt/s3
levelname.txt world_icon.jpeg worlds_backup xxx xxx2
ubuntu@ip-172-31-45-138:~$
できた。
結論、fstabのものだけただしく動く。
コマンドラインはバグか?引数が違うのか?

■本命のバックアップに使う

ln -s /mnt/s3/worlds_backup worlds/backup
バックアップシェルスクリプトを変更して
バックアップファイルをworlds/backup/下にする。
マインクラフトスクリプトを起動してバックアップ時間になるまで待つ。
S3のコンソールで確認OK
コマンドラインでファイルができるているこことを確認、OK
ubuntu@ip-172-31-45-138:~/MinecraftServerBedrock$ ls -l worlds/backup/
total 2065875
-rw-rw-r-- 1 ubuntu ubuntu 92340073 Feb 4 07:00 mc_backup_hourly_20220204-070002.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 92343777 Feb 4 07:30 mc_backup_hourly_20220204-073001.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 92443911 Feb 4 08:00 mc_backup_hourly_20220204-080001.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 92561005 Feb 4 08:30 mc_backup_hourly_20220204-083001.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 92660318 Feb 4 09:00 mc_backup_hourly_20220204-090001.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 92779749 Feb 4 09:30 mc_backup_hourly_20220204-093001.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 92670514 Feb 4 10:00 mc_backup_hourly_20220204-100001.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 92435645 Feb 4 14:00 mc_backup_hourly_20220204-140001.tar.gz

■容量が増えたので(上限容量は使ったしこ?)バックアップの日数を増やしてもよいが、
30分おきのものは死んだときの巻き戻しなので不要だろう。
むしろ、デイリーバックアップを復活させて、1週間位とるか?

コメントを残す