CNAMEレコードとTXTレコードは共存できないので、ALIAS レコードを使う

# はじめに

DNS の CNAME レコードは、他のレコードと同じ値を使った共存が出来ません。RFC で定義されている、DNS の中のルールになっています。 

https://www.ietf.org/rfc/rfc1912.txt

> A CNAME record is not allowed to coexist with any other data.



TXT レコードやAレコードなど、種類問わずすべてのレコードと共存することが出来ません。

ELB を使って Web サービスをインターネットに公開する際に、CNAME レコードを使って公開する方法がありますが、上記の制限が問題になる場合があります。具体例を挙げましょう

- `orenoservice.co.jp` という名前でとあるWebサービスを公開している
- この名前は CNAME レコードとして、ELB を指している
- なんらかの事情で、`orenoservice.co.jp` の値を使って TXT レコードを作りたい (Google Search Console などのサービスを利用する際に、TXT レコードを使ったドメインの所有状況を証明する場合がある)
- しかし、`orenoservice.co.jp` は CNAMEレコードなので、TXT レコードを作成できないため、利用したいサービスが使えない



こういった問題を解決するために、Route 53 では Alias レコードという機能を提供しています。Alias レコードとは、AWS 上のリソースをルーティングするための Route 53 の拡張機能となっており、これを使うことで、Alias レコードと TXT レコードが共存できます。CNAME を使った制限を回避する点を初め、さまざまなメリットがあります。詳細は次の Document に記載されています。

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html



念のため動作確認を行ったので、備忘録として残しておきます。



# CNAME と他レコードは共存できない

まず、RFC で定義されている通り、CNAME と他レコードが共存できないことを確認していきましょう。

Route 53 上で、CNAME レコードを Create します。

![image-20220114232854905.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/14c38969-34d6-83e0-6be9-4a5c35f584da.png)



`thisistest.sugiaws.tokyo` という CNAME レコードを作成します。

![image-20220114232325542.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b829796c-de5f-f156-7a58-a370a0c0f10f.png)



CNAME が作成されました。

![image-20220114232402816.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/92720558-0729-1382-724f-73fcc0f1c0e2.png)



この状態で、同じく `thisistest.sugiaws.tokyo` という TXT レコードを Create を試みてみます。 

![image-20220114232546229.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/2e5f916c-6f06-947c-9984-288a249be0c0.png)



Error になりました。CNAME と同じ値を指定しているので、エラーになっています。

![image-20220114232603372.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/0c3f9b9c-3715-197d-b8db-3ac9cc38cae0.png)



# ALIAS レコードでやる

では次に、ALIAS レコードでやってみましょう。Create を押して作成を進めます。

![image-20220114232930741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b8f899d9-6f75-8613-34cc-6b6664a33934.png)



右上の Alias を ON にするのがポイントです。

![image-20220114233108087.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/44a947c6-a513-d56d-18e3-1f4c30a58b5f.png)



Alias Record が作成されています。

![image-20220114233233443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/aaeb0648-3c26-6607-f8d1-887f397ea471.png)



この状態で TXT レコードを Create してみます。

![image-20220114233321673.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5149b16c-ae5a-9a82-6ebe-fceb27efedf4.png)



はい、CNAME レコード違い、ALIAS レコードでは、TXT レコードと共存できていますね。

![image-20220114233404683.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a247bde8-feca-f6c3-9318-40c8c4ba82df.png)



もちろん、ALIAS レコードを使って、実際にブラウザからアクセス可能です。

![image-20220114233440408.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e9191319-212d-6d0c-4c74-5027a61b89cf.png)



# この検証を通じてわかったこと

- ALIAS レコードを使えば、他レコードと共存できる
- 既存の DNS サービスからの移行の手間はあるかもしれないが、移行を検討するのが良い