私は最初、あなたが経験している問題の性質を誤解していたと思います。
だから今の問題は、CloudFrontのは、あなたが明示的があなたのAPIゲートウェイエンドポイントの前でCloudFrontのを設定していたことを、あなたはCloudFrontを言及するので、私は、仮定30秒
後に要求をタイムアウトということです。
APIゲートウェイ暗黙のうちには「AWSエッジネットワーク」(a.k.a. CloudFront)からのサービスを使用してサービスの一部を提供しているため、そうでなかったことは間違いありません。
API Gatewayの「隠された」CloudFrontディストリビューションは、標準のCloudFrontディストリビューションとは異なる動作をしていましたが、明らかにそれはここでは関係がないようです。
実際、API Gateway also has a 30 second response timeoutとCan Be Increased?
はNo
です。したがって、 "CloudFront"タイムアウトは、API Gatewayによって課されたタイムアウトと本質的に同じタイムアウトです。
これはもちろん、ラムダ関数のタイムアウトよりも優先されます。
単純で明白な回避策はありません。これは、APIゲートウェイの設計の範囲外の課題のようです。
私が個人的にAPIを強制するときに個人的に嫌う傾向があるオプションの1つは、ページネーションが必要です。私は本当にそれが嫌い...ちょうど私にデータを与え、私はそれを処理することができます...しかし、その実用的なアプリケーションがあります。リクエストが1000000行の場合は、行1から1000を返し、行1001から2000をフェッチするnext_url
を返します。
もう1つのオプションは、非同期呼び出しを使用して2番目のラムダ関数にリクエストを送信し、データを取得できる新しいURLにユーザーを送信するリダイレクトを返します。さて、この解決法は本当に恐ろしいと思うので、私と一緒に固執しますが、理論的に実行可能です。非同期関数はバックグラウンドで作業を行い、S3で応答を保存します。データがフェッチされるURLは、データが格納されるS3バケット内のキーをポーリングする3番目のラムダ関数です(たとえば、20秒間に1秒に1回)。ファイルが表示された場合は、その場所のURLにあらかじめ署名し、ブラウザに最後のリダイレクトを発行します。署名されたURLはLocation
です。ファイルが表示されない場合は、ブラウザを再び自分自身にリダイレクトして、ファイルが表示されるかブラウザがリダイレクトループを疲れてしまうまでポーリングを続行します。
スケッチ?はい。実行可能?多分。良いアイデア?それは議論の余地がありますが、実際にはAPI Gatewayの基本的な設計パラメータの外にあるものを行うように見えるので、かなり複雑な回避策が必要です。API Gateway以外で実装する必要があります。
EC2上で動作する独自の「APIゲートウェイ」を作成し、Lamdba APIを介して直接Lambda関数を呼び出し、結果を呼び出し元に返すことができます.Lambdaはまだ作業とスケーリングを処理しますが、 30秒のタイムアウト。 Web応答を待つ時間は30秒です。
「CloudFrontを通じてリクエストを送信しない」以外に、簡単な修正はありません。 CloudFrontの30秒のタイムアウトは変更できません。どのような解決策を念頭に置いていますか。 –
はい私は、タイムアウトの設定を変更することはできず、これらの要求はデータベース用のデータを生成することをドキュメントで確認しました。ユーザーは必要なデータの行数を渡し、ラムダで生成します。だからそれは完全にユーザーに依存し、彼は1行または1M行を渡すことができます。 –