0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mountpoint for Amazon S3を試してみた ~S3はどこまでファイルシステムとして使えるのか検証~

0
Posted at

1.初めに

Mountpoint for Amazon S3という機能をご存じでしょうか。
Amazon Simple Storage Service (S3)というAWSが提供する、オブジェクトストレージサービスの機能の1つで、Linux上からファイルシステムのようにマウントして利用できるオープンソースソフトウェアです。

S3はオブジェクトストレージであり、一般的なPOSIXファイルシステムとは異なる特性を持っています。そのため、「どこまで通常のファイルシステムとして利用できるのか」実際に検証してみました。

本記事ではセットアップ手順の紹介だけでなく、「既存のLinuxアプリケーションから通常のファイルシステムのように利用できるか」という観点で、実際のコマンド実行結果を交えながら以下の流れで検証してみます。

  • Mountpoint for Amazon S3のセットアップ
  • S3バケットのマウント
  • 基本的なファイル操作(作成・コピー・削除・移動)
  • 一般的なLinuxコマンドがどこまで利用できるか
  • 利用時の制約や注意点

2. Mountpoint for Amazon S3とは

Mountpoint for Amazon S3は、AWSが提供するオープンソースのクライアントソフトウェアです。Linux上でAmazon S3バケットをマウントすることで、S3に保存されたオブジェクトをファイルシステムのように扱うことができます。

通常、Amazon S3へアクセスする場合はAWS CLIやAWS SDKを利用してオブジェクト単位で操作します。一方、Mountpoint for Amazon S3を利用すると、lscpcatといった一般的なLinuxコマンドを利用してS3上のデータへアクセスできるようになります。

内部ではLinuxのFUSE(Filesystem in Userspace)を利用し、アプリケーションからのファイル操作をAmazon S3 APIへ変換しています。そのため、既存のアプリケーションを大きく変更することなく、S3上のデータを利用できる点が特徴です。

一方で、Mountpoint for Amazon S3はPOSIX互換のファイルシステムではありません。Amazon S3はオブジェクトストレージであるため、通常のローカルファイルシステムとは動作が異なる操作も存在します。例えば、ランダムライトや一部のファイル更新処理には制約があり、利用するワークロードによっては注意が必要です。

それでは実際に環境を構築し、基本的なファイル操作や制約事項について検証していきます。

3. 検証環境・検証項目

今回の検証では、Amazon EC2にMountpoint for Amazon S3をインストールし、Amazon S3バケットをマウントした状態で各種ファイル操作を実施します。

検証環境は以下のとおりです。

検証項目

No 検証内容 確認内容
1 マウント Amazon S3バケットを正常にマウントできるか
2 ファイル一覧表示 lsコマンドでオブジェクトを一覧表示できるか
3 ファイル読み込み catコマンドで内容を参照できるか
4 ファイル作成 touchechoでファイルを作成できるか
5 ファイルコピー cpコマンドでコピーできるか
6 ディレクトリ操作 mkdirでディレクトリを作成できるか
7 ファイル移動 mvコマンドの挙動はどうなるか
8 ファイル削除 rmコマンドで削除できるか
9 ファイル追記 >>による追記は可能か
10 テキスト編集 viなどのエディタで編集できるか

4. Mountpoint for Amazon S3のセットアップ

それでは実際にMountpoint for Amazon S3をセットアップしていきます。

今回はAmazon Linux 2023を利用したAmazon EC2インスタンスへインストールを行います。EC2インスタンスには事前にAmazon S3へアクセスできるIAMロールを付与しています。

まずはAWS Systems Manager Session Managerを利用してEC2へ接続します。
接続後、AWS公式が提供しているRPMパッケージを利用してMountpoint for Amazon S3をインストールします。

sudo dnf install -y https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm

インストール後、バージョンを確認します。

mount-s3 --version
mount-s3 xxx

上記のようにバージョン情報が出力されれば正常にインストールされています。

続いて、マウントポイントとなるディレクトリの作成及びS3バケットのマウントを実施します。

mkdir ~/mnt
mount-s3 <BucketName> ~/mnt

コマンド実行後下記メッセージが出ていればマウント成功です。

bucket <BucketName> is mounted at /home/ssm-user/mnt/

mountコマンドでマウントの確認をします。

sh-5.2$ mount | grep mnt
mountpoint-s3 on /home/ssm-user/mnt type fuse (rw,nosuid,nodev,noatime,user_id=1001,group_id=1001,default_permissions)
sh-5.2$

ここまででMountpoint for Amazon S3を利用する準備が整いました。次の章では、実際にLinuxコマンドを実行し、通常のファイルシステムと同様に利用できるのかを検証します

5.基本的なファイル操作を検証

セットアップが完了したので、実際にMountpoint for Amazon S3を利用して基本的なファイル操作を実施します。

今回は、日常的によく利用するLinuxコマンドを中心に実行し、Amazon S3を通常のファイルシステムと同様に扱えるかを確認していきます。

5-1.ファイル一覧を表示する

まずは、マウントしてディレクトリへ移動し、ファイル一覧を表示します。

cd ~/mnt
ls -la

