CloudFrontでS3から10mBを超えたデータを圧縮して配信する方法

CloudFrontではCompress Objects AutomaticallyをYesにしても、ファイルサイズが1kB~10mBでないと圧縮して配信してくれません

特殊な場合ですが3DモデルがJSONで記入されておりそのデータが10mBを超えているということがあったためどうにか圧縮する方法がないか試してみました(圧縮しないと転送に時間がかかりすぎる)

方法

  1. まずgzipコマンドなどでファイルを圧縮します。ただしファイル名は.gzは付けません。
  2. S3にアップロードする時のメタデータのContent-Encodingにgzipを設定します。

この方法でどのファイルタイプでもどのサイズでもgzipで圧縮されたファイルをS3から送ることができます。

注意事項

CloudFrontが圧縮してくれる場合には、リクエストのAccept-Encodingのヘッダーの値を見てgzipに圧縮するかどうかを出し分けてくれますが、この方法だと出し分けができないのでgzipに対応していないブラウザだとエラーになってしまいます。