GAミント至上主義

Web Monomaniacal Developer@ビズオーシャン

GCPを使ったPWAのサーバー構成を考える

Vue.jsとwebpackといくつかの独自サーバー処理が必要なアプリをどうGCPでデプロイするかを考えた。

静的ファイルとWEB API的な部分で分けて考える。

1、静的ファイル配信

Webpackでビルドしたjs、HTMLとかjs、CSS、画像とかメインになるファイルたち。

選択肢は3つ考えた。

Cloud Storage

AWSでいうS3。静的ファイルには一番安そう。
でも独自ドメインSSL化は単体では無理。
手前にHTTPSロードバランサーを入れるとそれだけで2,000円/月程度かかってしまう。

静的ウェブサイトのホスティング  |  Cloud Storage ドキュメント  |  Google Cloud

Nginx + HTTPSロードバランサー

やるとしたらGoogle Container Engine(GKE)でやる。Nginxで証明書もってもいいけど、GKEで外部IPを取るとTCPロードバランサーが使われ、HTTPSと値段は一緒なのでSSL処理を外に出せるHTTPSの方を使った方がお得感がある。

Nginxは鉄板だけど、変更の度にDockerイメージのデプロイがいるのは面倒な気がする。

Firebase Hosting

いまのところ最強くさい。

Hosting を使ってみる  |  Firebase

CLIでのデプロイとロールバック、管理画面でもいろいろできる。

さらにドメインのAレコードを向けるだけでSSL証明書もやってくれるもよう。

気になる料金は会社のアカウントでは有料プラン(Flame、月25ドル)になってしまっているので、容量10 GB、転送量50GB/monthまで使えて十分すぎる。

Firebase

さらにCloud Functions(以下CF)も組み合わせて使うことができ、同一ドメインの特定のパスをCFに渡せる。
今回は難しいけどサーバーサイドを全てCFのNode.jsで済ませることができればいわゆるサーバーレスが実現できそう。
レスポンス速度が気になるので今度試してみる。

2、WEB API

今回は、ヘッドレスChromeを利用したHTML→PDF変換サーバーがあるため、Dockerが必要。
またその前処理、画像のリサイズをPythonDjangoで作っており、これもDockerで動かしたいのでGKE一択となりそう。

他の選択肢も一応まとめる。

DjangoだけならスタンダードのApp Engineという手もあるが、いまさらPython2で書きたくない。

App Engine 環境の選択  |  App Engine Documentation  |  Google Cloud

フレキシブルのApp EngineでDockerを使う手もあるが、DjangoとPDF変換サーバーで最低2台必要で、PDF変換サーバーはグローバルに出したくないので、やっぱGKEが良さそう。
あとGKEに慣れてしまったので自由度の低いフレキシブルを使うには抵抗がある。

アクセスに大きな波があり、必要なスケール幅が読めないとかならApp Engine系の方がサーバー管理は楽そうだが今回は新規でそこまで波があるサービスではないのでGKEでなんとかできそう。

あと上記に出たCloud Functions。
今回はPDF変換サーバーは無理としてもDjango部分は何とかできるかもしれないが、どうせGKEを使うことになるのでまとめた方が良さそう。

まとめ

ということで、
静的ファイルはFirebase Hosting
APIや各種サーバーはGKEで構築するのが今回は良さそう。

Cloud FunctionでできることならHostingとの連携もできるので今後はどんどん使って行ったほうが良いと思う。