Mountpoint for Amazon S3 の自動マウントを systemd で実現する方法 - Amazon Linux 2023 編

Mountpoint for Amazon S3 の自動マウントを systemd で実現する方法 - Amazon Linux 2023 編

Clock Icon2025.02.22

はじめに

本記事では、Mountpoint for Amazon S3 を使用して Amazon Linux 2023 の EC2 インスタンスに S3 バケットを自動マウントする方法を紹介します。

image

Moutpoint for Amzon S3 とは

前提として Moutpoint for Amzon S3 は POSIX ファイルシステムのすべての機能は実装されていません。ディレクトリ名の変更や、シンボリックリンクの作成や、vim を使った既存ファイルの編集はできないです。

詳細は以下の記事をご覧ください。
https://dev.classmethod.jp/articles/mountpoint-for-amazon-s3/

前提条件

  • Amazon Linux 2023 の EC2 インスタンス
  • S3 バケットが作成済み

S3バケットの推奨設定

Mountpoint for Amazon S3 で書き込みを行う場合は、以下の設定を推奨します。

バージョニング設定

  • S3 バケットのバージョニングを有効化

https://dev.classmethod.jp/articles/about-mountpoint-for-amazon-s3-hpc-use-2/

ライフサイクルルールの設定

ストレージコストの最適化のために以下の 2 つのルール設定を推奨します。

  1. 非現行バージョンの管理
    • 対象:数 GB 以上のファイルを頻繁に扱う場合
    • 設定:非現行バージョンを一定期間後に削除

https://dev.classmethod.jp/articles/s3-lifecyclerule-add-object-version/

  1. 未完了マルチパートアップロードの管理
    • 設定:未完了のマルチパートアップロードを定期的に削除

https://dev.classmethod.jp/articles/amazon-s3-lifecycle-deleting-incomplete-multipart-uploads/

設定例

日数はご自身の環境に合わせて調整してください。

ライフサイクルルールを作成_-_S3_バケット_devio-bucket-for-mountpoint___S3___ap-northeast-1_🔊.png

必要なIAMポリシー

EC2 インスタンスには以下の IAM ポリシーをアタッチした IAM ロールが必要です。YOUR-BUCKET-NAMEの箇所は置き換えてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET-NAME"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:AbortMultipartUpload",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET-NAME/*"
            ],
            "Effect": "Allow"
        }
    ]
}

自動マウント用の systemd サービス作成

コピペで Moutpoint for Amzon S3 のインストールからサービス化まで完了するように仕上げました。冒頭の基本設定の箇所を環境に合わせて変更してご利用ください。

# 基本設定 ※ S3バケット名の変更必須
BUCKET_NAME="YOUR-BUCKET-NAME"
DIRECTORY="/mnt/s3"

# 読み書き可能な設定
OPTIONS="--allow-delete --allow-other"

# インストール
wget -P /tmp https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
sudo dnf install -y /tmp/mount-s3.rpm

# サービス名の生成
SERVICE_ID=$(echo -n "${BUCKET_NAME}:${DIRECTORY}" | md5sum | awk '{print $1}')
SERVICE_ID=${SERVICE_ID:0:8}
SERVICE_NAME="mountpoint-s3-${SERVICE_ID}"

# マウントポイントの作成
sudo mkdir -p ${DIRECTORY}
sudo chmod 777 ${DIRECTORY}

# ユーザー/グループの設定
POSIX_USER=ec2-user
POSIX_GROUP=ec2-user

# FUSEの設定
if ! grep -q "^user_allow_other" /etc/fuse.conf
then
    echo "user_allow_other" | sudo tee -a /etc/fuse.conf
fi

# systemdサービスファイルの作成
tee > "${SERVICE_NAME}.service" <<EOF
[Unit]
Description=Mountpoint for Amazon S3
Wants=network-online.target
After=default.target
AssertPathIsDirectory=${DIRECTORY}

[Service]
Type=forking
User=${POSIX_USER}
Group=${POSIX_GROUP}
ExecStart=/usr/bin/mount-s3 ${OPTIONS} ${BUCKET_NAME} ${DIRECTORY}
ExecStop=/usr/bin/fusermount -u ${DIRECTORY}

[Install]
WantedBy=default.target
EOF

# サービスの有効化と起動
SYSTEMD_DIR=/etc/systemd/system/
sudo mv "${SERVICE_NAME}.service" "${SYSTEMD_DIR}"

sudo systemctl daemon-reload
sudo systemctl enable ${SERVICE_NAME}
sudo systemctl start ${SERVICE_NAME}

動作確認

サービスの確認

まず、作成した systemd サービスファイルを確認します。

ls /etc/systemd/system/ | grep mountpoint*

サービスの状態確認してactiveであれば正常です。

SERVICE_NAME=$(ls /etc/systemd/system/ | grep mountpoint*)
sudo systemctl status ${SERVICE_NAME}

マウントの確認

マウントポイントが正しく設定されているか確認します。

bash
$ df -h
Filesystem        Size  Used Avail Use% Mounted on
devtmpfs          4.0M     0  4.0M   0% /dev
tmpfs             453M     0  453M   0% /dev/shm
tmpfs             181M  424K  181M   1% /run
/dev/nvme0n1p1    8.0G  1.7G  6.3G  22% /
tmpfs             453M     0  453M   0% /tmp
/dev/nvme0n1p128   10M  1.3M  8.7M  13% /boot/efi
+ mountpoint-s3     8.0E     0  8.0E   0% /mnt/s3
tmpfs              91M     0   91M   0% /run/user/0

ファイル操作テスト

以下の手順で S3 バケットへの読み書きをテストします。

  1. ディレクトリ内容の確認
  2. テストファイルの作成
  3. 作成したファイルの内容確認

ディレクトリ内容の確認。

ls -l ${DIRECTORY}

テストファイルの作成。

TEST_FILE="${DIRECTORY}/test-$(date +%Y%m%d-%H%M%S).txt"
echo "This is a test file for Mountpoint for Amazon S3. Created at $(date)" | sudo tee ${TEST_FILE}

作成したファイルの読み取り確認。

cat ${TEST_FILE}

再起動テスト

システム再起動後も自動マウントされることを確認します。

sudo reboot

再起動後、df -hコマンドでマウント状況を確認してください。

まとめ

Mountpoint for Amazon S3 の自動マウント方法を紹介しました。

おわりに

以前、Ubuntu 版を作成していました。今回パッケージマネージャーの異なる Amazon Linux 2023 版が必要になり検証しました。コピペで設定を流し込めるいい感じのものを作れたと自画自賛です。今後ちょっと検証したいときにも役立つことでしょう。

https://dev.classmethod.jp/articles/how-to-auto-mount-mountpoint-for-amazon-s3-using-systemd/

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.