これは何

2025年5月30日、公式ブログに「Amazon S3 のマウントポイントでは、fstab を使用して S3 バケットを自動的にマウントできるようになりました。」という記事が投稿されました
今回は、この記事について

  • そもそも「マウントポイント」って何?
  • 「fstab」って何?
  • S3バケットを自動的にマウントするって具体的にどうやるの?

など、諸々の疑問を解消したり、技術検証をしていく記事です

用語理解

マウントポイント

マウントポイントとは、主にLinux/Unix系のOSで、ストレージ装置上のファイルシステムをメインのファイルシステムに接続するためのディレクトリのこと、だそうです(マウントポイント 【mount point】 /mnt
家を増築した時に、増築した部分に行くために着けたドア、みたいなイメージでしょうか

マウントする

「マウントする」とは、接続した機器(ストレージ装置など)をコンピュータに認識させて使えるようにすることです

fstab

etc/fstabファイルは、マウントするファイルシステムの情報を記述するファイルです
「このストレージ装置を、このマウントポイントに、この設定で接続してください」という内容が書かれています

今回の変更点

用語が分かったところで、「では、今回具体的にどんな変更点があったのか?」の部分を見ていきます

私は以前から「EC2インスタンスにS3バケットをマウントする」という作業をしたことがなかったため、まず手動でS3をマウントする方法を調べてみました

参考にしたのは下記の記事です

この記事を見る限り、手動でEC2インスタンス(以下インスタンス)にS3バケットをマウントする場合、

  1. S3バケットにアクセスできるIAMロールをインスタンスに付与する
  2. インスタンスにMountpoint for Amazon S3をインストールする
  3. インスタンスにマウントポイントを作成して、S3バケットをマウントする

という順番でマウントを行うようです

これが今回、以下のような変更があったようです

マウントポイント設定を fstab ファイルに追加して、インスタンスの起動時に自動的に適用できるようになりました。(中略)fstab ファイルを変更して Amazon S3 のマウントポイントの新しいエントリを追加すると、EC2 インスタンスは設定を読み取り、再起動するたびに S3 バケットを自動的にマウントします。

インスタンスを再起動した時に、手動マウントの手順を踏まずに自動的にS3バケットがマウントされるのは確かに便利ですね

ただ、手動・自動に関わらず、S3バケットを共有ファイルシステムとしてインスタンスにマウントするのは非推奨とされているため、そのような用途でS3バケットをインスタンスにマウントしたい場合は、代わりにEFSを使用しましょう(Q. S3をEC2にマウントした時よりは、EFSの方が早いですか?

実際にやってみる

では、実際にfstabを使用したS3 バケット自動マウントを試してみます

今回試すのは、

  • インスタンスを新しく起動するタイミングで必要な設定を行い、起動時にマウントされるか確認する
  • すでに起動したインスタンスに必要な設定を導入し、再起動して挙動を確認する

の2つを試してみます

なお、今回用に”konishi-test-20250604″というS3バケットを作成し、バケット内に”test”というフォルダを作成しておきました

インスタンスを新しく起動するタイミングでマウント設定を行う

必要な手順は以下の手順と仮定します

  1. EC2インスタンスの起動時に、AmazonS3FullAccess権限を持つIAMロールをアタッチする
  2. ユーザーデータでMountpoint for Amazon S3のインストールとマウントポイントの作成を行う

今回はterraformでEC2インスタンスを建てたため、IAMロールとユーザーデータの設定はコードで記載します

# IAMロール
resource "aws_iam_role" "konishi-test-role" {
  name = "konishi-test-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "ec2.amazonaws.com"
        }
      }
    ]
  })

  tags = {
    Name  = "konishi-test-role"
    Owner = "konishi"
  }
}

