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 と Lambda・ECS の統合により、サーバーレスアーキテクチャでも共有ファイルシステムを活用できます。アクセスポイントでアプリケーションごとのルートディレクトリと POSIX 権限を分離し、Lambda 関数間でのデータ共有や大容量ファイルの処理を実現します。Intelligent-Tiering でアクセス頻度に応じたストレージコストの自動最適化も提供します。