2017-06-29 15 views
0

更新:私はそれを理解しました。AWS API Gateway GETレスポンスは常にキャッシュされます

さまざまなリソースとさまざまなGETメソッドとPOSTメソッドで定義されたAWS API Gateway apiがあります。

すべてがうまく動作します。 POSTが実行されています。 GETは、返された値がでキャッシュされた値であることを除いて、レスポンス(JSONペイロード)を返します。

私のGET APIは、RDSにクエリを呼び出すラムダ関数を呼び出します。 私はので、私の応答が陳腐であることを確認することができます:私は手動でRDSを照会するとき、私はクラウドウォッチログが有効になっており、ラムダ関数は(私は私が持っていると信じて呼び出されません持って更新された値

  • を取得

    • 私はラムダを呼び出すテストするとき、私は)クラウドウォッチログを取得することができます

    それは一度リフレッシュしなかったので、それが正しく設定されて、私は、私は1時間)、キャッシングしきい値または何かのように(一部を越えているためそれがだったと思います。

    私は、API Gatewayが舞台裏でCloudFrontを生成することを理解します。 そして、私はこれがキャッシングをしていると感じています。しかしそれはちょうど推測であり、私には証拠がありません。たぶん何らかの種類のデフォルトのキャッシュTTL?

    明らかに、私のAPIゲートウェイステージでキャッシングがオフになっています。 私はTTLを1に設定し、キャッシュをフラッシュし、再びキャッシュを無効にすることを試みました。 そのテストの各段階でも失効した値が返されました。

    それが関連している場合、私は知らないが、追加的な詳細:

    • 私はCORSを有効にしている(「*」)
    • 私はCognitoの承認者が
    • 私は経由してJWTトークンを渡す有効になっています(これはすべて正常に動作しています)

    キャッシュされていない値を要求するために渡す予定のヘッダーがありますか? 私はCloudFrontに行きましたが、ここには設定がありません。

    APIゲートウェイのキャッシュに関するその他の投稿は、キャッシュが機能していないか、キャッシュキーの特定性について質問しているようです。 値が何であっても常にキャッシュされていることは何も見ていません。だから私は何かが明らかに欠けているように感じる...

    何か助けやデバッグのヒントが大いにありがとう!

  • 答えて

    1

    私は自分自身の質問に答えるためにばかげていると感じますが、うまくいけば誰かを助けてくれます。

    これはAPIゲートウェイのキャッシュに関する問題ではありませんでした。 問題はpymysql接続&ラムダセッションのキャッシュ問題でした。

    私のLambdaは、pymysqlを使用してMySQL RDSを照会していました。 推奨されるパフォーマンス上の理由により、私はラムダ間の接続を再利用しました(毎回接続を終了しなかったことを意味します)。私は私はfetchAllをした後

    溶液( conn.commit()

    を呼び出すことだった)

    起こっていた私の後続の呼び出しは、キャッシュされたクエリの結果を返したということでした(読取り一貫性と呼ばれる。ありがとう! @Michael - sqlbot)私はおそらく1つ以上のラムダコンテナや何かを持っていたと思うので、私はしばらくの間非アクティブ(つまり、スタックオーバーフローの記事を読んで読んでいる)、ラムダはアンロードします。次に、私の次のAPIゲートウェイの試みは新鮮なラムダハンドラを再初期化し、新しい接続が(キャッシュなしで)作成されるでしょう。だから、これが「時には働く、止める」ように見える理由です。

    私は誰の時間を無駄にした場合に謝罪します。

    +1

    * "キャッシュされたクエリ結果が返されました" *より正確には、一貫性のある読み込み**を返しているようです。 –

    関連する問題