よっしー
こんにちは。よっしーです(^^)
今日は、EFSについて解説しています。
背景
EFSについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
EFSとは
AWS Elastic File System (EFS)は、Amazonが提供するフルマネージド型のクラウド上のファイルストレージサービスです。主な特徴は以下の通りです。
- 完全マネージド
EFSの基盤となるストレージ容量やパフォーマンスのプロビジョニング、パッチ適用、バックアップなどの管理作業は不要です。 - 高可用性とデュアルスタック
EFSはAWS複数のアベイラビリティーゾーンにまたがるデュアルスタックの構成で提供され、高い可用性を実現しています。 - 拡張性と耐久性
必要に応じて無制限にストレージ容量を拡張でき、99.999999999%(11つの9)の耐久性を実現しています。 - マルチプロトコルアクセス
NFSv4、マウントターゲットを介してLinux/UNIXクライアントに、またAMI通じてWindowsクライアントにアクセスできます。 - パフォーマンス
ベースラインスループットに加え、バーストスループットがあり、プロビジョニングされたスループット容量を超えて一時的に高いスループットを実現できます。 - セキュリティとコンプライアンス
VPCとマウントターゲットによってネットワークアクセスを制御可能で、データ暗号化やアクセス制御などのセキュリティ機能も提供しています。
EFSは、AWS上で稼働するさまざまなリソースからのファイル共有やクラウドネイティブワークロードでの利用に適しています。
具体例
EFSを利用するユースケースの具体例をいくつか挙げます。
- コンテナ/サーバーレスワークロード
AWSの各種コンテナサービス(ECS、EKS、Fargate)やサーバーレス(Lambda)でファイル共有の必要がある場合に、EFSを使うことができます。例えばWebアプリケーションのコンテナとデータ解析バッチのコンテナで同じデータを共有する際などに便利です。 - ビッグデータ/分析ワークロード
Hadoopクラスターや分散データ解析パイプラインなどで、複数ノード間でデータを共有する必要がある場合に、EFSを使えば簡単にデータ共有が可能です。 - マルチアクセスファイル共有
異なるコンピューティングリソース(EC2、Lambda、ECS等)から同一ファイルシステムにアクセスする必要がある場合に、EFSで一元管理できます。 - ホームディレクトリ管理
LDAP、Active Directoryなどと統合して、マルチユーザー環境でユーザーごとのホームディレクトリを提供することができます。 - ミディア処理ワークロード
動画エンコーディングなどのメディア処理で、複数インスタンス間で大量のデータを共有する際に活用できます。 - コンテンツ管理システム
CMSやWikisなどの大規模コンテンツ管理で、データの一元的な管理とアクセスにEFSを活用できます。
このようにEFSは、クラウド上の様々なワークロードでファイル共有の要件がある場合に、シンプルかつパフォーマンスの高いストレージソリューションとして利用できます。
利用制限
EFSは以下の主な制限があります。
- 最大ファイルサイズ
EFSでは単一ファイルの最大サイズが47.9TiBです。これを超えるファイルは作成できません。 - 最大ファイル数
ファイルシステムあたりの最大ファイル数は無制限ですが、実際にはスループット能力に依存します。 - マウントターゲット数
1つのファイルシステムにつき、AWS アカウントあたり最大 1,000 のマウントターゲットを作成できます。 - IPアドレス数
各マウントターゲットは、それぞれ個別のIPアドレスを持ちます。各サブネットの割り当て可能なIPアドレスの制限を考慮する必要があります。 - スループット制限
EFSのスループット能力は、バーストクレジットや割り当てられたプロビジョンドスループットに依存します。ワークロードのスループット要件を考慮する必要があります。 - ライフサイクル管理の制限
EFSにはファイル単位でのライフサイクル管理機能がなく、ファイルシステム全体でのみライフサイクルポリシーを適用できます。 - マルチアタッチ制限
同一アベイラビリティーゾーン内の複数のマウントターゲットから、同時に同じファイルシステムをマウントすることはできません。
これらの制限を考慮し、ワークロードの要件に合わせてEFSを設計・運用する必要があります。
効果的に利用するために
EFSを効果的に利用するためのベストプラクティスをいくつか紹介します。
- パフォーマンス最適化
- プロビジョンドスループットモードを使い、ワークロードに合わせてスループット容量を設定する
- 複数の接続を確立し、I/Oを分散させる
- 可能な限りマウントターゲットとEC2インスタンスを同じAZに配置する
- EFSのパフォーマンスモードを選択する(汎用モード or マックス I/Oモード)
- データ保護
- EFSバックアップを有効にし、定期的にバックアップを取得する
- データを暗号化するためにAWS KMSカスタムキーを使用する
- VPCセキュリティグループを使ってアクセスを制限する
- コスト最適化
- 不要なデータのライフサイクル管理を行う
- 未使用のリソースを削除する
- CloudWatchを使ってEFS使用量を監視し、必要に応じてスケールする
- 可用性と信頼性
- EFSファイルシステムを複数のAZにデプロイする
- アプリケーション側のリトライロジックを実装する
- DNSフェイルオーバーを使用する
- セキュリティとアクセス制御
- IAMポリシーを使って適切なアクセス許可を付与する
- AWSBackupを使ってEFSのバックアップを暗号化する
- VPC内からのみEFSにアクセスできるようにする
- 運用上の考慮事項
- 大量のスモールファイルでなく、可能な限り大きなファイルを使う
- パフォーマンス向上のため、EFSクライアントの最新バージョンを使う
- CloudWatchメトリクスでEFSの使用状況を監視する
これらのベストプラクティスを考慮することで、EFSをよりパフォーマンス、セキュリティ、コストの面で最適化できます。
おわりに
今日は、 EFSについて解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント