はじめに
Mountpoint for S3
は、Amazon S3バケットをLinuxファイルシステムとしてマウントできるツールである。
従来のS3 APIを使ったアクセスとは異なり、標準的なファイル操作(ls
、cat
、cp
など)でS3オブジェクトを操作できるため、直感的に使用できる。
今回は、EC2インスタンス上でMountpoint for S3
をセットアップし、実際にS3バケットをマウントして使用することを試してみる。
- Mountpoint for Amazon S3 の使用
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/mountpoint.html
※Mountpoint for S3
は、Amazon S3バケットをPOSIX準拠のファイルシステムとしてマウントできるオープンソースツールである。
環境
EC2 Amazon Linux 2023
mount-s3 1.18.0
準備
EC2インスタンスの準備
試験用のインスタンスは以下で作成をした。
項目 | 設定値 |
---|---|
名前 | test-ec2 |
OS | AmazonLinux2023 AMI |
アーキテクチャ | 64ビット(Arm) |
インスタンスタイプ | t4g.nano |
キーペア | test-ec2-key-pair |
セキュリティグループ | ec2-security-group |
ストレージ | 8GB (gp3) |

S3バケットの準備
testsamplebucket-01
というバケットを作成

前提条件
IAMポリシーの作成
上記の権限を持つカスタムポリシーを作成する。
必要な権限は以下となる。
権限 | 説明 | 用途 | 必要性 |
---|---|---|---|
s3:GetObject | オブジェクトの読み取り | ファイルの閲覧・ダウンロード | 必須(読み取り操作) |
s3:PutObject | オブジェクトの書き込み | ファイルの作成・アップロード | 必須(書き込み操作) |
s3:DeleteObject | オブジェクトの削除 | ファイルの削除 | 必須(削除操作) |
s3:ListBucket | バケット内容の一覧表示 | ディレクトリ構造の表示(ls コマンド) | 必須(一覧表示) |
s3:GetBucketLocation | バケットのリージョン取得 | 接続時のリージョン確認 | 必須(接続時) |
s3:AbortMultipartUpload | マルチパートアップロードの中止 | 大容量ファイルアップロードの管理 | 推奨(大容量ファイル) |
s3:ListMultipartUploadParts | マルチパートの部分一覧 | アップロード状況の確認 | 推奨(大容量ファイル) |
また、特定のbucket
のみの許可とするため、今回作成したtestsamplebucket-01
のARN
を設定する。


ポリシーJSON
作成されたポリシーのJSON
は以下となっている。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetBucketLocation",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::[作成したバケット名]",
"arn:aws:s3:::[作成したバケット名]/*"
]
}
]
}
EC2にIAMロール(S3にアクセスする権限があるロール)をアタッチする
- インスタンスを選択→セキュリティ→IAMロールを変更を選択する

- 新しいIAMロールを作成を選択

- ロールを作成を選択

- サービス「EC2」→「次へ」を選択

- 先ほど作成したIAMポリシーを選択し、「次へ」

- ロール名を決めて作成をする

- 2の画面で作成したロールを選択する

