サーバレスのサムネイル

サーバレス

Google App Engine(GAE)でプロジェクト内に複数アプリを複数ドメインで運用する

公開日: 2019.7.23

Google Cloud Platformのサーバーレスサービス・GAE(Google App Engine)の「サービス」機能を使って、1プロジェクトで複数アプリを複数ドメインで運用する方法をまとめました。

編集ノート: SERVERSUSでは、パートナーリンクからコミッションを得ています。コミッションが記事の意見や、サービスの評価に影響を与えることはありません。

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側にデプロイされて、サービスが立ち上がります。

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->設定 -> カスタムドメイン 」から、ドメインを登録します。この時、アカウントに対してドメインが認証されている必要があるので、認証していない場合はドメインを認証してから登録します。

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の無料枠で収めるポイントについては、下記の記事をどうぞ。


GAEで複数アプリを複数ドメインが運用する方法を見てきました。

うまく使い分けることで、テストブランチを別ドメインにデプロイしたり、A/Bテストをしたりもできます。

簡単にデプロイして、自動でスケーリングまでしてくれるGAEは、サーバーレスのメリットを簡単に最大限得られるサービスですが、コスパの部分もしっかり考えて運用する必要がありますね。

参考

dispatch.yaml 構成ファイル | Google Cloud

Google App Engine 上でのマイクロサービス アーキテクチャ | Google Cloud

GAEで同じアプリのサブディレクトリで、URLを切り分ける(APIのバージョニングなど)ケースでは、下記の記事をどうぞ。


価格は記載がある場合を除き、すべて税込みです。

関連キーワード

サーバレスの新着記事