Amazon EFS で構築する共有ファイルストレージ - Lambda ・ ECS ・ EC2 からのマウントと設計指針
パフォーマンスモードとスループットモードの選定基準を明確にし、ライフサイクル管理による IA 階層への自動移行でコストを最適化する手法を紹介します。
EFS の特徴と EBS ・ S3 との使い分け
EFS は NFS v4.1 準拠のマネージドファイルシステムで、複数のコンピューティングリソースから同時にマウントできる点が最大の特徴です。EBS は単一の EC2 インスタンスにアタッチするブロックストレージ (io2 のマルチアタッチを除く)、S3 はオブジェクトストレージで POSIX ファイルシステムとしてはマウントできません。複数のインスタンスやコンテナから同じファイルにアクセスする必要がある場合、EFS が唯一の選択肢です。CMS の共有メディアストレージ、機械学習のトレーニングデータ共有、CI/CD のビルドキャッシュ共有などのユースケースに適しています。EFS は容量を事前にプロビジョニングする必要がなく、ファイルの追加・削除に応じて自動的にスケールします。リージョン内の複数の AZ にデータが冗長化されるため、単一 AZ 障害に対する耐性を標準で備えています。One Zone ストレージクラスを選ぶと単一 AZ のみに格納され、料金が低くなる代わりに AZ 障害時のリスクを負います。
パフォーマンスモードとスループットモード
パフォーマンスモードは汎用モードと最大 I/O モードの 2 種類です。汎用モードはレイテンシが低く、ほとんどのワークロードに適しています。最大 I/O モードは数千のクライアントからの同時アクセスに最適化されていますが、レイテンシがやや高くなります。ファイルシステム作成後にパフォーマンスモードは変更できないため、初期設計時に要件を見極める必要があります。スループットモードは Elastic、プロビジョンド、バーストの 3 種類です。Elastic モードはアクセスパターンに応じてスループットが自動スケールし、最大 10 GiB/s のリードスループットを提供します。バーストクレジットの管理が不要なため、新規構築では Elastic モードを推奨します。プロビジョンドモードは一定のスループットを保証する必要がある場合に使用します。バーストモードはファイルシステムのサイズに比例したベースラインスループットを提供し、蓄積されたバーストクレジットで短時間の高負荷に対応しますが、小さいファイルシステムではクレジット枯渇のリスクがあります。
ライフサイクル管理とコスト最適化
EFS のライフサイクル管理は、一定期間アクセスのないファイルを自動的に低頻度アクセス (IA) ストレージクラスに移行する機能です。IA ストレージクラスの料金は標準クラスの約 8% で、最大 92% のコスト削減が可能です。移行のトリガーは 1 日、7 日、14 日、30 日、60 日、90 日から選択できます。IA クラスのファイルにアクセスすると、読み取りごとにアクセス料金が発生しますが、アクセス頻度が低いファイルであればストレージ料金の削減効果が上回ります。Intelligent-Tiering を有効にすると、再びアクセスされたファイルを自動的に標準クラスに戻すことも可能です。Archive ストレージクラスはさらに低コストで、IA よりもアクセス頻度が低いデータ (コンプライアンス保持データなど) に適しています。コスト最適化のベストプラクティスとして、ライフサイクル管理で IA への移行日数を 30 日に設定し、Intelligent-Tiering を有効にする組み合わせが、多くのワークロードで効果的です。 EFS を深く理解するには、専門書籍 (Amazon)が役立ちます。
Lambda ・ ECS ・ EC2 からのマウントと設計パターン
EC2 からのマウントは amazon-efs-utils パッケージを使うのが推奨で、TLS 暗号化転送と IAM 認証をサポートします。セキュリティグループで NFS ポート (2049) を許可する設定が必要です。ECS (Fargate) では、タスク定義の volumes セクションに EFS ファイルシステム ID とアクセスポイント ID を指定します。アクセスポイントを使うと、コンテナごとに異なるルートディレクトリと POSIX ユーザーを強制でき、マルチテナント環境でのデータ分離に有効です。Lambda では、関数の設定で VPC とファイルシステムのマウントパスを指定します。Lambda から EFS をマウントする場合、関数は VPC 内で実行される必要があり、コールドスタート時に EFS への接続確立が加わるため初回起動が数百ミリ秒程度長くなる点を設計に織り込みます。複数の Lambda 関数から同じ EFS をマウントすることで、関数間でのデータ共有やキャッシュの永続化が実現できます。
セキュリティとバックアップ
EFS はファイルシステムポリシーで転送時の暗号化 (TLS) を強制でき、暗号化されていないクライアントからの接続を拒否する設定が可能です。IAM 認証を有効にすると、マウント時に IAM ロールの権限が検証され、特定のアクセスポイントのみへのアクセスを許可する細やかな制御ができます。POSIX パーミッションによるファイルレベルのアクセス制御も従来通り機能します。バックアップについては AWS Backup と統合しており、定期的な自動バックアップとポイントインタイムリカバリが可能です。レプリケーション機能を使うと、別のリージョンに EFS の読み取り専用レプリカを作成でき、DR (災害復旧) 対策に活用できます。レプリカへのフェイルオーバーは手動操作が必要ですが、RTO を数分レベルに抑えられます。
まとめ
EFS は複数のコンピューティングリソースから共有アクセスが必要なファイルストレージとして、AWS で唯一の POSIX 準拠マネージドサービスです。Elastic スループットモードとライフサイクル管理を組み合わせることで、パフォーマンスとコストの両方を最適化できます。Lambda や ECS からのマウントによりサーバーレスアーキテクチャでも共有ファイルシステムを活用でき、アクセスポイントによるマルチテナント分離やファイルシステムポリシーによる暗号化強制で、セキュリティ要件にも対応します。