こんにちは。ガジュマル育ててる人です。
つい先日、Mountpoint for Amazon S3が発表されたとのことで話題なようなので、実際に入れて使ってみようのコーナーです。
S3をLinuxサーバーのファイルシステムにマウントするs3fsやgoofysがありましたが、これまで公式からS3のマウントは非推奨とされてきました。
しかし、公式からマウントするためのツールがついに一般公開されたようです。
https://aws.amazon.com/jp/blogs/news/mountpoint-for-amazon-s3-generally-available-and-ready-for-production-workloads/
AWSのブログによるとAmazon EC2,Amazon ECS,Amazon EKS,オンプレから使用できるようなので、
LinuxベースのAlmalinux8で検証してみたいと思います!
導入してみた
それではMountpoint for Amazon S3のReadmeや各ドキュメントを確認しながら進めてみます。
今回はEC2インスタンスから実行するので、必要なものとしては下記3つです。
・EC2
・S3
・IAMロール(EC2からS3にアクセスするためのロール)
IAMロールについてはアクセスキーとシークレットキーでも問題ないので、該当S3の操作のできるIAMユーザーでも代用可能です。
CONFIGURATION.mdによると
IAMロールには下記のポリシーが必要になります。
※DOC-EXAMPLE-BUCKETは使用するS3の名前に置き換えましょう。
AmazonS3FullAccessを利用することでも可能です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MountpointFullBucketAccess",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
]
},
{
"Sid": "MountpointFullObjectAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
S3作成したらEC2からマウントしていきます。
まずは、wgetが入っていなかったのでインストールして、
rpmを取得してインストールしていきます。
[ec2-user@ip-172-31-47-156 ~]$ sudo yum install wget
[ec2-user@ip-172-31-47-156 ~]$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
[ec2-user@ip-172-31-47-156 ~]$ sudo yum install -y ./mount-s3.rpm
Last metadata expiration check: 0:02:42 ago on Tue 22 Aug 2023 05:57:37 AM UTC.
Dependencies resolved.
=============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================================================================================================
Installing:
mount-s3 x86_64 1.0.0-1 @commandline 9.9 M
Installing dependencies:
fuse x86_64 2.9.7-16.el8 baseos 82 k
fuse-common x86_64 3.3.0-16.el8 baseos 21 k
Transaction Summary
=============================================================================================================================================================================================================================================
Install 3 Packages
Total size: 10 M
Total download size: 103 k
Installed size: 53 M
Downloading Packages:
(1/2): fuse-common-3.3.0-16.el8.x86_64.rpm 1.4 MB/s | 21 kB 00:00
(2/2): fuse-2.9.7-16.el8.x86_64.rpm 4.7 MB/s | 82 kB 00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 203 kB/s | 103 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : fuse-common-3.3.0-16.el8.x86_64 1/3
Installing : fuse-2.9.7-16.el8.x86_64 2/3
Installing : mount-s3-1.0.0-1.x86_64 3/3
Running scriptlet: mount-s3-1.0.0-1.x86_64 3/3
Verifying : fuse-2.9.7-16.el8.x86_64 1/3
Verifying : fuse-common-3.3.0-16.el8.x86_64 2/3
Verifying : mount-s3-1.0.0-1.x86_64 3/3
Installed:
fuse-2.9.7-16.el8.x86_64 fuse-common-3.3.0-16.el8.x86_64 mount-s3-1.0.0-1.x86_64
Complete!
なんと、これだけでインストール完了です
マウントする先のディレクトリを作成して、DOC-EXAMPLE-BUCKETはS3の名前に変更してもらいながら、mount-s3のコマンドをたたくと完了です。
[ec2-user@ip-172-31-47-156 ~]$ sudo mkdir /mnt/mounts3
[ec2-user@ip-172-31-47-156 ~]$ sudo mount-s3 DOC-EXAMPLE-BUCKET /mnt/mounts3
bucket DOC-EXAMPLE-BUCKET is mounted at /mnt/mounts3
マウントしたのちtouchでファイルを作成するとS3内部にファイルが作成されていたので、問題なさそうです。
[ec2-user@ip-172-31-47-156 ~]$ sudo touch /mnt/mounts3/s3test
[ec2-user@ip-172-31-47-156 ~]$ sudo ls -altr /mnt/mounts3
total 0
drwxr-xr-x. 3 root root 21 Aug 22 07:11 ..
drwxr-xr-x. 2 root root 0 Aug 22 07:14 .
-rw-r--r--. 1 root root 0 Aug 22 07:17 s3test
[ec2-user@ip-172-31-47-156 ~]$ aws s3 ls s3://DOC-EXAMPLE-BUCKET
2023-08-22 07:17:55 0 s3test
マウントを外すともちろんファイルは見えなくなります。
[ec2-user@ip-172-31-47-156 ~]$ sudo umount /mnt/mounts3
[ec2-user@ip-172-31-47-156 ~]$ sudo ls -altr /mnt/mounts3
total 0
drwxr-xr-x. 3 root root 21 Aug 22 07:11 ..
drwxr-xr-x. 2 root root 6 Aug 22 07:11 .
注意点
※執筆2023年08月22日の情報で記載しております。
AWS公式のブログを確認したところいくつか注意点があるようです。
オペレーションとセマンティクス – マウントポイントは基本的なファイル操作をサポートしており、最大5 TB のサイズのファイルを読み取ることができます。既存のファイルを一覧表示して読み取ることができ、新しいファイルを作成することもできます。既存のファイルを変更したり、ディレクトリを削除したりすることはできません。また、シンボリックリンクやファイルロックもサポートしていません (POSIX のセマンティクスが必要な場合は、 Amazon FSx for Lustre をご覧ください)。サポートされているオペレーションとその解釈の詳細については、SEMANTICS ドキュメントを参照してください。
まず、mountpoint-s3ではリネーム処理は対応していないため注意が必要です。
s3にマウントしているディレクトリ上でのmvコマンドは失敗しました。
[ec2-user@ip-172-31-47-156 ~]$ sudo mv /mnt/mounts3/s3test /mnt/mounts3/s3test2
mv: cannot move '/mnt/mounts3/s3test' to '/mnt/mounts3/s3test2': Function not implemented
また、書き込みに関しては既存ファイルには書き込みが不可能で、新しいファイルにのみ書き込みが可能なようです。
試しにs3test2というファイルに二度書き込みを行ったところ、2度目はエラーが発生しました。
[ec2-user@ip-172-31-47-156 ~]$ sudo su -
[root@ip-172-31-47-156 ~]# echo test >> /mnt/mounts3/s3test2
[root@ip-172-31-47-156 ~]# echo test >> /mnt/mounts3/s3test2
-bash: /mnt/mounts3/s3test2: Operation not permitted
[root@ip-172-31-47-156 ~]# cat /mnt/mounts3/s3test2
test
また、デフォルトのマウント方法ですとファイルを削除できないため、削除するためには--allow-deleteオプションが必要なようです。
オプションを設定してマウントしなおしたところ無事ファイルの削除ができました。
※ディレクトリの削除は不可
[ec2-user@ip-172-31-47-156 ~]$ sudo rm /mnt/mounts3/s3test
rm: remove regular empty file '/mnt/mounts3/s3test'? y
rm: cannot remove '/mnt/mounts3/s3test': Operation not permitted
[ec2-user@ip-172-31-47-156 ~]$ sudo umount /mnt/mounts3
[ec2-user@ip-172-31-47-156 ~]$ sudo mount-s3 --allow-delete DOC-EXAMPLE-BUCKET /mnt/mounts3
DOC-EXAMPLE-BUCKET is mounted at /mnt/mounts3
[ec2-user@ip-172-31-47-156 ~]$ sudo rm /mnt/mounts3/s3test
[ec2-user@ip-172-31-47-156 ~]$ sudo ls -la /mnt/mounts3/
total 1
drwxr-xr-x. 2 root root 0 Aug 22 08:07 .
drwxr-xr-x. 3 root root 21 Aug 22 07:11 ..
-rw-r--r--. 1 root root 5 Aug 22 07:59 s3test2
他にもシンボリックリンクを作成不可などがあります。
[ec2-user@ip-172-31-47-156 ~]$ sudo ln -s /mnt/mounts3/s3test2 /mnt/mounts3/testlink
ln: failed to create symbolic link '/mnt/mounts3/testlink': Operation not permitted
最後に
いくつかの書き込みや削除などに制限事項もあるので注意することが多そうですが、S3のマウントを公式からでてくれるのはとてもありがたいですね。
今後のアップデートで変更点があればまた記事にしようかと思います!
それではまた!
sマウントをすともちろんファイルは