Mountpoint for S3のインストール
- Mountpoint のインストール
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/mountpoint-installation.html
rpmパッケージからのインストール
OSがAmazon Linux
なので、公式の手順に従ってインストールを行う。
また、Arm
なので、arm64
のパッケージを利用する。
RPMパッケージをダウンロードする
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/arm64/mount-s3.rpm
パッケージ署名の検証
- Mountpoint for Amazon S3 パッケージの署名を検証します。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/mountpoint-installation.html#mountpoint-install-verify
GPG
のインストール
dnf install -y gpg
- パブリックキーのダウンロード
wget https://s3.amazonaws.com/mountpoint-s3-release/public_keys/KEYS
- マウントポイントのGPGキーのインストール
gpg --import KEYS
- フィンガープリントの検証
gpg --fingerprint [email protected]
詳細
[root@ip-172-31-38-112 tmp]# gpg --fingerprint [email protected]
pub rsa2048 2023-08-01 [SC] [expires: 2026-07-31]
673F E406 1506 BB46 9A0E F857 BE39 7A52 B086 DA5A
uid [ unknown] Mountpoint for Amazon S3 <[email protected]>
表示されたフィンガープリント文字列が以下と一致することを確認する。
673F E406 1506 BB46 9A0E F857 BE39 7A52 B086 DA5A
- パッケージ署名ファイルのダウンロード
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/arm64/mount-s3.rpm.asc
- パッケージ署名の検証
gpg --verify mount-s3.rpm.asc
ログ
[root@ip-172-31-38-112 tmp]# gpg --verify mount-s3.rpm.asc
gpg: assuming signed data in 'mount-s3.rpm'
gpg: Signature made Fri May 30 14:02:08 2025 UTC
gpg: using RSA key BE397A52B086DA5A
gpg: Good signature from "Mountpoint for Amazon S3 <[email protected]>" [unknown]
gpg: WARNING: Using untrusted key!
- 確認
Good signature
が含まれていればOK
インストール
sudo dnf install ./mount-s3.rpm
ログ
Last metadata expiration check: 0:03:05 ago on Sun Jun 1 10:00:10 2025.
Dependencies resolved.
============================================================================================================
Package Architecture Version Repository Size
============================================================================================================
Installing:
mount-s3 aarch64 1.18.0-1 @commandline 12 M
Installing dependencies:
fuse aarch64 2.9.9-13.amzn2023.0.2 amazonlinux 80 k
fuse-common aarch64 3.10.4-1.amzn2023.0.2 amazonlinux 8.5 k
Transaction Summary
============================================================================================================
Install 3 Packages
Total size: 12 M
Total download size: 89 k
Installed size: 71 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): fuse-common-3.10.4-1.amzn2023.0.2.aarch64.rpm 243 kB/s | 8.5 kB 00:00
(2/2): fuse-2.9.9-13.amzn2023.0.2.aarch64.rpm 1.1 MB/s | 80 kB 00:00
------------------------------------------------------------------------------------------------------------
Total 857 kB/s | 89 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : fuse-common-3.10.4-1.amzn2023.0.2.aarch64 1/3
Installing : fuse-2.9.9-13.amzn2023.0.2.aarch64 2/3
Installing : mount-s3-1.18.0-1.aarch64 3/3
Running scriptlet: mount-s3-1.18.0-1.aarch64 3/3
Verifying : fuse-2.9.9-13.amzn2023.0.2.aarch64 1/3
Verifying : fuse-common-3.10.4-1.amzn2023.0.2.aarch64 2/3
Verifying : mount-s3-1.18.0-1.aarch64 3/3
Installed:
fuse-2.9.9-13.amzn2023.0.2.aarch64 fuse-common-3.10.4-1.amzn2023.0.2.aarch64 mount-s3-1.18.0-1.aarch64
Complete!
バージョン確認
mount-s3 --version
[root@ip-172-31-38-112 tmp]# mount-s3 --version
mount-s3 1.18.0
Mountpoint for S3を使ってみる
マウントポイントディレクトリの作成
# マウントポイント用ディレクトリの作成
sudo mkdir -p /mnt/s3-bucket
sudo chown ec2-user:ec2-user /mnt/s3-bucket
マウント
# S3バケットをマウント
mount-s3 [作成したバケット名] /mnt/s3-bucket
# 今回は下記となる。
mount-s3 testsamplebucket-01 /mnt/s3-bucket
マウントができた
[root@ip-172-31-38-112 tmp]# mount-s3 testsamplebucket-01 /mnt/s3-bucket
bucket testsamplebucket-01 is mounted at /mnt/s3-bucket
# マウント確認
df -hT
[root@ip-172-31-38-112 tmp]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 210M 0 210M 0% /dev/shm
tmpfs tmpfs 84M 468K 84M 1% /run
/dev/nvme0n1p1 xfs 8.0G 1.9G 6.2G 23% /
tmpfs tmpfs 210M 25M 185M 12% /tmp
/dev/nvme0n1p128 vfat 10M 1.4M 8.7M 14% /boot/efi
tmpfs tmpfs 42M 0 42M 0% /run/user/1000
mountpoint-s3 fuse 8.0E 0 8.0E 0% /mnt/s3-bucket
/mnt/s3-bucket
があることを確認する。
ファイル操作の確認
ディレクトリの確認
# マウントしたディレクトリの内容を確認
ls -la /mnt/s3-bucket/
[root@ip-172-31-38-112 tmp]# ls -la /mnt/s3-bucket/
total 0
drwxr-xr-x. 2 root root 0 Jun 1 10:12 .
drwxr-xr-x. 3 root root 23 Jun 1 10:04 ..
ファイルの書き込み
echo "Hello,World" >> /mnt/s3-bucket/test.txt
S3
にも反映されていることを確認.

