

# Lambda 関数のレスポンスストリーミング
<a name="configuration-response-streaming"></a>

[Lambda 関数 URL](urls-configuration.md) 経由か、[InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html) API (AWS SDK または直接的な API コール経由) を使用することで、Lambda 関数はレスポンスペイロードをクライアントにストリーミングし、ネイティブに返すことができます。Lambda 関数は、[InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html) API を使用して関数を呼び出す [Amazon API Gateway プロキシ統合](https://docs.aws.amazon.com/apigateway/latest/developerguide/response-transfer-mode-lambda.html)を介してレスポンスペイロードをストリーミングすることもできます。レスポンスストリーミングは、最初のバイトまでの時間 (TTFB) のパフォーマンスを向上させることで、レイテンシーの影響を受けやすいアプリケーションに役立ちます。これは、レスポンスの一部が利用可能になったときにクライアントに返送できるためです。さらに、レスポンスストリーミング関数は、バッファされたレスポンスに対する最大 6 MB と比較して、最大 200 MB のペイロードを返すことができます。レスポンスをストリーミングするということは、関数がレスポンス全体をメモリに収める必要がないことも意味します。レスポンスサイズが非常に大きい場合は、関数に設定する必要のあるメモリ量を減らすことができます。

**注記**  
Lambda レスポンスストリーミングは、すべての AWS リージョン ではまだ利用できません。リージョン別の利用可能な機能については、ビルダーセンターの「[リージョン別の AWS 機能](https://builder.aws.com/build/capabilities)」を参照してください。

Lambda が応答をストリーミングする速度は、レスポンスのサイズに応じて異なります。関数のレスポンスでは、最初の 6 MB に対するストリーミングレートに上限が課されません。レスポンスが 6 MB を超える場合、残りのレスポンスには帯域幅上限が適用されます。ストリーミング帯域幅の詳細については、[レスポンスストリーミングの帯域幅制限](#config-rs-bandwidth-cap) を参照してください。

ストリーミングレスポンスにはコストが発生し、呼び出しているクライアントの接続が切断された際、ストリーミングレスポンスは中断または停止されることはありません。お客様は関数の全機能を利用した期間に対して課金されるため、関数のタイムアウトを長く設定する場合はご注意ください。

Lambda は Node.js マネージドランタイムでのレスポンスストリーミングをサポートしています。Python を含むその他の言語の場合、[カスタムランタイム API 統合を備えたカスタムランタイムを使用](runtimes-custom.md#runtimes-custom-response-streaming)してレスポンスをストリーミングするか、[Lambda Web Adapter](https://github.com/awslabs/aws-lambda-web-adapter) を使用できます。

**注記**  
Lambda コンソールで関数をテストするとき、レスポンスは常にバッファリングされた状態で表示されます。

**Topics**
+ [レスポンスストリーミングの帯域幅制限](#config-rs-bandwidth-cap)
+ [VPC とレスポンスストリーミングの互換性](#config-rs-vpc-compatibility)
+ [レスポンスストリーミング対応 Lambda 関数の記述](config-rs-write-functions.md)
+ [Lambda 関数 URL を使用してレスポンスストリーミング対応関数を呼び出す](config-rs-invoke-furls.md)
+ [チュートリアル: 関数 URL を使用してレスポンスストリーミング Lambda 関数を作成する](response-streaming-tutorial.md)

## レスポンスストリーミングの帯域幅制限
<a name="config-rs-bandwidth-cap"></a>

関数のレスポンスペイロードにおける最初の 6 MB には帯域幅上限がありません。この最初のバースト後、Lambda はレスポンスを最大 2 MBps のレートでストリーミングします。関数のレスポンスが 6 MB を超えないならば、この帯域幅制限が適用されることもありません。

**注記**  
帯域幅制限は関数のレスポンスペイロードにのみ適用され、関数によるネットワークアクセスには適用されません。

上限のない帯域幅は、関数の処理速度を含む多くの要素によって異なります。通常、関数のレスポンスにおける最初の 6 MB には 2 MBps より高いレートを期待できます。関数が AWS 外部の宛先にレスポンスをストリーミングする場合、ストリーミングレートは外部インターネット接続の速度にも依存します。

## VPC とレスポンスストリーミングの互換性
<a name="config-rs-vpc-compatibility"></a>

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
```