EC2 (Linux) からS3は、AWSコマンドラインインターフェース(CLI) を使わないと操作できないようだ。
これだと使いにくい。
直接マウントする方法として提供されているのが、オープンソースのs3fsだ。
s3fs (s3fs-fuse amazon linux) とは
s3fsとは、オープンソースで開発されている Amazon S3のバケットをファイルシステムとしてマウントできる仕組みです。
これを用いると、LinuxからS3を通常のファイルシステムのようにマウントして利用することができます。
s3fs の読み方は、エススリーエフエスです。
s3fsの公式サイトはコチラです。
・https://github.com/s3fs-fuse/s3fs-fuse
FUSEとは、Filesystem in Userspaceのことです。
s3fsの使い方、インストールしてマウントする手順
あらかじめ、AmaozonのIAMでアクセスキーIDとシークレットアクセスキーを作成しておきます。
IAMでアクセスキーIDとシークレットアクセスキーを作成する方法は以下の通りです。
・https://urashita.com/archives/32916
s3fsをダウンロードしてビルドします。
1 2 3 4 5 6 7 |
$ sudo yum install -y libxml2-devel libcurl-devel fuse fuse-devel openssl-devel gcc-c++ automake git git clone https://github.com/s3fs-fuse/s3fs-fuse.git $ cd s3fs-fuse $ ./autogen.sh $ ./configure $ make $ sudo make install |
アクセスキーIDとシークレットアクセスキーを /etc/passwd-s3fs に書き込みます。
/mnt/s3 に Amazon S3のs3-bucket1 をマウントします。
再起動してもマウントされるように、/etc/fstab に設定を書き込みます。
1 2 3 4 5 6 7 |
$ sudo sh -c "echo 'aws_access_key_id:aws_secret_access_key' > /etc/passwd-s3fs" $ sudo chmod 640 /etc/passwd-s3fs $ sudo mkdir /mnt/s3 $ echo "s3fs#s3-bucket1 /mnt/s3 fuse allow_other,use_cache=/tmp,uid=500,gid=500,passwd_file=/etc/passwd-s3fs 0 0" | sudo tee -a /etc/fstab $ sudo mount -a |
リブートして s3fs が /mnt/s3 にマウントされていることを確認します。
1 2 3 4 5 6 7 8 9 |
$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 7.6G 0 7.6G 0% /dev tmpfs 7.7G 0 7.7G 0% /dev/shm tmpfs 7.7G 496K 7.7G 1% /run tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup /dev/nvme0n1p1 100G 3.1G 97G 4% / s3fs 256T 0 256T 0% /mnt/s3 tmpfs 1.6G 0 1.6G 0% /run/user/1000 |
s3fsは速度が遅い goofys の方が速い
便利なs3fsですが、最大の難点は速度が遅いことです。
その点では、goofysというのがs3fsと同じことが出来て、s3fsよりも速いようです。
goofysの読み方は、グーフィスです。
goofysの公式サイトはコチラです。
・https://github.com/kahing/goofys
ちなみに、私のAmazon Linux 2では、goofysがインストールできませんでした。
以下のエラーが出てしまい、インストールを諦めました。
1 2 3 4 5 |
# github.com/kahing/goofys/api/common src/github.com/kahing/goofys/api/common/conf_azure.go:272:34: accountsRes.Value undefined (type storage.AccountListResultPage has no field or method Value) src/github.com/kahing/goofys/api/common/conf_azure.go:373:35: not enough arguments in call to client.ListKeys have (context.Context, string, string) want (context.Context, string, string, storage.ListKeyExpand) |
コメント