新機能 Amazon S3 Files で S3 バケットを EC2 にマウントする
Amazon S3 Files は、S3 バケットを NFS ファイルシステムとして EC2 などのコンピュートリソースに直接マウントできるサービスである。データは S3 に保持されたまま、通常のファイル操作 (ls、cp、cat など) で読み書きできる。
S3 Files とは
S3 Files は Amazon EFS をベースに構築された共有ファイルシステムで、S3 バケットのデータにファイルシステムとしてアクセスできる。
主な特徴は以下の通りである。
| 項目 | 内容 |
|---|---|
| プロトコル | NFS 4.1 / 4.2 |
| 対応コンピュート | EC2、Lambda、ECS、EKS |
| 同時接続数 | 最大 25,000 コンピュートリソース |
| 読み取りスループット | 最大 TB/秒 |
| IOPS | 1,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. ファイルシステムの作成
コンソールから作成する場合

- S3 コンソールでバケットを選択
- 「ファイルシステム」タブ → 「ファイルシステムを作成」 をクリック
コンソールから作成すると、全 AZ にマウントターゲットとアクセスポイントが自動作成される。

- プレフィックスと 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 に保持されたまま、
ls、cat、cpなどの通常のファイル操作が使える - 高性能ストレージによるキャッシュで低レイテンシを実現し、アクセスのないデータは自動で退避される
/etc/fstabで自動マウントを設定すれば、再起動後も維持される
読み込み中...