Google App Engine(GAE)でプロジェクト内に複数アプリを複数ドメインで運用する
公開日: 2019.7.23
Google Cloud Platformのサーバーレスサービス・GAE(Google App Engine)の「サービス」機能を使って、1プロジェクトで複数アプリを複数ドメインで運用する方法をまとめました。
GAEのサービスとは
GAEでアプリをデプロイすると、デフォルトでは1プロジェクトに対して1つのアプリ・ドメインしか適用できないように錯覚します。
しかし、GAEには「サービス」という概念があって、アプリをデプロイする際にサービスを指定することで、複数のアプリを同時に立ち上げることができます。
また、各サービスにドメインを割り当てることもできるので、サービスを使いこなすことで、複数アプリを複数ドメインが運用することができます。
見通し
今回は、
- フロントサーバー(Node.js) -> www.example.com
- バックエンドサーバー(Ruby) -> app.example.com
という構成を想定して、話を進めたいと思います。同一ドメインでの例となっていますが、それぞれ別ドメインで運用することも可能です。
流れとしては、
- アプリ側にサービスを設定する
- サービスとドメインを紐づける
- GCPコンソールからドメインを設定する
- DNSレコードに登録する
という流れになります。
GAEアプリ側にサービスを設定する
各アプリにapp.yamlを用意する
GAEにアプリをデプロイする際には、「app.yaml」を用意しますが、そこにサービスという項目を追加するだけです。
サービス名は好きなものを設定できます。
フロント側のapp.yaml
service: front
runtime: nodejs10
バックエンド側のapp.yaml
service: backend
runtime: ruby
あとは、それぞれのレポジトリディレクトリで、
gcloud app deploy
とすれば、GAE側にデプロイされて、サービスが立ち上がります。
GCPコンソールの「GAE->サービス」にそれぞれのサービスができていれば、正しくデプロイができています。
dispatch.yamlでルーティングルールをオーバーライドする
次に、dispatch.yamlを使ってドメインとサービスを紐づけます。
dispatch:
- url: "*www.example.com/*"
service: front
- url: "*app.example.com/*"
service: backend
ファイルを用意したら、dispatch.yamlをデプロイします。
gcloud app deploy dispatch.yaml
dispatch.yamlは、1プロジェクトで共通なので、一度デプロイすればOKです。
うまく設定できていれば、「GAE->サービス」の一覧に、「送信ルート」という部分にdispatch.yamlで設定したドメインが出てきます。
設定ができたら、GAEアプリ側の設定は完了です。
ドメインの設定
続いて、GAE側でアプリに紐づけるドメインを登録します。
「GAE->設定 -> カスタムドメイン 」から、ドメインを登録します。この時、アカウントに対してドメインが認証されている必要があるので、認証していない場合はドメインを認証してから登録します。
ドメインが登録されると一覧に登録したドメイン名が出てきます。ここのドメイン名と、先ほどのdispatch.yamlが合致していれば、アプリが切り分けて配信されます。
DNSの設定
最後に、DNSでそれぞれのドメインをGAEサーバーに向けます。
CNAME www.example.com ghs.googlehosted.com.
CNAME app.example.com ghs.googlehosted.com.
CNAME @ ghs.googlehosted.com.
設定が完了したら、各ドメインでそれぞれのGAEアプリが見えるはずです。
GAEで複数サービスを運用する際の注意点
サービスの分だけインスタンスが立ち上がる
当たり前ですが、各サービスはそれぞれ別々のアプリなので、アクセスがあったサービスの分だけインスタンスが立ち上がります。今回の例で言えば、フロントとバックエンドを1つのインスタンスで裁くことはできません。
GAEは無料枠で一日あたり28時間インスタンスが無料ですが、2インスタンスが常時立ち上がると仮定すると、単純に48インスタンスが必要なので、無料枠を超えた20時間インスタンス分は課金になります。
GAEは結構割高
GAEのインスタンスは1時間あたり0.065ドルと割高です。
先ほどの例でいうと、毎日20時間インスタンスが無料枠からこぼれると、1時間あたり7円として、毎日140円、一ヶ月で4,200円コストがかかる計算です。
これが安いかはそれぞれの判断かと思いますが、月額4000円というとVPSで言えば「仮想4コア・4GBメモリ」クラスのサーバーがレンタルできる金額なので、コストパフォーマンスは考慮する必要があるかもしれません。
GAEの無料枠で収めるポイントについては、下記の記事をどうぞ。
Google App Engine(GAE)を無料枠で収めるための勘所
Google App Engine(GAE)で1日6000アクセスほどあるAPIサーバーを1ヶ月運用して学んだ、無料枠である1日28インスタンス時間に収めるためのポイントをまとめました。
GAEで複数アプリを複数ドメインが運用する方法を見てきました。
うまく使い分けることで、テストブランチを別ドメインにデプロイしたり、A/Bテストをしたりもできます。
簡単にデプロイして、自動でスケーリングまでしてくれるGAEは、サーバーレスのメリットを簡単に最大限得られるサービスですが、コスパの部分もしっかり考えて運用する必要がありますね。
参考
dispatch.yaml 構成ファイル | Google Cloud
Google App Engine 上でのマイクロサービス アーキテクチャ | Google Cloud
GAEで同じアプリのサブディレクトリで、URLを切り分ける(APIのバージョニングなど)ケースでは、下記の記事をどうぞ。
GAEで公開したAPIのURLをサブディレクトリでバージョン分けする
アプリなどのAPIをGoogle App Engine(GAE)で公開する際に、将来的にバージョン分けしておいたほうが安心です。GAEなら設定ファイルを書くだけで簡単にバージョン分けができます。
価格は記載がある場合を除き、すべて税込みです。
関連キーワード
サーバレスの新着記事
- サーバレスCloudflare R2の料金体系・無料枠まとめ 2024.8.21
- サーバレスCloudflare R2をCyberduckで使う方法 2024.7.31
- サーバレスAIの学習ボット・クローラーからサイトを守るメリットとブロックする方法 2024.7.19
- サーバレスCloudFlare Pagesのビルド環境の違い 2024.5.9
- サーバレスCloudflare D1の料金体系・無料枠まとめ 2024.3.25
- サーバレスCloudflare PagesでNuxt3のビルド時に「ENOENT: no such file or directory」エラーの対象方法 2024.3.21
- サーバレスGitlab CLIでpush時に「glab auth not found」となった際の対処方法 2024.3.19
- サーバレスCloudFlare Workers AIの料金体系・無料枠まとめ 2024.2.2