Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

Mountpoint for Amazon S3の使い方

はじめに

Linux環境においてAmazon S3のファイルアクセスはAPI、AWS CLIの利用が多いかと思います。
しかし、さまざまな事情で先の方法は使用せずAmazon S3を直接マウントしてファイルを取得したいケースもあるかと思います。
このようなケースに使えるMountpoint for Amazon S3が一般提供開始されたので使ってみたいと思います。

手順

サーバ環境

  • Red Hat Enterprise Linux
    • ※インスタンスにはIAMロールでS3へのアクセス権限付与しておきましょう

ファイルダウンロード

ドキュメントに従いソフトウエアをインストールします。

$ curl -O https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
$ curl -O https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm.asc
$ curl -O https://s3.amazonaws.com/mountpoint-s3-release/public_keys/KEYS

署名検証準備

$ gpg --import ./KEYS
$ gpg --fingerprint mountpoint-s3@amazon.com

表示されたフィンガープリント文字列がドキュメントに記載されているものと一致することを確認しましょう。

署名検証

$ gpg --verify ./mount-s3.rpm.asc
$ echo $?

Good signatureと応答があること、戻り値がゼロであることを確認しましょう。

インストール

$ sudo dnf install ./mount-s3.rpm

インストール確認

$ mount-s3 --version
mount-s3 1.1.0

バージョンの応答があることを確認しましょう。

使い方

S3バケットのマウント

$ mkdir ~/mnt-s3
$ mount-s3 20231031-mount-s3 ~/mnt-s3
bucket 20231031-mount-s3 is mounted at /home/ec2-user/mnt-s3

エラーが表示されないことを確認しましょう。

動作確認

mountコマンドでマウントされたことを確認しましょう。
マウントできてしまえば通常のファイルシステム同様に扱えます。

$ mount |grep mountpoint-s3
mountpoint-s3 on /home/ec2-user/mnt-s3 type fuse (rw,nosuid,nodev,noatime,user_id=1000,group_id=1000,default_permissions)

S3バケットのファイル確認

$ ls -l ~/mnt-s3/
total 10970
-rw-r--r--. 1 ec2-user ec2-user 11232288 Oct 31 05:11 mount-s3.rpm

S3バケットからファイルコピー

$ ls -l ~/mnt-s3/
total 10970
-rw-r--r--. 1 ec2-user ec2-user 11232288 Oct 31 05:11 mount-s3.rpm
$ cp ~/mnt-s3/mount-s3.rpm /tmp/
$ ls -l /tmp/
total 10972
-rw-r--r--. 1 ec2-user ec2-user 11232288 Nov  2 09:33 mount-s3.rpm
drwx------. 3 root     root           17 Oct 31 04:46 systemd-private-eff892143c6c417f979aaf72e553e919-chronyd.service-EAICwl
drwx------. 3 root     root           17 Oct 31 04:46 systemd-private-eff892143c6c417f979aaf72e553e919-dbus-broker.service-J0rUpd
drwx------. 3 root     root           17 Oct 31 04:46 systemd-private-eff892143c6c417f979aaf72e553e919-systemd-logind.service-A58dYb

S3バケットへファイルコピー

$ cp ./mount-s3.rpm.asc ~/mnt-s3/
$ ls -l ~/mnt-s3/
total 10970
-rw-r--r--. 1 ec2-user ec2-user 11232288 Oct 31 05:11 mount-s3.rpm
-rw-r--r--. 1 ec2-user ec2-user      490 Oct 31 05:14 mount-s3.rpm.asc

書き換え、削除

$ rm -i ~/mnt-s3/mount-s3.rpm.asc
rm: remove regular file '/home/ec2-user/mnt-s3/mount-s3.rpm.asc'? y
rm: cannot remove '/home/ec2-user/mnt-s3/mount-s3.rpm.asc': Operation not permitted

$ cp -i ./mount-s3.rpm.asc ~/mnt-s3/mount-s3.rpm.asc
cp: overwrite '/home/ec2-user/mnt-s3/mount-s3.rpm.asc'? y
cp: cannot create regular file '/home/ec2-user/mnt-s3/mount-s3.rpm.asc': Operation not permitted

おっと、ここはエラーになりました。ドキュメントにも記載のとおり、書き換え(上書き)や削除はデフォルト不可です。 ファイルの削除はオプションを付けてマウントすることで対応可能です。

削除

$ mount-s3 --allow-delete 20231031-mount-s3 ~/mnt-s3
bucket 20231031-mount-s3 is mounted at /home/ec2-user/mnt-s3

$ ls -l ~/mnt-s3/
total 10970
-rw-r--r--. 1 ec2-user ec2-user 11232288 Oct 31 05:11 mount-s3.rpm
-rw-r--r--. 1 ec2-user ec2-user      490 Nov  1 07:01 mount-s3.rpm.asc

$ rm -i ~/mnt-s3/mount-s3.rpm.asc
rm: remove regular file '/home/ec2-user/mnt-s3/mount-s3.rpm.asc'? y

$  ls -l ~/mnt-s3/
total 10970
-rw-r--r--. 1 ec2-user ec2-user 11232288 Oct 31 05:11 mount-s3.rpm

S3のファイル取得のケースにおいては有効利用できますので、ドキュメント記載の制約を確認の上、有効活用しましょう。