image.png
初回は空のS3バケットを利用しているため、ファイルは存在しません。

続いて、AWSマネジメントコンソールからテスト用のファイルをアップロードし、再度一覧を表示してみます。
image.png
S3へアップロードしたオブジェクトがファイルとして表示されることを確認できました。

5-2.ファイルを読み込む

続いて、catコマンドを利用してファイルの内容を表示します。

cat test1.txt

image.png
通常のテキストファイルと同様に内容を参照できることを確認できました。

5-3.ファイル作成

次に、新しいファイルを作成してみます。

echo "Hello Mountpoint for Amazon S3" > created.txt
ls -la
cat created.txt

image.png
image.png

サーバ上、S3コンソール画面両方から作成したファイルが存在していることが確認できました。

5-4.ファイルをコピーする

cpコマンドを利用してファイルのコピーします。

cp created.txt copied.txt

image.png
image.png
こちらも同様に、サーバ上及びS3コンソール画面両方からコピーしたファイルの存在を確認できました。

基本的なファイル操作の結果

ここまで検証した範囲では、読み込みや新規作成、コピー、削除といった基本的なファイル操作は通常のLinuxファイルシステムとほぼ同じ感覚で利用できました。

検証結果をまとめると以下のようになります。

操作 コマンド 結果
ファイル一覧表示 ls
ファイル読み込み cat
ファイル作成 echo >
ファイルコピー cp

6. Linuxファイルシステムとの違い・制約を検証

ここまでの検証では、ファイルの作成や読み込み、コピーなどの基本操作は通常のLinuxファイルシステムと同様に利用できることが確認できました。

一方で、Mountpoint for Amazon S3はAmazon S3をバックエンドとしたファイルシステムであるため、一部の操作には制約があります。本章では、実際にコマンドを実行しながら、その挙動を確認していきます。

6-1.ファイルの削除にはオプションが必要

まず、不要になったファイルの削除を実施します。

rm copied.txt

image.png
エラーになるようです。
原因を調査したところ、Mountpoint for Amazon S3ではデフォルトで削除操作が無効となっており、削除を有効にするにはマウント時に--allow-deleteオプションを指定する必要がありました。

cd ~
umount ~/mnt
mount-s3 --allow-delete <BucketName> ~/mnt
cd ~/mnt
rm copied.txt

image.png
再マウント後、今度は正常に削除できました。

6-2.ディレクトリはプレフィックスとして扱われる

続いてディレクトリを作成してみます。

mkdir sample-dir

image.png
Linux上では通常のディレクトリとして表示されます。
しかし、コンソール画面には表示されません。
image.png

S3は実体としてディレクトリを保持しているわけではなく、オブジェクトキーによって階層構造を表現しています。そのため、ディレクトリ配下にファイルを作成して初めて、コンソール上でもプレフィックスとして表示されます。
先ほどのディレクトリにファイルを作成し、再度確認してみます。

echo "sample" > sample-dir/sample.txt

image.png
image.png
image.png
無事、コンソール画面からも確認できるようになりました。

6-3.既存ファイルの編集を検証する

ここまでの検証では、ファイルの新規作成やコピー、削除といった基本操作は問題なく利用できることが確認できました。

続いて、既存ファイルの編集について検証します。

まずは、ファイルへ追記を行ってみます。

echo "append" >> created.txt

image.png

追記はできないようです。それではsedコマンドで「Hello」⇒「Hi」に書き換えるのはどうでしょうか。

sed -i 's/Hello/Hi/' created.txt

image.png
sedでの置換もNGの様です。
最後にviでの編集も試してみます。

image.png
viでは編集ができるようです。
念のため、S3上から同じファイルをcpし、内容が反映されているかを確認してみます。
image.png

しっかり差分が反映されているようです。

よって、Linuxファイルシステム上で制約をまとめると以下になります。

操作 コマンド 結果 備考
ファイル削除 rm 🔼 --allow-deleteオプションが必要
ディレクト作成 mkdir 配下にファイルを作成することで表示される
ファイル編集 echo >>,sed,vi 🔼 viのみ編集可能

ディレクトリを確認してみると一時ファイルのようなものが生成されているようなので、viで編集可能なのはコマンドのecho >>,sedコマンドとは内部的な処理が違うという点で実行できたのではと推察できます。
image.png

7.まとめ

本記事では、Mountpoint for Amazon S3を利用して、S3バケットをLinuxファイルシステムのように扱えるかどうかを検証しました。

検証の結果、以下のことが分かりました。

  • lsやcatなどの参照系コマンドは問題なく利用できる
  • ファイルの新規作成も可能
  • 一方で、既存ファイルの更新(追記・編集)は制約がある
  • rmはデフォルトでは無効であり、--allow-deleteオプションが必要
  • echo >>sed -iでのファイル編集はNG,viのみ更新可能。

特に今回の検証では、ファイルの更新についてはviのみで実行可能という点がわかり、やはり「完全なPOSIX互換ファイルシステム」を求めて利用することは難しく読み取り専用のような使い方が適していると感じました。

そのため、通常のLinuxアプリケーションをそのまま移行できるわけではなく、利用するワークロードに応じた適合性の確認が重要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?