AWS ParallelCluster で Mountpoint for Amazon S3 を fstab を利用してヘッドノードとコンピュートノードに自動マウントする方法
Mountpoint for Amazon S3 が 2025 年 5 月 30 日に fstab サポートを追加しました。AWS ParallelCluster でヘッドノードとコンピュートノードの両方に S3 バケットを公式な方法で自動マウントできるようになりました。これまで systemd サービスで実現していた自動マウントが fstab で簡単に設定できます。
ParallelCluster で使うときの従来の自動マウント方法
systemd サービスによる自動マウント
従来は systemd サービスを使って自動マウントを実現していました。運用上問題はありませんでしたが、非公式な実装方法であることが長らく気がかりでした。
# systemd サービスファイルの作成例
sudo tee /etc/systemd/system/mount-s3-bucket.service > /dev/null <<EOF
[Unit]
Description=Mount S3 bucket using Mountpoint for Amazon S3
Wants=network-online.target
After=network-online.target
[Service]
Type=exec
ExecStart=/usr/bin/mount-s3 --allow-delete --allow-other hpc-dev-mountpoint /mnt/s3
ExecStop=/usr/bin/fusermount -u /mnt/s3
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
詳細は以下の記事をご確認ください。
なにが嬉しいのか
今回のアップデートで、ParallelCluster の設定がスマートになりました。何より公式に自動マウントをサポートしたのが一番ありがたいです。
- 設定の簡素化: fstab エントリを記述するだけ
- systemd サービス作成不要: 複雑なサービスファイル作成が不要
fstab エントリの構文例
s3://bucket-name/prefix/ /mount-point mount-s3 _netdev,allow-delete,allow-other
詳細は以下の記事をご確認ください。
ParallelCluster で試してみた
検証環境
項目 | 値 |
---|---|
ParallelCluster | v3.13.0 |
OS | Ubuntu 24.04 |
Mountpoint for Amazon S3 | v1.18.0 |
マウント対象の S3 バケット | devio-bucket-for-mountpoint |
マウントポイント | /mnt/s3 |
設定スクリプト保存先 | s3://devio-custom-boostrap-files/mount-s3-with-fstab/mount.sh |
クラスターコンフィグ
設定ファイルの例です。ヘッドノードとコンピュートノードの両方で同じスクリプトを実行します。実行スクリプトの mount.sh
は以下の引数を受け取ります。
- S3 バケット名:
devio-bucket-for-mountpoint
- マウントポイント:
/mnt/s3
- マウントオプション:
allow-delete,allow-other
Region: ap-northeast-1
Image:
Os: ubuntu2404
Tags:
- Key: Name
Value: cluster-v3.13.0
HeadNode:
InstanceType: t3a.small
Networking:
ElasticIp: false
SubnetId: subnet-029f0fb0acc64043d
LocalStorage:
RootVolume:
Size: 45
Encrypted: true
VolumeType: gp3
Iam:
AdditionalIamPolicies:
- Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
- Policy: arn:aws:iam::123456789012:policy/hpc-dev-AllowMountpointForS3
S3Access:
- BucketName: devio-custom-boostrap-files
EnableWriteAccess: false
CustomActions:
OnNodeConfigured:
Script: s3://devio-custom-boostrap-files/mount-s3-with-fstab/mount.sh
Args:
- devio-bucket-for-mountpoint
- /mnt/s3
- allow-delete,allow-other
Scheduling:
Scheduler: slurm
SlurmSettings:
ScaledownIdletime: 5
SlurmQueues:
- Name: test
ComputeResources:
- Name: test
Instances:
- InstanceType: t3a.micro
MinCount: 0
MaxCount: 10
DisableSimultaneousMultithreading: true
ComputeSettings:
LocalStorage:
RootVolume:
Size: 45
Encrypted: true
VolumeType: gp3
CapacityType: SPOT
AllocationStrategy: price-capacity-optimized
Networking:
SubnetIds:
- subnet-029f0fb0acc64043d
- subnet-0b9c598622ad54e61
- subnet-01559948e762bd434
Iam:
AdditionalIamPolicies:
- Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
- Policy: arn:aws:iam::123456789012:policy/hpc-dev-AllowMountpointForS3
S3Access:
- BucketName: devio-custom-boostrap-files
EnableWriteAccess: false
CustomActions:
OnNodeConfigured:
Script: s3://devio-custom-boostrap-files/mount-s3-with-fstab/mount.sh
Args:
- devio-bucket-for-mountpoint
- /mnt/s3
- allow-delete,allow-other
マウントスクリプトの内容
以下のスクリプトを事前にs3://devio-custom-boostrap-files/mount-s3-with-fstab
バケットへアップロードしてあります。ヘッドノード、コンピュート起動時に S3 バケットからスクリプトをダウンロードして実行します。
#!/bin/bash
BUCKET_NAME=$1
TARGET_DIRECTORY=$2
OPTIONS=$3
# Setup
sudo apt update
sudo apt install libfuse2 -y
wget -P /tmp https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb
sudo apt-get install /tmp/mount-s3.deb -y
# Allow other users to access mount
if ! grep -q "^user_allow_other" /etc/fuse.conf
then
echo "user_allow_other" | sudo tee -a /etc/fuse.conf
fi
# Create mount TARGET_DIRECTORY
sudo mkdir -p ${TARGET_DIRECTORY}
sudo chmod 777 ${TARGET_DIRECTORY}
# Ensure BUCKET_NAME has correct s3:// format
if [[ ! ${BUCKET_NAME} =~ ^s3:// ]]; then
FORMATTED_BUCKET="s3://${BUCKET_NAME}/"
else
if [[ ! ${BUCKET_NAME} =~ /$ ]]; then
FORMATTED_BUCKET="${BUCKET_NAME}/"
else
FORMATTED_BUCKET="${BUCKET_NAME}"
fi
fi
# Add entry to /etc/fstab for persistent mounting
FSTAB_ENTRY="${FORMATTED_BUCKET} ${TARGET_DIRECTORY} mount-s3 _netdev,${OPTIONS}"
# Check if entry already exists in fstab
sudo sed -i "\|${BUCKET_NAME}.*${TARGET_DIRECTORY}|d" /etc/fstab
# Add new entry
echo "${FSTAB_ENTRY}" | sudo tee -a /etc/fstab
# Mount the filesystem
sudo mount ${TARGET_DIRECTORY}
# Verify mount was successful
if mountpoint -q ${TARGET_DIRECTORY}; then
echo "Successfully mounted ${FORMATTED_BUCKET} to ${TARGET_DIRECTORY}"
ls -la ${TARGET_DIRECTORY}
else
echo "Warning: Mount may have failed"
fi
クラスター作成と動作確認
クラスターを作成し、ヘッドノードとコンピュートノードでの自動マウントを確認します。
pcluster create-cluster --cluster-name fstab-test --cluster-configuration fstab-cluster.yml
ヘッドノードでの確認
ヘッドノードにログインして S3 バケットが自動マウントされていることを確認します。問題なくマウントできています。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 43G 28G 16G 65% /
tmpfs 959M 0 959M 0% /dev/shm
tmpfs 384M 1.1M 383M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
efivarfs 128K 3.8K 120K 4% /sys/firmware/efi/efivars
/dev/nvme0n1p16 881M 85M 734M 11% /boot
/dev/nvme0n1p15 105M 6.1M 99M 6% /boot/efi
mountpoint-s3 8.0E 0 8.0E 0% /mnt/s3
127.0.0.1:/ 8.0E 13G 8.0E 1% /home
tmpfs 192M 88K 192M 1% /run/user/1000
エントリーが追加されています。
$ sudo cat /etc/fstab
LABEL=cloudimg-rootfs / ext4 discard,commit=30,errors=remount-ro 0 1
LABEL=BOOT /boot ext4 defaults 0 2
LABEL=UEFI /boot/efi vfat umask=0077 0 1
fs-0f66550e47cbc924b:/ /home efs _netdev,noresvport 0 0
s3://devio-bucket-for-mountpoint/ /mnt/s3 mount-s3 _netdev,allow-delete,allow-other
マウントした S3 バケットの内容も確認可能です。
$ ls -l /mnt/s3
total 1
drwxr-xr-x 2 root root 0 Jun 21 00:28 reads
-rw-r--r-- 1 root root 57 Apr 17 00:26 text.txt
コンピュートノードでの確認
Slurm ジョブでコンピュートノードのマウント状況を確認します。検証用スクリプトを作成してジョブをサブミットします。
$ cat check-mount.sh
#!/bin/bash
df -h
ls -l /mnt/s3
cat /mnt/s3/text.txt
ジョブをサブミットして実行結果を確認します。
$ sbatch check-mount.sh
実行結果
コンピュートノードからも S3 バケットをマウントし、アクセスが可能です。
$ cat slurm-5.out
Filesystem Size Used Avail Use% Mounted on
/dev/root 43G 28G 16G 64% /
tmpfs 460M 0 460M 0% /dev/shm
tmpfs 184M 1.2M 183M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
efivarfs 128K 3.8K 120K 4% /sys/firmware/efi/efivars
/dev/nvme0n1p16 881M 85M 734M 11% /boot
/dev/nvme0n1p15 105M 6.1M 99M 6% /boot/efi
10.0.0.242:/opt/parallelcluster/shared 43G 28G 16G 65% /opt/parallelcluster/shared
127.0.0.1:/ 8.0E 13G 8.0E 1% /home
10.0.0.242:/opt/intel 43G 28G 16G 65% /opt/intel
10.0.0.242:/opt/slurm 43G 28G 16G 65% /opt/slurm
mountpoint-s3 8.0E 0 8.0E 0% /mnt/s3
tmpfs 92M 88K 92M 1% /run/user/1000
total 1
drwxr-xr-x 2 root root 0 Jun 21 00:43 reads
-rw-r--r-- 1 root root 57 Apr 17 00:26 text.txt
S3に保存してあるテキストファイルです。
注意事項
各ノードの IAM ポリシー(hpc-dev-AllowMountpointForS3
)でマウントする S3 バケットへのアクセス権限の確認をお忘れなく。マウントする S3 バケットを変更したとき IAM ポリシーを修正し忘れやすいです。
今回検証で使用した hpc-dev-AllowMountpointForS3
ポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::devio-bucket-for-mountpoint"
],
"Effect": "Allow"
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::devio-bucket-for-mountpoint/*"
],
"Effect": "Allow"
}
]
}
まとめ
従来の systemd サービスによる自動マウントと比較して、fstab サポートにより完結な設定で済むようになりました。
項目 | systemd 方式 | fstab 方式 |
---|---|---|
設定の複雑さ | 複雑(サービスファイル作成) | 簡単(1行追加) |
サポート | 非公式 | 公式 |
おわりに
ゲノム解析や機械学習などの大規模データ処理において、S3 を直接マウントできるのは魅力的です。fstab サポートにより、公式な方法で自動マウント設定ができるようになった点が一番うれしいです。
HPC ワークロードの場合は、ストレージはなんでも Mountpoint for Amazon S3 で解決できるわけではないです。少数の大容量ファイルの読み込みであれば採用価値がありますので試してみてください。性能検証については以下の記事もご確認ください。