Amazon EFS と Lambda ・ ECS の統合パターン - サーバーレスでの共有ファイルシステム活用
Lambda 関数や ECS タスクに EFS をマウントして共有ファイルシステムを活用する。アクセスポイントの設計とパフォーマンス最適化を紹介します。
Lambda と EFS の統合
Lambda 関数に EFS をマウントすると、/mnt 配下のパスでファイルシステムにアクセスできます。Lambda の /tmp ディレクトリは最大 10 GB ですが、EFS は事実上無制限のストレージを提供します。大容量の機械学習モデル、データセット、一時ファイルの処理に有効です。設定は Lambda 関数の VPC 設定 (サブネット、セキュリティグループ) と EFS のファイルシステム ID ・アクセスポイント ID を指定するだけです。Lambda 関数は VPC 内で実行されるため、EFS のマウントターゲットと同じサブネットまたはルーティング可能なサブネットに配置する必要があります。
アクセスポイントの設計
EFS アクセスポイントは、ファイルシステムへのアクセスをアプリケーションごとに分離する機能です。各アクセスポイントにルートディレクトリ (例: /app1、/app2) と POSIX ユーザー (UID/GID) を設定し、Lambda 関数ごとに異なるアクセスポイントを割り当てます。関数 A は /mnt/efs 経由で /app1 配下のみにアクセスし、関数 B は /app2 配下のみにアクセスする分離が実現できます。IAM 認証を有効にすると、EFS のファイルシステムポリシーで IAM ロールに基づくアクセス制御が可能になり、特定の Lambda 関数のみが特定のアクセスポイントを使用できるよう制限できます。
ECS タスクとの統合とパフォーマンス
ECS タスク定義で EFS ボリュームを定義し、コンテナ定義の mountPoints でマウントパスを指定します。同一タスク内の複数コンテナが同じ EFS ボリュームを共有でき、サイドカーパターンでログ収集コンテナがアプリケーションコンテナのログファイルを読み取る構成に活用できます。パフォーマンスの観点では、 Lambda のコールドスタート時に EFS のマウントに数百ミリ秒の追加レイテンシが発生します。 Provisioned Concurrency で Lambda のコールドスタートを排除するか、 Elastic スループットモードで EFS のスループットを確保することで、レイテンシへの影響を最小化できます。 共有ストレージについて体系的に学びたい方は、関連書籍 (Amazon)も参考になります。
EFS 統合の料金考慮
EFS の料金はストレージクラスとスループットモードで決まります。Standard ストレージは 1 GB あたり月額約 0.30 ドル、IA (Infrequent Access) は約 0.016 ドルです。Lambda から EFS にアクセスする場合、Lambda の VPC 接続が必要で、コールドスタート時間が数秒増加する点に注意が必要です。EFS のスループットは Elastic モードが推奨で、アクセスパターンに応じて自動スケールします。Lambda の /tmp (最大 10 GB、無料) で足りるケースでは EFS を使わない方がシンプルかつ低コストです。
ユースケースの広がり
EFS をサーバーレスと組み合わせると、従来は難しかった処理が実現します。大きな機械学習モデルを EFS に置き、複数の Lambda 関数で共有して読み込めば、デプロイパッケージのサイズ制限に縛られずに推論を実行できます。複数の関数やタスクが同じファイルを参照・更新する共有状態の保持にも使えます。ファイルシステムを前提に作られた既存アプリケーションを、大きく書き換えずにコンテナへ移行する際の受け皿にもなります。動画や画像の中間ファイルを一時的に共有する処理など、ファイル操作が中心のワークロードで威力を発揮します。
スループットモードの選択
EFS の性能は、スループットモードの選び方で大きく変わります。アクセス量に応じて自動で性能が調整されるモードは、負荷の変動が読みにくいワークロードに適し、過不足のないスループットを得られます。一定の高い性能を常に確保したい場合は、あらかじめスループットを固定的に割り当てるモードを選びます。蓄積したデータ量に比例して性能が決まる従来方式では、小容量でアクセスが多いと性能が不足することがあるため注意します。アクセスの特性を見極め、レイテンシとコストのバランスが取れたモードを選定することが重要です。
可用性とバックアップ
EFS は複数のアベイラビリティゾーンにデータを冗長化して保存するため、高い可用性を備えています。各ゾーンにマウントターゲットを用意しておけば、片方のゾーンに障害が起きても別のゾーンからアクセスを継続できます。Lambda や ECS を複数ゾーンに分散配置する構成と組み合わせることで、全体の耐障害性が高まります。誤削除やデータ破損に備え、バックアップ管理サービスと連携して定期的にバックアップを取得し、必要に応じて復元できる体制を整えます。重要なデータは別リージョンへの複製も検討し、災害対策を強化します。
セキュリティ設計
共有ファイルシステムを安全に使うには、多層的な保護を設計します。保存データの暗号化を有効にし、通信経路も暗号化して、データを保護します。アクセスポイントごとに POSIX 権限とルートディレクトリを分け、アプリケーション間の越境アクセスを防ぎます。さらに IAM 認証とファイルシステムポリシーを使えば、特定のロールだけが特定のアクセスポイントを利用できるよう制御できます。マウントターゲットのセキュリティグループで、許可した経路からのみ接続できるようにします。これらを組み合わせ、最小権限でファイルシステムを共有する構成を作ります。
まとめ
EFS と Lambda・ECS の統合により、サーバーレスアーキテクチャでも共有ファイルシステムを活用できます。アクセスポイントでアプリケーションごとのルートディレクトリと POSIX 権限を分離し、Lambda 関数間でのデータ共有や大容量ファイルの処理を実現します。Intelligent-Tiering でアクセス頻度に応じたストレージコストの自動最適化も提供します。