AWS CloudShell で S3 をファイルシステムとしてマウントする(Mountpoint for Amazon S3)

AWS CloudShell で S3 をファイルシステムとしてマウントする(Mountpoint for Amazon S3)

2026.02.17

はじめに

AWS CloudShell から S3 バケットをローカルファイルシステムのように扱える Mountpoint for Amazon S3 を検証してみました。背景としては AWS Health Dashboard 通知の CloudShell persistence expiring という通知を検知した際、ホームディレクトリに保存していたファイルを S3 等に退避する場合はどうすれば良いのかと思ったからになります。

Mountpoint for Amazon S3 とは

  • AWS 公式の S3 マウントツール
  • FUSE ベースで POSIX ライクな操作が可能

前提条件

  • AWS CloudShell へのアクセス権限
  • S3 バケットの作成権限

1. インストール

RPM パッケージのダウンロード

wget で rpm パッケージをダウンロードします。

cd ~/
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
ls -lh mount-s3.rpm

rpm パッケージダウンロードを確認。

Mountpoint_20260217_001

yum でインストール

yum でインストールを実施。

sudo yum install -y mount-s3.rpm

インストール完了メッセージを確認

Mountpoint_20260217_002

バージョン確認

バージョン番号、インストール場所を確認。

mount-s3 --version
which mount-s3

バージョン番号は mount-s3 1.21.0 インストール場所は /usr/bin/mount-s3 であることを確認。

実行結果
~ $ mount-s3 --version
mount-s3 1.21.0
~ $ which mount-s3
/usr/bin/mount-s3

2. S3 バケット準備

テスト用バケット作成

S3 にテスト用バケットを作成します。

BUCKET_NAME="classmethod-mountpoint-test-$(date +%Y%m%d-%H%M%S)"
aws s3 mb s3://${BUCKET_NAME}
echo ${BUCKET_NAME}

バケット名 classmethod-mountpoint-test-20260217-022501 が作成されたことを確認。

実行結果
~ $ aws s3 mb s3://${BUCKET_NAME}
make_bucket: classmethod-mountpoint-test-20260217-022501
~ $ echo ${BUCKET_NAME}
作成したバケット名: classmethod-mountpoint-test-20260217-022501

テストファイルをアップロード

テスト用バケットに、テスト用テキストファイルをアップロードします。

echo "Mountpoint test" > mountpoint-test.txt
aws s3 cp mountpoint-test.txt s3://${BUCKET_NAME}/
aws s3 ls s3://${BUCKET_NAME}/

バケット名 classmethod-mountpoint-test-20260217-022501 内に mountpoint-test.txt が作成されたことを確認。

実行結果
~ $ aws s3 cp mountpoint-test.txt s3://${BUCKET_NAME}/
upload: ./mountpoint-test.txt to s3://classmethod-mountpoint-test-20260217-022501/mountpoint-test.txt
~ $ aws s3 ls s3://${BUCKET_NAME}/
2026-02-17 02:28:06         16 mountpoint-test.txt

3. マウント操作

マウントポイント作成とマウント

マウントポイント作成とマウントを実施します。

mkdir ~/mnt
mount-s3 ${BUCKET_NAME} ~/mnt
mount | grep mountpoint-s3

作成したマウントポイントにバケット名 classmethod-mountpoint-test-20260217-022501 がマウントされたことを確認。

実行結果
~ $ mkdir ~/mnt
~ $ mount-s3 ${BUCKET_NAME} ~/mnt
bucket classmethod-mountpoint-test-20260217-022501 is mounted at /home/cloudshell-user/mnt
~ $ mount | grep mountpoint-s3
mountpoint-s3 on /home/cloudshell-user/mnt type fuse (rw,nosuid,nodev,noatime,user_id=1000,group_id=995,default_permissions)

マウント状態の確認

マウント状態の確認。

df -h | grep mnt
ls -la ~/mnt/

マウントされた S3 バケット情報、容量 8.0E (エクサバイト、S3 の実質無制限)であること、先ほどアップロードした mountpoint-test.txt が確認できた。

実行結果
~ $ df -h | grep mnt
mountpoint-s3   8.0E     0  8.0E   0% /home/cloudshell-user/mnt
~ $ ls -la ~/mnt/
total 4
drwxr-xr-x. 2 cloudshell-user cloudshell-user    0 Feb 17 05:04 .
drwxr-xr-x. 7 cloudshell-user cloudshell-user 4096 Feb 17 03:41 ..
-rw-r--r--. 1 cloudshell-user cloudshell-user   16 Feb 17 02:28 mountpoint-test.txt

4. バケット内のファイル確認

マウントした S3 バケット内のファイル確認

Mountpoint test という内容が S3 経由でファイルが読めるか確認。

cat ~/mnt/mountpoint-test.txt

Mountpoint test の内容が正常に表示された。S3 にアップロードしたファイルがマウント経由で読めることを確認。

実行結果
Mountpoint test

5. ローカルファイルをマウント経由で S3 に保存

ホームディレクトリで作成したファイルをマウントポイントにコピー

ホームディレクトリで作成したファイルをマウントポイントにコピーして S3 に保存されるか確認してみる。

echo "Local file content" > ~/local-file.txt
cp ~/local-file.txt ~/mnt/
ls -lh ~/mnt/
cat ~/mnt/local-file.txt

ホームディレクトリのファイル local-file.txt が S3 に保存されたことを確認。

