2021/07/24

CloudflareとGCSを組合せて安く静的ファイル配信サーバー(HTTPS)を構築する

gcpcloudflare

概要

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までではありますが、画像ファイルの解像度や圧縮度を調整すればかなりの数の画像ファイルを無料で配信できると思います。)

全体図

以下のような構成になりました。

structure-overview-min.png

作業内容

GCS bucketの作成

まずはここを参照しつつ、ドメイン名と同じGCS bucketを作成します。

  • 今回は、img.kumano-te.com というbucketを作成しました。

※ topドメイン(kumano-te.com)の所有権は事前に証明しておく必要があります。(弊社の場合はgoogle search consoleから設定しました。)

CloudflareでCNAME DNSレコードを作成

  • img.kumano-te.comc.storage.googleapis.com. が値となるCNAMEレコードを作成します。
  • さらに、プロキシステータスを「プロキシ済み」に設定して、cloudflareにプロキシさせます。

CloudflareでSSL/TLSの設定

SSL/TLSモードを「フル」に設定します。

cloudflare ↔︎ GCSの間もHTTPS通信になりますが、Cloudflare側はGCS側が発行する証明書が適当でなかったとしても無視してくれます。(通信が暗号化されていれば十分)

※ 「フレキシブル」を選択しても問題なく動作すると思います。
※ 「フル(厳密)」を選択すると動作しません。

ここまで設定すると、httpsのプロトコル+独自ドメイン名でGCS内のファイルにアクセスすることができるようになりました。

References