Lambda で Amazon EFS を使用する - AWS Lambda

Lambda で Amazon EFS を使用する

Lambda は Amazon Elastic File System (Amazon EFS) と統合して、Lambda アプリケーションに対するセキュアな共有ファイルシステムアクセスをサポートします。初期化中に、VPC 内のローカルネットワークを介して、NFS プロトコルを使ってファイルシステムをマウントするよう、関数を設定することができます。Lambda は接続を管理し、ファイルシステムとの間で送受信されるすべてのトラフィックを暗号化します。

ファイルシステムと Lambda 関数は同じリージョンに存在している必要があります。あるアカウント内の Lambda 関数は、別のアカウントにファイルシステムをマウントできます。このシナリオでは、関数 VPC とファイルシステム VPC との間で VPC ピア接続を設定します。

注記

ファイルシステムに接続するよう関数を設定する方法については、「」を参照してくださいLambda 関数のファイルシステムアクセスの設定

Amazon EFS は、複数の関数が同時に同じファイルシステムに書き込もうとした場合に、破損を防ぐためにファイルロックをサポートしています。Amazon EFS のロックは NFS v4.1 プロトコルのアドバイザリーロックに従っており、アプリケーションではファイル全体に対するロックとバイト範囲に対するロックの両方を使用できます。

Amazon EFS には、大規模環境で高いパフォーマンスを維持するためのアプリケーションのニーズに基づいて、ファイルシステムをカスタマイズするオプションがあります。考慮すべき主な要因は、接続数、スループット (MiB/秒)、IOPS の 3 つです。

Quotas

ファイルシステムのクォータと制限の詳細については、Amazon Elastic File System ユーザーガイドAmazon EFS ファイルシステムのクォータ を参照してください。

スケーリング、スループット、および IOPS に関する問題を回避するには、Amazon EFS が Amazon CloudWatch に送信するメトリクスをモニタリングします。Amazon EFS でのモニタリングの概要については、Amazon Elastic File System ユーザーガイドMonitoring Amazon EFS を参照してください。

Connections

Amazon EFS は、ファイルシステムごとに最大 25,000 の接続をサポートします。初期化中、関数の各インスタンスは、呼び出しの間持続するファイルシステムへの単一の接続を作成します。つまり、ファイルシステムに接続されている 1 つまたは複数の関数間では、25,000 の同時接続数に到達する可能性があります。関数が作成する接続数を制限するには、予約済み同時実行を使用します。

ただし、関数のコードまたは設定を大規模に変更すると、関数インスタンスの数が、現在の同時実行数を超えて一時的に増加します。Lambda は、新しいリクエストを処理するために新しいインスタンスをプロビジョニングしますが、古いインスタンスがファイルシステムへの接続を閉じるまでに多少の遅延が生じます。デプロイ中に最大接続数の制限に達するのを回避するには、ローリングデプロイを使用します。ローリングデプロイでは、変更するたびにトラフィックを新しいバージョンに徐々に移行します。

Amazon EC2 などの他のサービスから同じファイルシステムに接続する場合は、Amazon EFS での接続のスケーリング動作にも注意する必要があります。ファイルシステムでは、バーストで最大 3,000 の接続の作成がサポートされ、その後は 1 分あたり 500 の新しい接続がサポートされます。これは、Lambda のバーストスケーリング動作に一致し、リージョン内のすべての関数に該当します。ただし、Lambda の外部で接続を作成している場合、関数はフルスピードでスケールできないことがあります。

接続のアラームをモニタリングしてトリガーするには、ClientConnections メトリクスを使用します。

Throughput

大規模環境では、ファイルシステムの最大スループットを超えることもできます。バーストモード (デフォルト) では、ファイルシステムのベースラインスループットが低く、サイズに応じて直線的にスケールされます。アクティビティのバーストを可能にするために、ファイルシステムにバーストクレジットが付与され、100 MiB/秒以上のスループットを使用できます。クレジットは継続的に蓄積され、読み取りおよび書き込みオペレーションごとに消費されます。ファイルシステムのクレジットが不足すると、ベースラインスループットを超えた読み取りおよび書き込みオペレーションが調整されます。それにより、呼び出しがタイムアウトする可能性があります。

注記

プロビジョニングされた同時実行を使用する場合、関数はアイドル状態でもバーストクレジットを消費できます。プロビジョニングされた同時実行では、関数のインスタンスは呼び出される前に Lambda によって初期化され、数時間ごとにリサイクルされます。初期化中に接続されたファイルシステム上のファイルを使用する場合、このアクティビティではすべてのバーストクレジットを使用できます。

スループットに関するアラームをモニタリングしてトリガーするには、BurstCreditBalance メトリクスを使用します。このメトリクスは、関数の同時実行数が低い場合は高くなり、高い場合は低くなります。アクティビティの少ない間にピークトラフィックに対応するために、メトリクスが常に低くなるか蓄積しない場合は、関数の同時実行数の制限や、プロビジョニングされたスループットの有効化が必要になる可能性があります。

IOPS

入出力オペレーション/秒 (IOPS) は、ファイルシステムによって処理される読み取りおよび書き込みオペレーション数の測定値です。汎用モードでは、IOPS は低レイテンシーを実現するために制限されます。これはほとんどのアプリケーションにとって有益です。

汎用モードで IOPS をモニタリングしてアラームを作成するには、PercentIOLimit メトリクスを使用します。このメトリクスが 100% に達すると、関数は、読み取りおよび書き込みオペレーションの完了を待機してタイムアウトする可能性があります。