こんにちは
今回は最近リリースされた AWS の S3 Files を EC2 からマウントして色々と触ってみたので、そちらの所感を書いていきます
なお、ここでは S3 Files の詳しい説明はあまりしないので、そのあたりは公式ドキュメントをご参照ください
■S3 Files について
S3 Files はざっくりと説明すると、S3 バケットをNFSのようなファイルシステムとして利用できるものとなります
これによりS3バケットへの基本的なファイル操作 (ファイルの作成、読み取り、更新、削除) が可能となり、従来のEFSと比べて利用料金を減らすことができるかもしれません
また、公式ドキュメントを確認する限りでは、EC2などのNFSクライアントから S3 Files マウントターゲットを介して、S3 Files file system につながり、S3 バケットの操作が可能となるみたいです
そのため、位置的には NFSクライアントとS3バケットの中間地点くらいに配置されるイメージになるかと思いました
なお、マウントターゲットはVPC内に作成されるみたいなので、ネットワークやセキュリティグループの設定も忘れないようにしたいですね
■流れ
1. 操作用S3バケットの作成
2. S3 Files のファイルシステムの作成
3. マウントターゲットの確認
4. EC2からマウント
5. EC22内でファイル操作の実行
■手順
※事前にVPCやEC2インスタンスの作成を済ませておいてください
1. 操作用S3バケットの作成
まずは適当にS3バケットを作成します
Amazon S3 > バケット > バケットを作成
バケットタイプ:汎用
バケット名前空間:グローバル名前空間
バケット名:なんでもOKですが、全世界で一意にする必要があります
オブジェクト所有者:ACL 無効 (推奨)
このバケットのブロックパブリックアクセス設定:パブリックアクセスをすべて ブロック
バケットのバージョニング:有効 (有効にしないとS3 Files を利用できません
2. S3 Files のファイルシステムの作成
ファイルシステムを作成してみます
Amazon S3 > バケット > ${バケット名} > ファイルシステム > ファイルシステムを作成 を押下
下記項目を入力し、ファイルシステムを作成 を押下します
汎用バケットまたはプレフィックス:項番1 で作成したバケット名
仮想プライベートクラウド (VPC):EC2インスタンスが存在するVPCを選択
※すでにこちらのバケットは削除しています
なお、マウントターゲットの作成には大体5分くらいかかりました
3. マウントターゲットの確認
それでは、作成されたマウントターゲットを確認してみます
※すでにマウントターゲットなどはすべて削除しています
AZを跨いで冗長化されており、セキュリティグループも自動的に作成されています
また、プロパティの画面よりIAMロールも自動的に作成されていましたので、もう至れり尽くせりですね
4. EC2からマウント
マウントする際は下記画像のように各AWSサービスへのアタッチボタンが表示されます
そのうえで、今回はEC2へのアタッチとなるので、EC2上からマウントコマンドを実行してみます
アタッチボタンを押下すると下記のように実行コマンドが画面上に表示されるので、こちらを参考にEC2上でコマンドを実行していきます
※CloudShellではないので、ステップ6から実行します
・efs-utilのインストール
今回利用したOSがAlmaLinux9となっており、ステップ6のコマンドでは efs-util が入らなかったため下記で対応しました
※rpmビルドの際に場合によっては色々と入れないとだめかもしれないので、その際は適宜調整をお願いします
sudo dnf install git rpm-build cargo openssl-devel rust cmake gcc-c++
git clone https://github.com/aws/efs-utils
cd efs-utils/
dnf install make
sudo make rpm
dnf install build/amazon-efs-utils*rpm
・マウントポイントの作成
sudo mkdir /mnt/s3files
・マウントコマンドの実行
sudo mount -t s3files ${S3 Files のマウントターゲットID} /mnt/s3files
下記エラーが出たので、aws-cilのインストールと設定を実施します
AWS Access Key ID and Secret Access Key are not found in AWS credentials file (/root/.aws/credentials), config file (/root/.aws/config), from ECS credentials relative uri, or from the instance security credentials service
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
/usr/local/bin/aws --version
→ aws-cli のバージョンが表示されればOK
IAMユーザーとアクセスキーを作成し、下記コマンドで登録します
aws configure
気を取り直してもう一度マウントを実行してみます
sudo mount -t s3files fs-0b586fbacce2ec12f /mnt/s3files
ここでマウントがタイムアウトしました
Mount attempt 1/3 failed due to timeout after 15 sec, wait 0 sec before next attempt. Mount attempt 2/3 failed due to timeout after 15 sec, wait 0 sec before next attempt.
→ 調査した結果、自動作成されたS3 Filesのファイルシステムに紐づいているセキュリティグループ(今回だと sg-0c03985c5121cae50 )では、ソースが「sg-0c03985c5121cae50 / default」のようになっており、
自分自身のセキュリティグループが紐づいているリソースからのアクセスのみ許可されている状況でした
なので、sg-0c03985c5121cae50 のセキュリティグループのインバウンド通信で、すでにEC2に装着しているセキュリティグループからのアクセスを許可するようにしました
三度目の正直でもう一度マウントコマンドを実行しました
sudo mount -t s3files fs-0b586fbacce2ec12f /mnt/s3files
Warning: config file does not have stunnel_debug_enabled item in section mount.. You should be able to find a new config file in the same folder as current config file /etc/amazon/efs/s3files-utils.conf. Consider update the new config file to latest config file. Use the default value [stunnel_debug_enabled = False].
→ warning のエラーは出たもののマウント自体は成功してそうです
ls -la /mnt/s3files/
→ まだ何も表示されません
5. EC2内でファイル操作の実行
最後に簡単なファイル操作を実施してみます
echo "test" > /mnt/s3files/test.txt
# ls -la /mnt/s3files/ total 12 drwxr-xr-x. 3 root root 10240 Apr 12 09:58 . drwxr-xr-x. 3 root root 21 Apr 12 09:45 .. drwx------. 2 root root 10240 Apr 12 08:25 .s3files-lost+found-fs-0b586fbacce2ec12f -rw-r--r--. 1 root root 5 Apr 12 09:58 test.txt
→ サーバー上ではファイルが作成されました
S3バケット上からも作成されています
それでは、サーバー上から削除してみます
rm -f /mnt/s3files/test.txt && ls -la /mnt/s3files/
total 8 drwxr-xr-x. 3 root root 10240 Apr 12 10:02 . drwxr-xr-x. 3 root root 21 Apr 12 09:45 .. drwx------. 2 root root 10240 Apr 12 08:25 .s3files-lost+found-fs-0b586fbacce2ec12f
→ 削除されました
S3バケット上からも削除されました(※画面上での反映に1~2分ほど時間がかかりました)
■まとめ
いかがでしたでしょうか
まだ出たばかりのサービスで分からないことだらけでしたが、正直EFSよりも使い心地はよかったです
ただ、初見だとセキュリティグループの設定調整などが必要だったので、この辺りは気を付ける必要がありました
また、S3 Files を利用したことによって、S3バケットへの操作性が格段に良くなるので、さらにバケットポリシーなどのセキュリティ周りには気を配る必要があると思いました
今後はインフラの構築でも S3 Files が段々利用されていく気がするので、引き続き EFS との使い分けなども勉強していきます