ディレクトリ内容の確認
ls /mnt/s3-bucket/test.txt
cat /mnt/s3-bucket/test.txt
[root@ip-172-31-38-112 tmp]# ls /mnt/s3-bucket/test.txt
/mnt/s3-bucket/test.txt
[root@ip-172-31-38-112 tmp]# cat /mnt/s3-bucket/test.txt
Hello,World
削除を試してみる
rm /mnt/s3-bucket/test.txt
[root@ip-172-31-38-112 s3-bucket]# rm /mnt/s3-bucket/test.txt
rm: remove regular file 'test.txt'? y
rm: cannot remove 'test.txt': Operation not permitted
※削除できない。
削除できるようにマウントしてみる
--allow-delete
オプションをつけてマウントを行う。
mount-s3 testsamplebucket-01 /mnt/s3-bucket --allow-delete
マウントしなおし↓
[root@ip-172-31-38-112 /]# sudo umount /mnt/s3-bucket
[root@ip-172-31-38-112 /]# mount-s3 testsamplebucket-01 /mnt/s3-bucket --allow-delete
bucket testsamplebucket-01 is mounted at /mnt/s3-bucket
再度削除をしてみる。 削除できた!
[root@ip-172-31-38-112 s3-bucket]# sudo rm test.txt
[root@ip-172-31-38-112 s3-bucket]# ll
total 0
[root@ip-172-31-38-112 s3-bucket]#
オプションについて
以下のようなオプションがある
基本的な使用方法
mount-s3 [オプション] <バケット名> <ディレクトリ>
主要オプション一覧
バケット関連オプション
オプション | 説明 | デフォルト値 | 使用例 |
---|---|---|---|
--prefix <PREFIX> | マウントするバケット内のプレフィックス | バケット全体 | --prefix logs/ |
--region <REGION> | バケットのAWSリージョン | 自動検出 | --region ap-northeast-1 |
--endpoint-url <URL> | S3エンドポイントURL | 自動検出 | --endpoint-url https://s3.amazonaws.com |
--force-path-style | パススタイルアドレッシングを強制 | - | --force-path-style |
--transfer-acceleration | S3転送アクセラレーションを使用 | - | --transfer-acceleration |
--dual-stack | デュアルスタックエンドポイントを使用 | - | --dual-stack |
--requester-pays | リクエスター支払いを設定 | - | --requester-pays |
--storage-class <CLASS> | 新しいオブジェクトのストレージクラス | - | --storage-class STANDARD_IA |
認証関連オプション
オプション | 説明 | 使用例 |
---|---|---|
--no-sign-request | リクエストに署名しない(匿名アクセス) | --no-sign-request |
--profile <PROFILE> | 使用する認証プロファイル | --profile production |
マウント関連オプション
オプション | 説明 | 使用例 |
---|---|---|
--read-only | 読み取り専用でマウント | --read-only |
--allow-delete | 削除操作を許可 | --allow-delete |
--allow-overwrite | 上書き操作を許可 | --allow-overwrite |
--incremental-upload | 増分アップロードを有効化 | --incremental-upload |
--auto-unmount | 終了時に自動アンマウント | --auto-unmount |
--allow-root | rootユーザーのアクセスを許可 | --allow-root |
--allow-other | 他のユーザーのアクセスを許可 | --allow-other |
--uid <UID> | 所有者UID | --uid 1000 |
--gid <GID> | 所有者GID | --gid 1000 |
--dir-mode <MODE> | ディレクトリの権限 | --dir-mode 0755 |
--file-mode <MODE> | ファイルの権限 | --file-mode 0644 |
パフォーマンス関連オプション
オプション | 説明 | デフォルト値 | 使用例 |
---|---|---|---|
--maximum-throughput-gbps <N> | 最大スループット(Gbps) | 自動検出 | --maximum-throughput-gbps 5 |
--max-threads <N> | 最大FUSEデーモンスレッド数 | 16 | --max-threads 32 |
--part-size <SIZE> | マルチパートのパートサイズ(バイト) | 8388608 | --part-size 16777216 |
--read-part-size <SIZE> | 読み取り用パートサイズ | 8388608 | --read-part-size 16777216 |
--write-part-size <SIZE> | 書き込み用パートサイズ | 8388608 | --write-part-size 16777216 |
ログ関連オプション
オプション | 説明 | デフォルト値 | 使用例 |
---|---|---|---|
-l, --log-directory <DIR> | ログファイル出力ディレクトリ | syslog | --log-directory /var/log/s3 |
--log-metrics | パフォーマンスメトリクスのログを有効 | - | --log-metrics |
-d, --debug | デバッグログを有効 | - | --debug |
--debug-crt | AWS Common Runtimeのデバッグログ | - | --debug-crt |
--no-log | すべてのログを無効 | - | --no-log |
キャッシュ関連オプション
オプション | 説明 | デフォルト値 | 使用例 |
---|---|---|---|
--cache <DIRECTORY> | オブジェクトコンテンツのキャッシュ | - | --cache /tmp/s3-cache |
--metadata-ttl <SECONDS> | メタデータキャッシュのTTL | minimal | --metadata-ttl 300 |
--negative-metadata-ttl <SECONDS> | 負のエントリのキャッシュTTL | metadata TTLと同じ | --negative-metadata-ttl 60 |
--max-cache-size <MiB> | キャッシュディレクトリの最大サイズ | 利用可能領域の5% | --max-cache-size 1024 |
セキュリティ関連オプション
オプション | 説明 | 使用例 |
---|---|---|
--sse <ALGORITHM> | サーバーサイド暗号化アルゴリズム | --sse aws:kms |
--sse-kms-key-id <ARN> | KMS暗号化に使用するキーARN | --sse-kms-key-id arn:aws:kms:... |
--expected-bucket-owner <ID> | 期待されるバケット所有者のアカウントID | --expected-bucket-owner 123456789012 |
オプション組み合わせ例
読み取り専用の高速マウント
mount-s3 testsamplebucket-01 /mnt/s3-bucket \
--read-only \
--cache /tmp/s3-cache \
--metadata-ttl 600 \
--max-threads 32
パフォーマンス最適化オプション
# 大容量ファイル用の最適化
mount-s3 testsamplebucket-01 /mnt/s3-bucket \
--part-size 16777216 \
--upload-checksums \
--max-threads 10
# 読み取り専用モード(高速化)
mount-s3 testsamplebucket-01 /mnt/s3-bucket --read-only
# キャッシュ設定
mount-s3 testsamplebucket-01 /mnt/s3-bucket \
--cache /tmp/s3-cache \
--metadata-ttl 300
デバッグとログ設定
# 詳細ログ出力
mount-s3 your-bucket ~/s3-mount --debug
# ログファイルへの出力
mount-s3 your-bucket ~/s3-mount \
--log-directory /var/log/mountpoint-s3 \
--log-level info
権限とセキュリティ設定
# 特定のユーザー/グループでマウント
mount-s3 your-bucket ~/s3-mount \
--uid $(id -u) \
--gid $(id -g) \
--file-mode 0644 \
--dir-mode 0755
# 読み取り専用でマウント
mount-s3 your-bucket ~/s3-mount --read-only
自動マウントの設定
fuse.confの修正
--allow-other
オプションを使用するには、FUSE設定ファイルでuser_allow_other
を有効にする必要がある。
# /etc/fuse.confを編集
sudo tee -a /etc/fuse.conf << 'EOF'
user_allow_other
EOF
# 設定確認
cat /etc/fuse.conf
systemdサービスファイルの作成
# サービスファイルの作成
sudo tee /etc/systemd/system/mountpoint-s3.service << 'EOF'
[Unit]
Description=Mountpoint for S3 - your-bucket
After=network.target
[Service]
Type=forking
User=ec2-user
Group=ec2-user
ExecStart=/usr/bin/mount-s3 testsamplebucket-01 /mnt/s3-bucket --allow-delete --allow-overwrite --allow-other
ExecStop=/bin/umount /mnt/s3-bucket
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# サービスの有効化と開始
sudo systemctl daemon-reload
sudo systemctl enable mountpoint-s3
sudo systemctl start mountpoint-s3
# ステータス確認
sudo systemctl status mountpoint-s3
起動できていることを確認。
[root@ip-172-31-38-112 ec2-user]# sudo systemctl status mountpoint-s3
● mountpoint-s3.service - Mountpoint for S3 - your-bucket
Loaded: loaded (/etc/systemd/system/mountpoint-s3.service; enabled; preset: disabled)
Active: active (running) since Sun 2025-06-01 10:38:22 UTC; 25s ago
Main PID: 29497 (mount-s3)
Tasks: 13 (limit: 404)
Memory: 6.5M
CPU: 99ms
CGroup: /system.slice/mountpoint-s3.service
└─29497 /usr/bin/mount-s3 testsamplebucket-01 /mnt/s3-bucket --allow-delete --allow-overwrite --allow-other
Jun 01 10:38:21 ip-172-31-38-112.ap-northeast-1.compute.internal systemd[1]: Starting mountpoint-s3.service - Mountpoint for S3 - your-bucket...
Jun 01 10:38:22 ip-172-31-38-112.ap-northeast-1.compute.internal mount-s3[29496]: bucket testsamplebucket-01 is mounted at /mnt/s3-bucket
Jun 01 10:38:22 ip-172-31-38-112.ap-northeast-1.compute.internal systemd[1]: Started mountpoint-s3.service - Mountpoint for S3 - your-bucket.
再起動でマウントされるかを確認
reboot
マウント確認
ll /mnt/s3-bucket
[ec2-user@ip-172-31-38-112 ~]$ ll /mnt/s3-bucket/
total 0
[ec2-user@ip-172-31-38-112 ~]$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 210M 0 210M 0% /dev/shm
tmpfs tmpfs 84M 472K 84M 1% /run
/dev/nvme0n1p1 xfs 8.0G 1.9G 6.2G 23% /
tmpfs tmpfs 210M 0 210M 0% /tmp
/dev/nvme0n1p128 vfat 10M 1.4M 8.7M 14% /boot/efi
mountpoint-s3 fuse 8.0E 0 8.0E 0% /mnt/s3-bucket
tmpfs tmpfs 42M 0 42M 0% /run/user/1000
されているのでOK!
気になる点の動作検証
空のディレクトリをLinux
上で作成した場合に、S3
上に反映されるのか?
オブジェクトストレージであり、ディレクトリはただのprefix
にすぎないため、恐らくディレクトリを作成しても反映されないはず。
が、一応試してみる。
空のディレクトリを作成
mkdir -p /mnt/s3-bucket/test1/
mkdir -p /mnt/s3-bucket/test2/
mkdir -p /mnt/s3-bucket/test3/
mkdir -p /mnt/s3-bucket/test1/test2/
mkdir -p /mnt/s3-bucket/test1/test2/test3/
[ec2-user@ip-172-31-38-112 s3-bucket]$ find
.
./test1
./test1/test2
./test1/test2/test3
./test2
./test3
test1/test2/ 以下に空のファイルを作成する
echo "Hello,World" >> /mnt/s3-bucket/test1/test2/test.txt
[ec2-user@ip-172-31-38-112 s3-bucket]$ find
.
./test1
./test1/test2
./test1/test2/test.txt
./test1/test2/test3
./test2
./test3
※この時点でS3バケットを確認する

