Route53のサブドメインをGAEで使用する

# 概要

AWS Route 53で管理しているドメインに、GCPのGAEで動かすためのサブドメインを追加する方法について説明しています。
具体的には、Route53で管理されているドメイン(example.com)にサブドメイン(sub.example.com)を追加します。また開発環境用にサードレベルドメイン(dev.sub.example.com)も追加します。

# 事前準備・前提条件

- AWS、GCPでそれぞれ必要な権限を持ったアカウントがある
- AWS Route 53で既にドメインを管理している
- GCPのプロジェクトを作成済み
- GAEにサービスをデプロイ済

# 手順

## Cloud DNSでゾーン作成

追加するサブドメインのゾーンを作成します。
DNS名に追加したいサブドメイン名を入力してください。

| 項目 | 値 | 補足 |
| --- | --- | --- |
| ゾーンのタイプ | 公開 |  |
| ゾーン名 | example | 分かりやすい任意の名前 |
| DNS名 | sub.example.com | 作成したいサブドメイン |
| DNSSEC | オフ |  |
| 説明 |  |  |
| Cloud Logging | オフ |  |

![cloudDNS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/4f9a049f-d390-fdda-c65f-f14364c0341c.png)
作成するとSOAとNSが追加されます。

![cloudDNS2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/7e23c3c5-e6fb-72f4-b838-dcbd6768a0d7.png)

NSレコードの値をメモしておいてください。

![cloudDNS3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/1b2b8bd3-340a-c7ad-61ff-b63f8b939984.png)


## AWS Route 53でドメイン作成

既存のexample.comにNSレコードを追加していきます。
![AWSroute53-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/53dc3a55-c33e-706b-fcc4-9077c9e6f17c.png)

既存のドメインのホストゾーンを選択して、レコードを作成を選択します。
レコード名にサブドメインを入力、レコードタイプでNSを選択、値に先程メモしたNSレコードを貼り付けます。

![AWSroute53-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/53ded300-b238-bfb7-5b39-959458ebf799.png)


## GAEにカスタムドメインを追加

GAEの画面から「設定」→「カスタムドメイン」を開いて「カスタムドメインを追加」を選択します。

![GAE1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/40c967b7-ec1f-c782-09b0-7d16400c236e.png)

使用するドメインを選択します。
新しく追加する場合は所有権の証明が必要になります。

![GAE2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/9510a0ef-087b-0d14-ae72-2a06cfb820e5.png)


確認を押すと別画面で所有権の確認が出てきます。

URLプレフィックスでの認証は出来ないと思うのでTXTレコードで認証していきます。

![GAE3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/4326bec4-7b09-8fde-3f96-1248fead3609.png)

レコードタイプでTXTを選択して、③のTXTレコードをコピーします。

CloudDNSへ移動してゾーンを選択しTXTレコードを作成します。

TXTデータ1に先程コピーしたレコードを貼り付けてください。

![GAE4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/dccc13d3-4838-54bd-d546-247abbba0980.png)


先程の所有権画面に戻り確認ボタンを押します。

![GAE3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/4326bec4-7b09-8fde-3f96-1248fead3609.png)

確認が出来たらGAEの「新しいカスタムドメインの追加」画面で追加したドメインが選択出来るようになります。

![GAE5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/c6c516d8-3366-1b51-a2cb-8c08548e8ce5.png)

手順に従って選択していき、③で表示されたレコードをCloud DNSへ追加します。

ある程度待つとSSL証明書も付与されます。

これで追加したサブドメインにアクセス出来るようになっているはずです。

# サードレベルドメインの追加

ここからは必要な方だけ参考にしてもらえたらと思います。

開発環境用にdev.sub.example.comなどのサードレベルドメインを追加していきます。

事前に開発用に別サービスを追加しておいてください。

![GAE8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/e512bcd9-d7f0-9a71-01ce-b31c430ebb5c.png)

GAEの「新しいカスタムドメインの追加」画面で既存のサブドメインを選択します。
既に所有権の確認は完了しているので、②の項目で追加したいサードレベルドメインを入力します。

![GAE6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/d808df4b-1bc1-89f2-c2bb-d1885542bca1.png)


Cloud DNSの画面に移動します。
既にAレコードAAAAレコードは追加されているのでCNAMEレコードのみ追加します。

![GAE7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/36179047-3503-2eb4-56bb-777fe5efde56.png)


### **dispatch.yamlでルーティングルールをオーバーライドする**

下記のようなdispatch.yamlファイルを作成してgcloudコマンドでデプロイします。

```jsx
dispatch:
  - url: '*dev.example.com/*'
    service: develop
  - url: '*example.com/*'
    service: default
```

```bash
gcloud app deploy dispatch.yaml
```

サービス画面で送信ルートに追加されているのが確認できます。

![GAE9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169464/75b78c71-6ab4-2589-75c4-ec6a897fbb64.png)

これで追加したドメインが見えるようになっているはずです。