【AWS】APIGatewayにキャッシュを設定する際にハマったこと


はじめに

先日APIGatewayにキャッシュを設定しようとしてハマったので記事にしておきます。

キャッシュを無効化させたくない!

エンドポイントへのHTTPリクエストヘッダに[Cache-Control: max-age=0]が含まれていた場合も、APIGatewayの後ろに控えたLambdaを実行させたくない!キャッシュがある場合は必ずキャッシュを受け取ってほしい

APIGateway設定

キャッシュの設定自体はキャッシュ有効化にチェックをつけ、キャパシティーやTTL等を自由に設定しておしまいです。

キャッシュコントロールヘッダについての設定は「キーごとのキャッシュの無効化」にあたります。
画像の設定では「認可されたリクエストで無ければ、HTTPリクエストに[Cache-Control: max-age=0]が含まれていた場合403エラーとして返すよ」という状態。

キャッシュ無効化できる…!?

この状態でターミナルから以下curlコマンドを叩いても、何事も無かったかのように応答が返ってきます。
ついでにCloudWatchでログを見るとキャッシュが効いていないログが確認できます。

curl <APIGatewayエンドポイントURL> -H "Cache-Control: max-age=0"

HTTPリクエストメソッド単位の設定が必要

先ほどキャッシュを設定した画面ですが、実はステージ単位だけではなくHTTPリクエストメソッド単位でも設定できるようになっています。
ここでステージ単位の設定を上書きしてしまっていたことが原因でした。

認可が必要にチェックが入っていないのでキャッシュ無効化し放題です。

解決!

リクエストメソッド単位でもステージ単位と同様にキャッシュの設定を行うことで、[Cache-Control: max-age=0]付きのcurlコマンドを実行すると無事エラーで応答されるようになりました。

以上です。お疲れ様でした