test1/test2/test.txt
のパスのオブジェクトしか作成されていないことを確認。
再起動して作成したディレクトリの有無を確認する
sudo reboot
マウントディレクトリの確認
find /mnt/s3-bucket
[ec2-user@ip-172-31-38-112 ~]$ find /mnt/s3-bucket
/mnt/s3-bucket
/mnt/s3-bucket/test1
/mnt/s3-bucket/test1/test2
/mnt/s3-bucket/test1/test2/test.txt
当然ながら、S3
にあるパスのみをマウントしているので、test.txt
があるパスのみ生きている形となる。
結論
- オブジェクトストレージなので「ディレクトリ」という実体は存在しないため。
- あるのはキー(例: logs/file1.txt)で、それが
/logs/
というプレフィックスに見えるだけ
つまり、
mkdir [ディレクトリ]
した場合(空のディレクトリ)
- 確認した通り、S3上には何も作られない
[ディレクトリ]
という 仮想的なディレクトリ がローカルのマウントポイントで一時的に見えるだけ- 再マウント後には消える(S3に実体がないから)
という動作になっているようだ。
ディレクトリのようなものを作成したい場合
明示的に「ディレクトリっぽい」オブジェクトを作ることもできる
以下を実行することで、S3 に「キーが logs/
で中身が空」のオブジェクトを作るだけだが、GUI
やツール
では「ディレクトリのように」見えるようになる。
aws s3api put-object --bucket testsamplebucket-01 --key "logs/"
ログ
[ec2-user@ip-172-31-38-112 s3-bucket]$ aws s3api put-object --bucket testsamplebucket-01 --key "logs/"
{
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"ChecksumCRC64NVME": "AAAAAAAAAAA=",
"ChecksumType": "FULL_OBJECT",
"ServerSideEncryption": "AES256"
}

