Mountpoint for Amazon S3 をEC2に入れて使ってみた。

ガジュマル育ててる人
2023-08-25
2023-08-25

こんにちは。ガジュマル育ててる人です。

つい先日、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マウントをすともちろんファイルは