AWS S3バケットの自動マウントのメモ

EC2インスタンスを起動させる度にS3バケットを手動でマウントするのが面倒である為、S3バケットの自動マウントを試みた。
前回のメモ、S3バケットの認識と手動マウントは以下のリンク先。
http://d.hatena.ne.jp/debslink/20180714/1531577869


当方の環境は以下のとおり。
EC2インスタンス: 1台。t2.micro (amzn2-ami-hvm-2.0.20180622.1-x86_64-gp2)
S3バケット: 1台。
IAMロール: hoge(とする)
IAMロールhogeにはAmazonS3FullAccessはアサイン済み。
リージョン: ap-northeast-1a


1.毎回毎回アンマウントとマウントを実行するのが面倒。
/etc/fstabをいじってEC2インスタンス再起動後も自動でマウントするよう設定してみた。
内容は以下のとおり。

$ cat /etc/fstab
#
UUID=76e177a9-8195-43cf-84ae-14ea371008b6     /           xfs    defaults,noatime  1   1
/mnt/swapfile  none     swap    defaults        0   0
s3fs#jpmtksvaws99 /mnt/s3 fuse _netdev,allow_other,nonempty,multireq_max=500,uid=505,gid=503 0 0

2.ここでEC2インスタンスを再起動。
再起動完了後、dfコマンドを叩いてみると...

$ df
Filesystem      Size      Used       Avail  Use%   Mounted on
devtmpfs        476M         0      476M     0%   /dev
tmpfs             493M         0      493M     0%   /dev/shm
tmpfs             493M    304K      493M     1%   /run
tmpfs             493M         0      493M      0%  /sys/fs/cgroup
/dev/xvda1     8.0G     2.7G       5.4G    34%  /
tmpfs             99M           0        99M     0%   /run/user/1000

...あれ? /mnt/s3が見えない。
EC2インスタンスからS3バケットの中を覗こうとしたら、エラーを吐いた。
/mnt/s3の中が見えない。

$ ls -la /mnt/s3 | more
ls: cannot access /mnt/s3: Transport endpoint is not connected

3.しかしmountコマンドを叩くとs3fsの行が出力された。
/mnt/s3はマウントされているように見える。

$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=487052k,nr_inodes=121763,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
:
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
s3fs on /mnt/s3 type fuse.s3fs (rw,relatime,user_id=0,group_id=0,allow_other)

4./var/log/boot.logを覗いてみると、Mounted /mnt/s3が出力されている事が分かる。

$ sudo cat /var/log/boot.log 
:
[  OK  ] Reached target Local File Systems (Pre).
         Mounting /mnt/s3...
[  OK  ] Started Activation of DM RAID sets.
[  OK  ] Reached target Local Encrypted Volumes.
[  OK  ] Mounted /mnt/s3.
[  OK  ] Reached target Local File Systems.
         Starting Create Volatile Files and Directories...
:

5.ここで/mnt/s3を一旦アンマウントし、再度マウントしてみる。

$ sudo umount /mnt/s3

$ sudo /usr/local/bin/s3fs [S3 bucket name] /mnt/s3 -o rw,allow_other,uid=1000,gid=1000,default_acl=public-read,iam_role="[IAM role name]"

6./mnt/s3がs3fsでマウントされている事が確認出来た。
しかしやりたいのは自動マウント。

$ df
Filesystem      Size      Used       Avail  Use%   Mounted on
devtmpfs        476M         0      476M     0%   /dev
tmpfs             493M         0      493M     0%   /dev/shm
tmpfs             493M    304K      493M     1%   /run
tmpfs             493M         0      493M      0%  /sys/fs/cgroup
/dev/xvda1     8.0G     2.7G       5.4G    34%  /
tmpfs             99M           0        99M     0%   /run/user/1000
s3fs               256T          0       256T     0%   /mnt/s3

7.では、/etc/rc.d/rc.local に書いてみるのはどうだろう。

sudo vi /etc/rc.d/rc.local

/usr/local/bin/s3fs [S3 bucket name] /mnt/s3 -o rw,allow_other,uid=1000,gid=1000,default_acl=public-read,iam_role="[IAM role name]"

/etc/rc.d/rc.localを開くとコメントアウト行に chmod +x /etc/rc.d/rc.localを打って実行権限を持たせる旨の記載が有る。
以下のコマンドを打ち、/etc/rc.d/rc.localスクリプトファイルに実行権限を与える。

$ ls -la /etc/rc.d/rc.local
-rw-r--r--  1 root root  613 Aug  4 21:16 rc.local

$ sudo chmod +x /etc/rc.d/rc.local

$ ls -la /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 613 Aug  4 21:16 /etc/rc.d/rc.local

8.再度EC2インスタンスを再起動。
再起動完了後、dfコマンドを叩いてみると...

$ df
Filesystem      Size      Used       Avail  Use%   Mounted on
devtmpfs        476M         0      476M     0%   /dev
tmpfs             493M         0      493M     0%   /dev/shm
tmpfs             493M    304K      493M     1%   /run
tmpfs             493M         0      493M      0%  /sys/fs/cgroup
/dev/xvda1     8.0G     2.7G       5.4G    34%  /
s3fs                256T         0       256T     0%   /mnt/s3
tmpfs               99M         0        99M     0%   /run/user/1000

/mnt/s3が見えた。
勿論、/mnt/s3配下のディレクトリやファイルも見る事が出来るのだが、ファイル10個程度を出力するまで5分前後も時間がかかった。

$ ls /mnt/s3/DJI_Spark
total 1748455
d---------   1   ec2-user ec2-user         0 Jul  6 22:58 .
drwxrwxrwx 1 ec2-user ec2-user         0 Jan  1  1970 ..
---------- 1 ec2-user ec2-user 317703683 Jul  6 23:14 20180512.mp4
---------- 1 ec2-user ec2-user 386020665 Jul  6 23:24 20180609.mp4
---------- 1 ec2-user ec2-user 357315938 Jul  6 23:11 20180616.mp4
---------- 1 ec2-user ec2-user 350183991 Jul  6 23:07 20180627.mp4
---------- 1 ec2-user ec2-user 340331528 Jul  6 23:26 20180629.mp4
: