CloudFront Functions で uri を書き換えてもオリジンへのリクエスト先が変わらないのはなぜですか
困っていた内容
CloudFront Functions のビューワーリクエストイベントで uri を書き換えて、別のパスへリクエストを転送しようとしています。
関数のテスト実行では期待通りに uri が書き換わることを確認できましたが、実際のアクセスでは 404 エラーが発生してしまいます。
なぜ期待通りに動作しないのでしょうか。
どう対応すればいいの?
CloudFront Functions のビューワーリクエストイベントで uri を変更しても、キャッシュビヘイビアやオリジンリクエストの送信先は変更されません。
関数で uri 値を変更する場合、以下が適用されます。
- 新しい uri 値は、フォワードスラッシュ (/) で始まる必要があります。
- 関数で uri 値を変更すると、ビューワーがリクエストしているオブジェクトが変更されます。
- 関数で uri 値を変更しても、リクエストのキャッシュ動作やオリジンリクエストの送信先は変わりません。
CloudFront がリクエストを処理する順序は以下のとおりとなります。
- リクエスト受信(例:/path-a/page)
- パスパターンに基づいてキャッシュビヘイビアを決定(この時点でオリジンも確定)
- ビューワーリクエストの CloudFront Functions が実行され、uri を書き換え(例:/path-b/index.html)
- 書き換え後の uri で、手順 2 で確定した元のビヘイビアに紐づいたオリジンへリクエスト送信
つまり、CloudFront Functions で uri を /path-a/page から /path-b/index.html に書き換えても、リクエストは /path-a/* のビヘイビアに紐づいたオリジンへ送信されます。
異なるビヘイビアのオリジンへ切り替わることはありません。
なお、CloudFront Functions のテスト実行は CloudFront の処理フロー全体をシミュレートするものではないため、テスト実行では正常に動作しても実際のリクエストでは期待通りに動作しないことがあるためご注意ください。
参考情報






