2021/07/24
CloudflareとGCSを組合せて安く静的ファイル配信サーバー(HTTPS)を構築する
概要
CloudflareとGoogle Cloud Storageを組合せて安価にHTTPS対応の静的ファイル配信サーバーを構築します。
採用した、構成や構築手順などを紹介します。
本記事の執筆経緯
弊社のエンジニアブログの画像配信サーバーにGoogle Cloud Storageを採用しています。
GCSを利用する前は、GCPの無料枠のf1-micro VM インスタンスのローカルストレージに画像ファイルを格納し、そこからpythonのサーバーを使ってホスティングしていました。
f1-micro VMインスタンスは無料なのですが、コンピューティングリソースが非力(0.2vCPU + 0.60GBのメモリ)なため、レスポンスが非常に遅く、改善したいなと思っていたため、GCSに移行しました。
GCSも 5 GB 月の Regional Storage(米国リージョンのみ)
という内容で無料枠が提供されていましたが、ほとんど本サイトの読者が日本国内メインなため、せっかくなので日本リージョンにおくことにしました。
より安く済ませたい方は、Cloud Storageの無料枠を活用されると良いのではないかと思います。
(5GBまでではありますが、画像ファイルの解像度や圧縮度を調整すればかなりの数の画像ファイルを無料で配信できると思います。)
全体図
以下のような構成になりました。
作業内容
GCS bucketの作成
まずはここを参照しつつ、ドメイン名と同じGCS bucketを作成します。
- 今回は、
img.kumano-te.com
というbucketを作成しました。
※ topドメイン(kumano-te.com
)の所有権は事前に証明しておく必要があります。(弊社の場合はgoogle search consoleから設定しました。)
CloudflareでCNAME DNSレコードを作成
img.kumano-te.com
にc.storage.googleapis.com.
が値となるCNAMEレコードを作成します。- さらに、プロキシステータスを「プロキシ済み」に設定して、cloudflareにプロキシさせます。
CloudflareでSSL/TLSの設定
SSL/TLSモードを「フル」に設定します。
cloudflare ↔︎ GCSの間もHTTPS通信になりますが、Cloudflare側はGCS側が発行する証明書が適当でなかったとしても無視してくれます。(通信が暗号化されていれば十分)
※ 「フレキシブル」を選択しても問題なく動作すると思います。
※ 「フル(厳密)」を選択すると動作しません。
ここまで設定すると、httpsのプロトコル+独自ドメイン名でGCS内のファイルにアクセスすることができるようになりました。
References
関連する記事
[Rust]Google Cloud Storageを利用する
GCSやNFSのファイルを扱えるpackageをRustで実装しました。
CloudflareとGCSを組合せて安く静的ファイル配信サーバー(HTTPS)を構築する
CloudflareとGoogle Gloud Storageを組合せて安くHTTPS対応の画像配信の仕組みを構築しました
shell script(bash)を使って、GCSのファイルを再帰的に処理する
Google Cloud Storageの特定のbucketのファイルを全てコピーして、公開する必要があったので、bashスクリプトを作って対応しました
[Python3]Google Cloud Storage Clientの便利なラッパーを作りました
djangoのstorages.backends.gcloudを参考にしつつ、google-cloud-storageのラッパーを作りました