メインコンテンツまでスキップ

新機能 Amazon S3 Files で S3 バケットを EC2 にマウントする

· 約6分

Amazon S3 Files は、S3 バケットを NFS ファイルシステムとして EC2 などのコンピュートリソースに直接マウントできるサービスである。データは S3 に保持されたまま、通常のファイル操作 (lscpcat など) で読み書きできる。

S3 Files とは

S3 Files は Amazon EFS をベースに構築された共有ファイルシステムで、S3 バケットのデータにファイルシステムとしてアクセスできる。

主な特徴は以下の通りである。

項目内容
プロトコルNFS 4.1 / 4.2
対応コンピュートEC2、Lambda、ECS、EKS
同時接続数最大 25,000 コンピュートリソース
読み取りスループット最大 TB/秒
IOPS1,000 万以上/バケット
暗号化TLS (転送中) + AWS KMS (保存時)
ファイルシステム機能POSIX パーミッション、ファイルロック、読み取り後書き込み一貫性

動作の仕組み

S3 Files はアクセスされたデータを高性能ストレージに自動ロードし、低レイテンシで提供する。

  • 小さいファイル (デフォルト 128 KB 未満): 高性能ストレージから直接読み取り
  • 大きいファイル (1 MB 以上): S3 から直接ストリーミング
  • 書き込み: 高性能ストレージに書き込み後、S3 に自動同期

高性能ストレージ上のデータは、一定期間 (デフォルト 30 日、1 - 365 日で設定可能) アクセスがないと自動削除される。

前提条件

  • AWS アカウント
  • EC2 インスタンス (Linux)
  • S3 バケット (EC2 と同じリージョン)
  • IAM ロール 2 つ
    • ファイルシステム作成用: S3 バケットの読み書き権限
    • EC2 インスタンス用: AmazonS3FilesClientFullAccess マネージドポリシーをアタッチ
  • セキュリティグループ: NFS ポート 2049 の通信を許可

IAM ロールの作成

S3 Files には 2 つの IAM ロールが必要である。

1. ファイルシステム作成用ロール

マネジメントコンソールを使用した場合は自動的に作成されるため不要

S3 Files がバケットにアクセスするためのロールである。

# ロールの作成
aws iam create-role \
--role-name S3Files-FileSystem-Role \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "s3files.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}'

# S3 Files クライアントポリシーをアタッチ
aws iam attach-role-policy \
--role-name S3Files-FileSystem-Role \
--policy-arn arn:aws:iam::aws:policy/AmazonS3FilesClientFullAccess

ファイルシステム作成時に --role-arn で指定する。

2. EC2 インスタンス用ロール

IAM ロールのアタッチがないとマウントに失敗する

以下のロールを CloudShell で作成する。

# ロールの作成
aws iam create-role \
--role-name EC2-S3Files-Role \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}'

# S3 Files クライアントポリシーをアタッチ
aws iam attach-role-policy \
--role-name EC2-S3Files-Role \
--policy-arn arn:aws:iam::aws:policy/AmazonS3FilesClientFullAccess

# インスタンスプロファイルの作成とアタッチ
aws iam create-instance-profile \
--instance-profile-name EC2-S3Files-Profile

aws iam add-role-to-instance-profile \
--instance-profile-name EC2-S3Files-Profile \
--role-name EC2-S3Files-Role

このロールをインスタンスにアタッチする。

セットアップ手順

1. S3 バケットの準備

S3 コンソールで汎用バケットを作成する。既存のバケットでも構わない。

ただし、バケットのバージョニング設定が必要

2. ファイルシステムの作成

コンソールから作成する場合

alt text

  1. S3 コンソールでバケットを選択
  2. 「ファイルシステム」タブ → 「ファイルシステムを作成」 をクリック

コンソールから作成すると、全 AZ にマウントターゲットとアクセスポイントが自動作成される。

alt text

  1. プレフィックスと VPC を指定して、「ファイルシステムを作成」をクリックする。

出力されるファイルシステム ID (例: fs-0123456789abcdef0) を記録しておく。

3. インスタンスにマウント

ターミナルで、以下を実行する。

# マウントポイントの作成
sudo mkdir /mnt/s3files

# マウント
sudo mount -t s3files fs-0123456789abcdef0:/ /mnt/s3files
注記

マウントできない場合は、以下のコマンドを実行し再試行

sudo dnf install -y amazon-efs-utils # Amazon Linux, RHEL
# sudo apt install -y amazon-efs-utils (Ubuntu, Debian)
注記

dnf コマンド実行時に通信がうまくいかない場合は、S3 エンドポイント (ゲートウェイ) を設置し、インスタンスと同じ AZ に割り当てる。

ただし、S3 エンドポイントのルートテーブルはインスタンスのあるサブネットと同一のものにしておく。

マウントの確認:

df -h /mnt/s3files

以下のような出力が表示される。

Filesystem      Size  Used Avail Use% Mounted on
<s3files-dns> 8.0E 129M 8.0E 1% /mnt/s3files

4. 動作確認

cd /mnt/s3files

# ファイルの作成
sudo sh -c 'echo "Hello, s3 Files!" > test.txt'

# ファイルの読み取り
cat test.txt

# ディレクトリの作成
sudo mkdir test-directory

ls -la

# ファイルのコピー
sudo cp test.txt test-directory/

cd test-directory/

# ファイル一覧の確認
ls -la

書き込んだファイルは約 1 分で S3 バケットに同期される。S3 コンソールでオブジェクトが作成されていることを確認できる。

aws s3 ls s3://<bucket-name>/

自動マウントの設定

再起動後もマウントを維持するには /etc/fstab に追加する。

# /etc/fstab に追加
fs-0123456789abcdef0:/ /mnt/s3files s3files _netdev,nofail 0 0

_netdev はネットワーク接続後にマウントするためのオプションで、必須である。nofail を付けることで、マウント失敗時にインスタンスが起動不能になることを防げる。

料金

S3 Files の料金は以下で構成される。

  • 高性能ストレージ使用量: ファイルシステム上のデータのストレージ料金
  • ファイルシステムアクセス料金: 高性能ストレージへの読み書き操作
  • S3 リクエスト料金: 1 MB 以上のファイルを S3 から直接読み取る場合は S3 GET 料金のみ

プロビジョニング不要の従量課金制で、AWS によると従来の S3 とファイルシステム間のデータコピーと比較して最大 90% のコスト削減が可能とされている。

まとめ

  • S3 Files を使うと S3 バケットを NFS ファイルシステムとして EC2 にマウントできる
  • データは S3 に保持されたまま、lscatcp などの通常のファイル操作が使える
  • 高性能ストレージによるキャッシュで低レイテンシを実現し、アクセスのないデータは自動で退避される
  • /etc/fstab で自動マウントを設定すれば、再起動後も維持される

参考

コメント

読み込み中...

コメントを投稿する