Amazon EFS
複数の EC2 インスタンスや Lambda 関数から同時にアクセスできるフルマネージドな NFS ファイルシステムサービス
概要
Amazon Elastic File System (EFS) は、NFS v4.1 プロトコルに準拠したフルマネージドなファイルストレージサービスです。複数の EC2 インスタンスや Lambda 関数、ECS タスクから同時にマウントしてアクセスでき、ファイルの追加・削除に応じてストレージ容量が自動的に拡縮します。容量計画やプロビジョニングが不要で、ペタバイト規模まで自動スケールします。Standard ストレージクラスと Infrequent Access (IA) ストレージクラスがあり、EFS Intelligent-Tiering を有効にすれば、アクセス頻度に応じてファイルを自動的に最適なクラスに移行してコストを削減できます。リージョン内の複数のアベイラビリティゾーンにデータを冗長化するため、高い可用性と耐久性を実現しています。
EBS との使い分けと共有ストレージの設計
EFS と EBS はどちらも EC2 インスタンスのストレージとして利用できますが、用途が明確に異なります。EBS はブロックストレージで、1 つの EC2 インスタンスに専有的にアタッチされます (io2 の Multi-Attach を除く)。データベースや OS のルートボリュームなど、単一インスタンスからの高速アクセスが必要な場合に適しています。一方、EFS はファイルストレージで、数千の EC2 インスタンスから同時にマウントできます。共有設定ファイル、Web コンテンツの配信元、機械学習のトレーニングデータセットなど、複数のインスタンスからの同時アクセスが必要な場合に適しています。EFS は NFS v4.1 のみをサポートするため、Windows からの直接マウントはできません。Windows クライアントからの接続が必要な場合は FSx for Windows File Server を検討します。Azure Files は SMB と NFS の両方をサポートしており、Windows 対応が必要な場合の選択肢になりますが、EFS は使用量ベースの課金と Intelligent-Tiering による自動コスト最適化が可能な点で、Linux 環境では優位に立ちます。
パフォーマンスモードとスループット設計
EFS のパフォーマンスは、パフォーマンスモードとスループットモードの 2 軸で制御します。パフォーマンスモードには汎用モード (レイテンシ重視) と最大 I/O モード (スループット重視) の 2 種類があります。汎用モードは Web サーバーのコンテンツ配信や CMS のメディアファイルなど、レイテンシが重要なワークロードに適しています。最大 I/O モードは並列アクセスが多いビッグデータ処理や機械学習に適していますが、メタデータ操作のレイテンシが若干高くなるトレードオフがあります。スループットモードは Elastic スループット (推奨) とプロビジョンドスループットから選択できます。Elastic スループットはアクセスパターンに応じてスループットを自動調整し、バーストクレジットの管理が不要です。プロビジョンドスループットは一定のスループットを保証したい場合に使いますが、使用量に関係なく課金されるため、アクセスパターンが予測しにくい場合は Elastic を選択するのが安全です。Amazon の専門書 も活用できます。
ライフサイクル管理とサーバーレス連携
EFS のライフサイクル管理を有効にすると、一定期間アクセスされていないファイルを低頻度アクセス (IA) ストレージクラスに自動移行し、ストレージコストを最大 92% 削減できます。Intelligent-Tiering を有効にすれば、IA に移行したファイルが再びアクセスされた際に Standard クラスに自動的に戻るため、手動でのクラス管理が不要です。移行ポリシーは 1 日、7 日、14 日、30 日、60 日、90 日から選択でき、ワークロードのアクセスパターンに応じて設定します。Lambda や Fargate からのマウントにも対応しており、サーバーレスアーキテクチャでの共有ストレージとして活用できます。Lambda で EFS を使う場合、Lambda 関数を VPC 内に配置する必要があり、コールドスタート時間が若干増加する点に注意が必要です。ECS タスクからのマウントでは、タスク定義に EFS ボリュームを指定するだけで、コンテナ間でファイルを共有する構成が簡単に実現できます。