[アップデート]Mountpoint for Amazon S3 が fstab を使用して S3 バケットを自動的にマウントできるようになりました
はじめに
皆様こんにちは、あかいけです。
AWSでは様々なアップデートがありワクワクな日々をお過ごしのことかと思いますが、
2025年5月30日に、Mountpoint for Amazon S3 に関するアップデートが発表されました。
具体的には、
Mountpoint for Amazon S3 が fstab を使用して S3 バケットを自動的にマウントできるようになったとのことです。
この記事では実際に試してみた結果をご紹介していきます。
これまでとアップデート内容
これまでのMountpoint for Amazon S3はfstabをサポートしていなかったため、
再起動した場合などにマウントが解除されてしまいました。
そのため自動マウントしたい場合はユーザー側で以下のような工夫をする必要がありました。
- crontabでmount-s3を使って起動時にマウントする
- systemdでmount-s3を使ってマウントするサービスを作る
またロードマップでも以前から要望があったようです。
(普通に考えて必要な機能ですよね…)
今回のアップデートにより、そのような設定をすることなくfstabを使えば自動マウントできるようになったため、ユーザー側で考えることが減りました。
素晴らしいですね!
使ってみた
それでは実際に、Mountpoint for Amazon S3 で fstab を設定して使ってみます。
1.環境構築
まずはTerraformで環境を構築します、
以下のコードはSSMセッションマネジャーから接続できるEC2、
またマウント用のS3を作成しています。
main.tf
provider "aws" {
region = "ap-northeast-1"
}
# Amazon Linux 2023 AMI
data "aws_ami" "amazonlinux_2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-2023*-kernel-6.1-x86_64"]
}
}
data "http" "ipv4_icanhazip" {
url = "http://ipv4.icanhazip.com/"
}
locals {
region_code = "ap-northeast-1"
az = "ap-northeast-1a"
vpc_cidr = "10.0.0.0/16"
subnet_cidr = "10.0.1.0/24"
name_prefix = "mountpoint-s3"
current-ip = chomp(data.http.ipv4_icanhazip.body)
allowed-cidr = "${local.current-ip}/32"
}
# VPC - 東京
resource "aws_vpc" "main" {
cidr_block = local.vpc_cidr
tags = {
Name = "${local.name_prefix}-vpc"
}
}
# パブリックサブネット
resource "aws_subnet" "main" {
vpc_id = aws_vpc.main.id
cidr_block = local.subnet_cidr
availability_zone = local.az
map_public_ip_on_launch = true
tags = {
Name = "${local.name_prefix}-public-subnet"
}
}
# インターネットゲートウェイ
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "${local.name_prefix}-igw"
}
}
# ルートテーブル
resource "aws_route_table" "main" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.main.id
}
tags = {
Name = "${local.name_prefix}-rt"
}
}
# ルートテーブルの関連付け
resource "aws_route_table_association" "main" {
subnet_id = aws_subnet.main.id
route_table_id = aws_route_table.main.id
}
# SSMとCloudWatchのためのIAMロール
resource "aws_iam_role" "main" {
name = "ssm-ec2-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
}
]
})
tags = {
Name = "ssm-ec2-role"
}
}
# SSMポリシーのアタッチ
resource "aws_iam_role_policy_attachment" "ssm" {
role = aws_iam_role.main.name
policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}
# EC2インスタンスプロファイル
resource "aws_iam_instance_profile" "main" {
name = "ssm-ec2-instance-profile"
role = aws_iam_role.main.name
}
# セキュリティグループ
resource "aws_security_group" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "${local.name_prefix}-sg"
}
}
# セキュリティグループ 送信ルール
resource "aws_security_group_rule" "egress" {
security_group_id = aws_security_group.main.id
type = "egress"
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
# EC2インスタンス
resource "aws_instance" "main" {
ami = data.aws_ami.amazonlinux_2023.id
instance_type = "t3.micro"
subnet_id = aws_subnet.main.id
vpc_security_group_ids = [aws_security_group.main.id]
iam_instance_profile = aws_iam_instance_profile.main.name
tags = {
Name = "${local.name_prefix}-ec2"
}
}
# マウント用S3
resource "aws_s3_bucket" "main" {
bucket_prefix = "${local.name_prefix}-bucket"
}
# インスタンス SSM接続コマンド
output "ssm_start_session" {
value = "aws ssm start-session --target ${aws_instance.main.id}"
}
# S3バケット名
output "s3_bucket_arn" {
value = aws_s3_bucket.main.arn
}
$ terraform apply;
EC2への接続コマンドとS3バケットのマウントポイントは、以下で確認できます。
$ terraform output;
2.Mountpoint for Amazon S3の設定
次にMountpoint for Amazon S3でfstabを使う設定をします。
設定手順は以下ドキュメントの通りです。
まずEC2に接続から、パッケージをダウンロードします。
$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm;
--2025-05-31 10:34:45-- https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
Resolving s3.amazonaws.com (s3.amazonaws.com)... 52.217.43.30, 52.217.234.72, 54.231.134.32, ...
Connecting to s3.amazonaws.com (s3.amazonaws.com)|52.217.43.30|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13345104 (13M) [binary/octet-stream]
Saving to: ‘mount-s3.rpm’
mount-s3.rpm 100%[========================================================================>] 12.73M 5.94MB/s in 2.1s
2025-05-31 10:34:48 (5.94 MB/s) - ‘mount-s3.rpm’ saved [13345104/13345104]
あとはインストールするだけです。
$ sudo yum install ./mount-s3.rpm;
Total 1.1 MB/s | 88 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.x86_64 1/3
Installing : fuse-2.9.9-13.amzn2023.0.2.x86_64 2/3
Installing : mount-s3-1.18.0-1.x86_64 3/3
Running scriptlet: mount-s3-1.18.0-1.x86_64 3/3
Verifying : fuse-2.9.9-13.amzn2023.0.2.x86_64 1/3
Verifying : fuse-common-3.10.4-1.amzn2023.0.2.x86_64 2/3
Verifying : mount-s3-1.18.0-1.x86_64 3/3
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!
以下のようにバージョンが確認できれば、インストール完了です。
$ mount-s3 --version;
mount-s3 1.18.0
次にfstabの設定ですがAWSの公式ドキュメントにまだ記述がないため、
以下のGithubリポジトリのドキュメントを参照します。
まずマウント用のフォルダーを作ります。
$ sudo mkdir -p /mnt/mountpoint;
次にfstabを設定します。
以下のコマンドでfstabに設定を追加します、S3バケットのバケット名の部分は作成されたものに置き換えてください。
$ sudo sh -c 'echo "s3://mountpoint-s3-bucket20250531103302910200000001/ /mnt/mountpoint mount-s3 _netdev,nosuid,nodev,rw,allow-other,nofail" >> /etc/fstab'
$ cat /etc/fstab
#
UUID=43d4a949-6b4f-4cd4-b65b-312d6c2d0aef / xfs defaults,noatime 1 1
UUID=0163-2441 /boot/efi vfat defaults,noatime,uid=0,gid=0,umask=0077,shortname=winnt,x-systemd.automount 0 2
s3://mountpoint-s3-bucket20250531103302910200000001/ /mnt/mountpoint mount-s3 _netdev,nosuid,nodev,rw,allow-other,nofail
マウントしてみると、
sudo mount -a
Using 'fstab' style options as detected use of `-o` argument.
bucket mountpoint-s3-bucket20250531103302910200000001 is mounted at /mnt/mountpoint
正常にS3バケットがマウントされています。
$ ls -l /mnt/mountpoint
total 0
-rw-r--r--. 1 root root 0 May 31 11:24 test.txt
$ df -h /mnt/mountpoint
Filesystem Size Used Avail Use% Mounted on
mountpoint-s3 8.0E 0 8.0E 0% /mnt/mountpoint
ファイルの作成なども問題なく実行できます。
$ touch /mnt/mountpoint/test.txt
sudo ls -l /mnt/mountpoint
total 0
drwxr-xr-x. 2 root root 0 May 31 11:20 sample
-rw-r--r--. 1 root root 0 May 31 11:24 test.txt
$ aws s3 ls s3://mountpoint-s3-bucket20250531103302910200000001/
PRE sample/
2025-05-31 11:35:42 0 test.txt
次に再起動後に再接続してみると、
$ sudo reboot
ちゃんとマウントされています。
$ ls -l /mnt/mountpoint
total 0
drwxr-xr-x. 2 root root 0 May 31 11:37 sample
-rw-r--r--. 1 root root 0 May 31 11:35 test.txt
$ df -h /mnt/mountpoint
Filesystem Size Used Avail Use% Mounted on
mountpoint-s3 8.0E 0 8.0E 0% /mnt/mountpoint
ユーザーデータで設定してみる
以下ドキュメント上でユーザーデータを使った設定方法が記載されていたため、
こちらも試してみます。
以下はこの記事の冒頭のTerraformにユーザーデータの設定を追加してものです。
main.tf
provider "aws" {
region = "ap-northeast-1"
}
# Amazon Linux 2023 AMI
data "aws_ami" "amazonlinux_2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-2023*-kernel-6.1-x86_64"]
}
}
data "http" "ipv4_icanhazip" {
url = "http://ipv4.icanhazip.com/"
}
locals {
region_code = "ap-northeast-1"
az = "ap-northeast-1a"
vpc_cidr = "10.0.0.0/16"
subnet_cidr = "10.0.1.0/24"
name_prefix = "mountpoint-s3"
current-ip = chomp(data.http.ipv4_icanhazip.body)
allowed-cidr = "${local.current-ip}/32"
s3_folder_key = "sample/"
s3_mount_path = "/mnt/mountpoint"
}
# VPC - 東京
resource "aws_vpc" "main" {
cidr_block = local.vpc_cidr
tags = {
Name = "${local.name_prefix}-vpc"
}
}
# パブリックサブネット
resource "aws_subnet" "main" {
vpc_id = aws_vpc.main.id
cidr_block = local.subnet_cidr
availability_zone = local.az
map_public_ip_on_launch = true
tags = {
Name = "${local.name_prefix}-public-subnet"
}
}
# インターネットゲートウェイ
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "${local.name_prefix}-igw"
}
}
# ルートテーブル
resource "aws_route_table" "main" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.main.id
}
tags = {
Name = "${local.name_prefix}-rt"
}
}
# ルートテーブルの関連付け
resource "aws_route_table_association" "main" {
subnet_id = aws_subnet.main.id
route_table_id = aws_route_table.main.id
}
# SSMとCloudWatchのためのIAMロール
resource "aws_iam_role" "main" {
name = "ssm-ec2-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
}
]
})
tags = {
Name = "ssm-ec2-role"
}
}
# SSMポリシーのアタッチ
resource "aws_iam_role_policy_attachment" "ssm" {
role = aws_iam_role.main.name
policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}
# S3ポリシーのアタッチ
resource "aws_iam_role_policy_attachment" "s3" {
role = aws_iam_role.main.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
# EC2インスタンスプロファイル
resource "aws_iam_instance_profile" "main" {
name = "ssm-ec2-instance-profile"
role = aws_iam_role.main.name
}
# セキュリティグループ
resource "aws_security_group" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "${local.name_prefix}-sg"
}
}
# セキュリティグループ 送信ルール
resource "aws_security_group_rule" "egress" {
security_group_id = aws_security_group.main.id
type = "egress"
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
# EC2インスタンス
resource "aws_instance" "main" {
ami = data.aws_ami.amazonlinux_2023.id
instance_type = "t3.micro"
subnet_id = aws_subnet.main.id
vpc_security_group_ids = [aws_security_group.main.id]
iam_instance_profile = aws_iam_instance_profile.main.name
user_data = <<-EOF
#!/bin/bash -e
# Install Mountpoint
MP_RPM=$(mktemp --suffix=.rpm)
curl https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm > $MP_RPM
# cloud-init installs conflict with SSM agent: https://github.com/amazonlinux/amazon-linux-2023/issues/397
attempt=0
max_attempts=5
until yum install -y $MP_RPM; do
attempt=$((attempt + 1))
if [ $attempt -ge $max_attempts ]; then
echo "Failed to install mount-s3 after $max_attempts attempts. Exiting."
exit 1
fi
echo "yum install mount-s3 failed (attempt $attempt/$max_attempts), retrying in 3 seconds..."
sleep 3
done
rm $MP_RPM
# Setup the fstab file and create the mount
MNT_PATH=${local.s3_mount_path}
echo "s3://${aws_s3_bucket.main.id}/ $${MNT_PATH} mount-s3 _netdev,nosuid,nodev,rw,allow-other,nofail" >> /etc/fstab
mkdir --parents $${MNT_PATH}
chmod 777 $${MNT_PATH}
# Mount all filesystems
systemctl daemon-reload
mount -a
EOF
tags = {
Name = "${local.name_prefix}-ec2"
}
}
# マウント用S3
resource "aws_s3_bucket" "main" {
bucket_prefix = "${local.name_prefix}-bucket"
force_destroy = true
}
resource "aws_s3_object" "object" {
bucket = aws_s3_bucket.main.bucket
key = local.s3_folder_key
}
# インスタンス SSM接続コマンド
output "ssm_start_session" {
value = "aws ssm start-session --target ${aws_instance.main.id}"
}
# S3 マウントポイント
output "s3_mount_point" {
value = "s3://${aws_s3_bucket.main.id}/"
}
ログインして確認するとちゃんとマウントできています。
楽ちんでいいですね。
$ ls -l /mnt/mountpoint
total 0
drwxr-xr-x. 2 root root 0 May 31 11:48 sample
$ df -h /mnt/mountpoint
Filesystem Size Used Avail Use% Mounted on
mountpoint-s3 8.0E 0 8.0E 0% /mnt/mountpoint
さいごに
以上、Mountpoint for Amazon S3のアップデートのご紹介と、実際にfstabで設定してみた結果でした。
元々簡単な設定でEC2にS3をマウントできましたが、今回のアップデートでさらに手軽に利用できるようになったと思います。
EC2でS3を共通フォルダとして利用したい場合など、Mountpoint for Amazon S3の利用を検討してみてはいかがでしょうか。