GCP の GAE (Google App Engine) では、1つのプロジェクトの中に複数サービスを立ち上げることができます。
ここで書いている「サービス」とは、app.yml
で定義し、デプロイした1つ1つのアプリの単位をいっています。
以前以下の記事で書いたアプリの単位ですね。
何をやりたいのか
dispatch.yaml
で定義を行うことでルーティングのオーバーライドができますので、指定された URL に対するサービスをマッピング(特定)することができます。それにより、以下のことができるようになります。
- サービス毎に異なる言語を使いたい場合、言語/機能毎にサービスをわけることができます。
- こっちのサービスは python で、こっちは Go で、みたいな。
- カスタムドメインで1つのプロジェクトに追加できるのは1ドメインだけですが、複数のサービスを利用したいケースもあります。その場合、ホスト単位で分け(サブドメイン)たりしますが、このケースにも利用できます。
ここでは、タイトルの補足にありますように、後者にあたる「1プロジェクトで複数サブドメインを利用する」を行ってみます。以下のような構成を実現します。
www.example.com
は、default サービスa.example.com
は、a サービスb.example.com
は、b サービス
前提と作業概要
まず、前提としてまして、
- GAE をカスタムドメインで利用しています
- すでにカスタムドメインの設定は行っており、サービス(
app.yml
のアプリ)も1つ deploy しています
となっています。ちょうど以下の記事の作業を終えている状態となります。
ここでは、これに対して、以下の作業を行うことで「1プロジェクトで複数サブドメインを利用する」を実現します。
- 新たに追加するサービス用のサブドメインを追加する
- 新たなサービスを追加する
dispatch.yaml
でサブドメインとサービスのマッピングを行う
1. 新たに追加するサービス用のサブドメインを追加する
GAE の[設定] -> [カスタムドメイン] -> [カスタムドメインを追加] と辿ります。
以下にありますようにここでの作業は3ステップです。1. 使用するドメインを選択する、2. 新たなドメインを現在のプロジェクトに指定する、3. DNS レコードを更新してセキュリティを有効化する。
使用するドメインを選択して(「1. 使用するドメインを選択する」ここでは webapps-in.tokyo
)、新たなサブドメインを追加します(「2. 新たなドメインを現在のプロジェクトに指定する」)。ここでは、sample-firestore.webapps-in.tokyo
を追加しています。
最後の「3. DNS レコードを更新してセキュリティを有効化する」ですが、ここでの作業ではありません。以下に表示されている DNS レコードを自身で管理している DNS に反映しておきます。以下には全ての情報がでていますが、今回は追加ですので、最後のCNAME
の部分だけが、新たに追加する必要のある情報です。
DNS 側の設定に関しましてはここでは詳細は割愛します。以下の記事に記載していますので、そちらを確認ください。
サブドメインの追加は以上です。
2. 新たなサービスを追加する
新たなサービスをデプロイします。
先程サブドメインの追加でsample-firestore.webapps-in.tokyo
を追加しました。このサブドメインに割り当てるサービスの登録を追加することになります。
簡単な GAE アプリを用意して、app.yaml
を以下のように記述します。
runtime: go111 env_variables: PROJECT_ID: any_project_id VERSION: v1 service: sample-firestore
ポイントは、service
の指定ですね。ここにサービス名を明示的に指定しています。指定しない場合は、default
が指定されているものと見なされます。
GAE アプリの記載はここでは割愛します。以下の記事などを参照ください。
deploy します。
$ gcloud app deploy
3. dispatch.yaml
でサブドメインとサービスのマッピングを行う
最後に追加したサブドメインと GAE アプリケーションのサービスを紐つけます。
現状サービスは2つあります。default
サービスと sample-firestore
サービスです。
適当な場所にdispatch.yaml
を用意して、サブドメインとサービスのマッピングを以下のように記述します。
dispatch: - url: "webapps-in.tokyo/*" service: default - url: "www.webapps-in.tokyo/*" service: default - url: "sample-firestore.webapps-in.tokyo/*" service: sample-firestore
上記では、url
とservice
の指定を1セットで3セット記載しています。
webapps-in.tokyo
というドメインに対して、www
と www
無し、sample-firestore
の3つのホスト(サブドメイン)が用意されており、これは既にDNSで名前解決できる状態になっています。
それぞれのホスト(サブドメイン)に対して、GAE アプリケーションのサービスを指定しています。これは、app.yaml
で指定を行ったサービス名になり、指定を行っていない場合には default
が暗黙的に指定されたものと見なされています。
上記の指定により、www.webapps-in.tokyo
と webapps-in.tokyo
にアクセスした場合には、default
のサービス (GAE アプリケーション) が呼び出され、sample-firestore.webapps-in.tokyo
にアクアセスした婆いには、sample-firestore
のサービス (GAE アプリケーション) が呼び出されます。
dispatch.yaml
をデプロイします。アプリのデプロイとコマンドが異なります。
$ gcloud app deploy dispatch.yaml
完了しますと、以下のようにサービスメニューにて「サービス」と「送信ルート」が設定されているのを確認することができます。
以上で、「1プロジェクトで複数サブドメインを利用する」を実現できました。
GAE の場合、サブドメインを追加する際に http だけでなく、https プロトコルでの口も用意してくれ、証明書も自動でそれぞれのホスト毎に作成してくれていますので、とても手軽に Web アプリの配置を行うことができるようになっています。