Google Cloud CDN を使ってみた

こんにちは。@jedipunkz です。

今回は Google Cloud Platform の Google CloudCDN について調べてみたので記したいと思います。

CloudCDN は GCP のロードバランサのバックエンドサービスに紐付けられるサービスです。このバックエンドサービスで CloudCDN を有効にしていると CDN サービスを機能させることが出来ます。先に書いておくとこの CloudCDN はとてもシンプルで扱いやすいサービスだと判りました。高機能な他の CDN サービスと比べると機能が足らない感ありますが、必要最低限なところを抑えているのと、価格がとても安いです。(価格は下記の URL 参照)

価格表 : https://cloud.google.com/cdn/pricing

構成

構成と構成の特徴です。

+----------+                                    +---------+
| instance |--+                               +-| EndUser |
+----------+  |  +------------+  +----------+ | +---------+
              +--|LoadBalancer|--| CloudCDN |-+-| EndUser |
+----------+  |  +------------+  +----------+ | +---------+
| instance |--+                               +-| EndUser |
+----------+                                    +---------+
  • コンテンツが初めてリクエストされた場合キャッシュミスする
  • キャッシュミスした際に近くにあるキャッシュからコンテンツを取得しようと試みる
  • 近くのキャッシュがコンテンツがある場合、最初のキャッシュにコンテンツが送信される
  • 近くのキャッシュにコンテンツがない場合、HTTP ロードバランサにリクエストが転送される
  • その後のリクエストはキャッシュが応答する(キャッシュヒット)
  • キャッシュ間のフィルは EndUser のリクエストに応じて実行される
  • キャッシュを事前に読み込むことできない
  • キャッシュは世界各地に配置されている

CloudCDN を導入する方法

導入する方法は簡単で下記のとおりです。

  • 新規 LB を WebUI で作成
  • バックエンドサービスを作成
  • 右パネルの下にある [Cloud CDN を有効にする] チェックボックスをオンに
  • 作成ボタンを押下

HTTPD サーバ側 (今回は Apache を使います) でキャッシュに関する設定を行います。 下記は例です。3600秒、キャッシュさせる設定になります。

Header set Cache-control "public, max-age=3600"

キャッシュされる条件は RFC7324 に規定されているとおりです。

特定のキャッシュを削除する方法

Google Cloud SDK https://cloud.google.com/sdk/ を使うと CLI でコンテンツを指定してキャッシュのクリアが出来ます。また WebUI でもクリアは可能です。

$ gcloud compute url-maps invalidate-cdn-cache <url-map の名前> --path "コンテンツのパス"

このときに –path で指定できるコンテンツの記し方は下記のように指定することも可能です。

--path "/cat.png # <--- 1つのコンテンツキャッシュを削除
--path "/*"      # <--- 全てのコンテンツキャッシュを削除
--path "/pix/*"  # <--- ディレクトリ指定で削除

まとめ

価格が低価格で必要最低限な機能に絞られている印象です。シンプルな分、理解し易いですしキャッシュクリアについても Hubot 化などすれば開発者の方に実行してもらいやすいのではないでしょうか。