Lambda 関数のレスポンスストリーミング
Lambda 関数 URL を設定して、レスポンスペイロードをクライアントにストリーミングで返すようにできます。レスポンスストリーミングは、最初のバイトまでの時間 (TTFB) のパフォーマンスを向上させることで、レイテンシーの影響を受けやすいアプリケーションに役立ちます。これは、レスポンスの一部が利用可能になったときにクライアントに返送できるためです。さらに、レスポンスストリーミングを使用して、より大きなペイロードを返す関数を構築できます。レスポンスストリームのペイロードには、バッファされるレスポンスの 6 MB と比較して 20 MB のソフトリミットがあります。応答をストリーミングするということは、関数が応答全体をメモリに収める必要がないことも意味します。応答サイズが非常に大きい場合は、関数に設定する必要のあるメモリ量を減らすことができます。
Lambda が応答をストリーミングする速度は、応答サイズによって異なります。関数の応答では、最初の 6 MB のストリーミングレートには上限がありません。応答が 6 MB を超える場合、残りの応答には帯域幅の上限が適用されます。ストリーミング帯域幅の詳細については、レスポンスストリーミングの帯域幅制限 を参照してください。
ストリーミングレスポンスにはコストが発生します。詳細については、AWS Lambda の料金
Lambda は Node.js マネージドランタイムでのレスポンスストリーミングをサポートしています。その他の言語の場合は、カスタムランタイム API 統合を備えたカスタムランタイムを使用してレスポンスをストリーミングするか、Lambda Web Adapter
注記
Lambda コンソールで関数をテストするとき、レスポンスは常にバッファリングされた状態で表示されます。
トピック
レスポンスストリーミングの帯域幅制限
関数のレスポンスペイロードの最初の 6 MB の帯域幅には上限がありません。この最初のバースト後、Lambda はレスポンスを最大 2 Mbps のレートでストリーミングします。関数のレスポンスが 6 MB を超えない場合、この帯域幅制限は適用されません。
注記
帯域幅制限は関数のレスポンスペイロードにのみ適用され、関数によるネットワークアクセスには適用されません。
上限のない帯域幅は、関数の処理速度を含む多くの要素によって異なります。通常、関数のレスポンスでは、最初の 6 MB で 2 Mbps を超えるレートが期待できます。関数が AWS 外部の宛先にレスポンスをストリーミングする場合、ストリーミングレートは外部インターネット接続の速度にも依存します。
VPC とレスポンスストリーミングの互換性
VPC 環境で Lambda 関数を使用する場合は、レスポンスストリーミングに関する重要な考慮事項があります。
-
Lambda 関数 URL は、VPC 環境内でのレスポンスストリーミングをサポートしていません。
-
InvokeWithResponseStream
API を使用して AWS SDK を介して Lambda 関数を呼び出すことで、VPC 内のレスポンスストリーミングを使用できます。これを使用するには、Lambda 用の適切な VPC エンドポイントを設定する必要があります。 -
VPC 環境の場合、VPC 内のリソースと Lambda サービス間の通信を可能にするには、Lambda 用のインターフェイス VPC エンドポイントを作成する必要があります。
VPC でのレスポンスストリーミングの一般的なアーキテクチャには、次のようなものがあります。
Client in VPC -> Interface VPC endpoint for Lambda -> Lambda function -> Response streaming back through the same path