# SSMポリシーのアタッチ
resource "aws_iam_role_policy_attachment" "konishi-test-ssm-policy" {
  role       = aws_iam_role.konishi-test-role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

# S3フルアクセスポリシーのアタッチ
resource "aws_iam_role_policy_attachment" "konishi-test-s3-policy" {
  role       = aws_iam_role.konishi-test-role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
# ユーザーデータ
  user_data = <<-EOF
              #!/bin/bash
              # Mountpoint for Amazon S3のインストール
              wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
              sudo yum install -y ./mount-s3.rpm

              # マウントポイントの作成
              sudo mkdir -p ~/mnt/s3

              # fstabにエントリを追加
              echo "s3://konishi-test-20250604/ /mnt/s3 mount-s3 _netdev,nosuid,nodev,nofail,rw 0 0" | sudo tee -a /etc/fstab

              # マウントの実行
              sudo mount -a
              EOF

結果

インスタンスは無事建てられたのですが、

  • Mountpoint for Amazon S3がインストールされない
  • マウントポイント(~/mnt/s3)が作成されない

という症状が何度applyをしても解消せず、マウントまでできませんでした
理由はわからなかったのですが、今回はトラシューの記事ではないので(心残りですが)追求はやめておきます
なので、今回はおとなしくインスタンスだけ建てて、Mountpoint for Amazon S3のインストールなどは手動で行うことにしました

すでに起動したインスタンスに必要な設定を導入し、再起動して挙動を確認する

必要な手順は以下の通りです

  1. Mountpoint for Amazon S3のインストール
  2. マウントポイントの作成
  3. fstabにエントリを追加
  4. マウントの実行
  5. マウントできていることを確認
  6. 再起動して自動的にマウントされるか確認

1. Mountpoint for Amazon S3のインストール(SSM接続で実施)

sh-5.2$ cd /tmp sh-5.2$ pwd /tmp sh-5.2$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm ...mount-s3.rpm 100%[=====================================================================================================================>] 12.73M 3.46MB/s in 4.0s

2025-06-05 03:50:21 (3.22 MB/s) - ‘mount-s3.rpm’ saved [13345104/13345104]

sh-5.2$ sudo yum install -y ./mount-s3.rpm
...Installed:
fuse-2.9.9-13.amzn2023.0.2.x86_64 fuse-common-3.10.4-1.amzn2023.0.2.x86_64 mount-s3-1.18.0-1.x86_64

Complete!

2. マウントポイントの作成

sh-5.2$ sudo mkdir -p /mnt/s3

3. fstabにエントリを追加

sh-5.2$ echo "s3://konishi-test-20250604/ /mnt/s3 mount-s3 _netdev,nosuid,nodev,nofail,rw 0 0" | sudo tee -a /etc/fstab
s3://konishi-test-20250604/ /mnt/s3 mount-s3 _netdev,nosuid,nodev,nofail,rw 0 0
sh-5.2$ cat /etc/fstab
#
UUID=bb78b045-a6ba-406e-a3ff-3237702bc0bd / xfs defaults,noatime 1 1
UUID=2E12-B239 /boot/efi vfat defaults,noatime,uid=0,gid=0,umask=0077,shortname=winnt,x-systemd.automount 0 2
s3://konishi-test-20250604/ /mnt/s3 mount-s3 _netdev,nosuid,nodev,nofail,rw 0 0

4. マウントの実行

sh-5.2$ sudo mount -a
Using 'fstab' style options as detected use of `-o` argument.
bucket konishi-test-20250604 is mounted at /mnt/s3

5. マウントできていることを確認

sh-5.2$ sudo ls -l /mnt/s3
total 0
-rw-r--r--. 1 root root 0 Jun 4 07:20 test

6. 再起動して自動的にマウントされるか確認

# バケットをアンマウント
sh-5.2$ sudo umount /mnt/s3
sh-5.2$ sudo ls -l /mnt/s3
total 0

# インスタンスを再起動し、S3バケットが自動的にマウントされているか確認する
sh-5.2$ sudo ls -l /mnt/s3
total 0
-rw-r--r--. 1 root root 0 Jun 4 07:20 test

インスタンスを再起動した後、特に何もしなくてもS3バケットがマウントされていました!

参考:Mountpoint のインストール
起動時にS3バケットを自動的にマウントする

まとめ

インスタンスにS3バケットをマウントする設定は多少手順が複雑なため、今回の変更で毎回の設定が不要になり、便利度がアップしました

ただ、私がやった限りではインスタンスを最初に起動するタイミングで、ユーザーデータで設定を行おうとすると、うまくいかない(どうやらMountpoint のインストールでつまづく)ようでした
そのため、安全策を取るのであれば、インスタンスを建てた後に手動でインストールなどを行うのがよさそうです

もしユーザーデータに設定を記載してうまくいった、という事例があれば、参考にしてリトライしてみたいと思います

以上です