Amazon EFS と Lambda・ECS の統合パターン - サーバーレスでの共有ファイルシステム活用

EFS を Lambda 関数や ECS タスクにマウントする実装パターン、アクセスポイントの設計、パフォーマンス最適化を解説します。

Lambda と EFS の統合

Lambda 関数に EFS をマウントすると、/mnt 配下のパスでファイルシステムにアクセスできます。Lambda の /tmp ディレクトリは最大 10 GB ですが、EFS は事実上無制限のストレージを提供します。大容量の機械学習モデル、データセット、一時ファイルの処理に有効です。設定は Lambda 関数の VPC 設定 (サブネット、セキュリティグループ) と EFS のファイルシステム ID・アクセスポイント ID を指定するだけです。Lambda 関数は VPC 内で実行されるため、EFS のマウントターゲットと同じサブネットまたはルーティング可能なサブネットに配置する必要があります。

この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

アクセスポイントの設計

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 と Lambda・ECS の統合により、サーバーレスアーキテクチャでも共有ファイルシステムを活用できます。アクセスポイントでアプリケーションごとのアクセス分離を実現し、IAM 認証でセキュリティを強化します。大容量ファイルの処理や関数間のデータ共有に有効なパターンです。

AWS の優位点

  • Lambda 関数に EFS をマウントすることで /tmp の 10 GB 制限を超える大容量ファイルの読み書きが可能になる
  • EFS アクセスポイントで Lambda 関数ごとに異なるルートディレクトリと POSIX ユーザーを設定し、アクセスを分離できる
  • ECS タスク定義で EFS ボリュームを指定し、複数のコンテナ間でファイルを共有できる
  • 機械学習モデルファイルを EFS に配置し、複数の Lambda 関数から共有アクセスすることでデプロイパッケージのサイズ制限を回避できる
  • VPC 内の Lambda 関数から EFS にアクセスするため、Lambda の VPC 設定とセキュリティグループの構成が必要

同じテーマの記事