CloudFrontではCompress Objects AutomaticallyをYesにしても、ファイルサイズが1kB~10mBでないと圧縮して配信してくれません。
特殊な場合ですが3DモデルがJSONで記入されておりそのデータが10mBを超えているということがあったためどうにか圧縮する方法がないか試してみました(圧縮しないと転送に時間がかかりすぎる)
方法
- まずgzipコマンドなどでファイルを圧縮します。ただしファイル名は.gzは付けません。
- S3にアップロードする時のメタデータのContent-Encodingにgzipを設定します。
この方法でどのファイルタイプでもどのサイズでもgzipで圧縮されたファイルをS3から送ることができます。
注意事項
CloudFrontが圧縮してくれる場合には、リクエストのAccept-Encodingのヘッダーの値を見てgzipに圧縮するかどうかを出し分けてくれますが、この方法だと出し分けができないのでgzipに対応していないブラウザだとエラーになってしまいます。