この場合では、再マウントしたときにどうなるのかを確認してみる。
※umount
してから再マウントでもよいが、再起動で試す。
sudo reboot
[ec2-user@ip-172-31-38-112 ~]$ find /mnt/s3-bucket/
/mnt/s3-bucket/
/mnt/s3-bucket/logs
/mnt/s3-bucket/test1
/mnt/s3-bucket/test1/test2
/mnt/s3-bucket/test1/test2/test.txt
ちゃんとできているね。
参考
Mountpoint for S3 公式ドキュメント
https://github.com/awslabs/mountpoint-s3AWS Mountpoint for S3 ユーザーガイド
https://docs.aws.amazon.com/AmazonS3/latest/userguide/mountpoint.htmlAmazon S3 とは
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.htmlAmazon S3 の料金
https://aws.amazon.com/jp/s3/pricing/FUSE (Filesystem in Userspace)
https://www.kernel.org/doc/html/latest/filesystems/fuse.htmlMountpoint for Amazon S3 とは何か
https://qiita.com/hayao_k/items/dd741b37e41c22baac55Mountpoint for Amazon S3 の自動マウントを systemd で実現する方法
https://dev.classmethod.jp/articles/how-to-auto-mount-mountpoint-for-amazon-s3-using-systemd/
おわりに
Mountpoint for S3
を使ってEC2
からS3
のバケットをマウントしてファイルの読み書き削除を行ってみた。S3
マウントする際は、goofys
とか使っていたけど今後は公式のMountpoint for S3
の方を使ってみようと思う。