実行結果
~ $ ls -lh ~/mnt/
total 1.0K
-rw-r--r--. 1 cloudshell-user cloudshell-user 19 Feb 17 02:36 local-file.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user 16 Feb 17 02:28 mountpoint-test.txt
~ $ cat ~/mnt/local-file.txt
Local file content

S3 側で確認

マウント経由で作成したファイルを確認してみる。

aws s3 ls s3://${BUCKET_NAME}/

ファイル local-file.txt があることを確認。

実行結果
~ $ aws s3 ls s3://${BUCKET_NAME}/
2026-02-17 02:36:36         19 local-file.txt
2026-02-17 02:28:06         16 mountpoint-test.txt

注意点

CloudShell はセッションが終了するときに環境がリセットされるので、自動でアンマウントされる。

6. 再マウント(手動)

手動による再マウントを試してみる。

現在のマウント状態を確認

現在のマウント状態を確認。

mount | grep mountpoint-s3
ls -ld ~/mnt

マウントポイント ~/mnt は残っているがマウントは解除されていることを確認。

実行結果
~ $ mount | grep mountpoint-s3
~ $ ls -ld ~/mnt
drwxr-xr-x. 2 cloudshell-user cloudshell-user 4096 Feb 17 02:32 /home/cloudshell-user/mnt

アンマウント(セッション終了をシミュレートするなら)

fusermount -u ~/mnt

再マウント

バケット名 classmethod-mountpoint-test-20260217-022501 を再度マウント。

BUCKET_NAME="classmethod-mountpoint-test-20260217-022501"
mount-s3 ${BUCKET_NAME} ~/mnt
mount | grep mountpoint-s3
ls -lh ~/mnt/

正常にマウントされバケット内のファイルも確認することができた。

実行結果
~ $ mount-s3 ${BUCKET_NAME} ~/mnt
bucket classmethod-mountpoint-test-20260217-022501 is mounted at /home/cloudshell-user/mnt
~ $ mount | grep mountpoint-s3
mountpoint-s3 on /home/cloudshell-user/mnt type fuse (rw,nosuid,nodev,noatime,user_id=1000,group_id=995,default_permissions)
~ $ ls -lh ~/mnt/
total 1.0K
-rw-r--r--. 1 cloudshell-user cloudshell-user 19 Feb 17 02:36 local-file.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user 16 Feb 17 02:28 mountpoint-test.txt

7. 自動再マウント

  • 毎度手動での再マウントは面倒だなと思い自動で再マウントする方法は無いか試してみました。
  • CloudShell は、起動時にデフォルトで ~/.bashrc.d/ 配下のシェルスクリプトを実行する (~/.bashrcから読み出される) ので、そこに S3 自動マウントスクリプトを配置。
  • ~/.bashrc.d ディレクトリはデフォルトで存在しないので作成する。
  • 以下コマンドでスクリプト auto-mount-s3.sh を作成する。

スクリプト作成

cat > ~/.bashrc.d/auto-mount-s3.sh << 'EOF'
#!/bin/bash
# S3 バケットの自動マウント

BUCKET_NAME="your-bucket-name"  # 実際のバケット名に変更
MOUNT_POINT="$HOME/mnt"

# すでにマウントされているか確認
if mountpoint -q "$MOUNT_POINT" 2>/dev/null; then
    return 0
fi

# マウントポイントが存在しない場合は作成
if [ ! -d "$MOUNT_POINT" ]; then
    mkdir -p "$MOUNT_POINT"
fi

# マウント実行
mount-s3 "$BUCKET_NAME" "$MOUNT_POINT" 2>/dev/null || true
EOF

chmod +x ~/.bashrc.d/auto-mount-s3.sh

8. 自動再マウント検証

現在のマウントを解除

予めマウントを解除して現在のマウント状態を確認。

fusermount -u ~/mnt
mount | grep mountpoint-s3

マウントが解除されていることを確認。

実行結果
何も表示されなければ OK

新しいシェルを起動して自動マウントを確認

新しいシェルを起動して .bashrc が実行され、自動的に S3 バケットがマウントされるか確認。

bash -l

マウントポイントにバケット名 classmethod-mountpoint-test-20260217-022501 がマウントされたことを確認。

実行結果
~ $ bash -l
bucket classmethod-mountpoint-test-20260217-022501 is mounted at /home/cloudshell-user/mnt

マウント状態を確認

改めてマウント状態を確認。

mount | grep mountpoint-s3
ls -lh ~/mnt/

正常にマウントされバケット内のファイルも確認することができた。

実行結果
~ $ mount | grep mountpoint-s3
mountpoint-s3 on /home/cloudshell-user/mnt type fuse (rw,nosuid,nodev,noatime,user_id=1000,group_id=995,default_permissions)
~ $ ls -lh ~/mnt/
total 1.0K
-rw-r--r--. 1 cloudshell-user cloudshell-user 19 Feb 17 02:36 local-file.txt
-rw-r--r--. 1 cloudshell-user cloudshell-user 16 Feb 17 02:28 mountpoint-test.txt

まとめ

CloudShell と Mountpoint for Amazon S3 の組み合わせで、S3 バケットを手軽にファイルシステムとして扱えました。また、CloudShell はセッションが終了する際、環境がリセットされ自動アンマウントされてしましますが ~/.bashrc.d/ 配下にシェルスクリプトを保存しておき、CloudShell 起動時にスクリプトを実行させて自動再マウントできることも検証できました。

この記事が誰かのお役に立てれば幸いです。以上 Yoshi でした。

参考

この記事をシェアする

FacebookHatena blogX

関連記事