AmplifyのHostingでカスタムドメインを設定しようとしたら苦労した話

AmplifyのHostingでカスタムドメインを設定しようとしたらハマりました。

## 2025年5月7日 追記
新しい状況でハマってしまいました。AWSのRoute53で取得したドメインを設定しようとしたところ、うまく設定出来ませんでした。

結論としてはドメインが停止されていましたが、エラーメッセージからはわからなかったので備忘録として記録しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/67e312b2-a7a2-4211-a537-d576cbe7d158.png)

![Screenshot 2025-05-07 at 14.59.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/de446892-f5e3-4c8a-afd8-c03db9e42ff5.png)

```
SSL 設定が失敗しました
[AmplifyWaitTimeout] The domain association has failed because we did not find the CNAME verification record on the DNS entries of your domain. Please check our troubleshooting guide for help: https://docs.aws.amazon.com/amplify/latest/userguide/custom-domain-troubleshoot-guide.html
```

Route53のホストゾーンを見ても正しく設定されています。

![Screenshot 2025-05-07 at 15.01.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/50ab02aa-ef97-4b2d-84cb-4de0349fe289.png)

ここらへんでなんでだろうとハマっていましたが、nslookoupすると失敗していました。

![Screenshot 2025-05-07 at 15.02.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/6cbd7f2c-4bc3-4f02-a47a-743ccfae2a8f.png)

で、Route53のドメイン側を見ると検証がｄ


![Screenshot 2025-05-07 at 15.03.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/1aa570af-9661-4c64-bb86-3b9d0e197df9.png)



## 2024年12月5日追記
その後も何度かAmplifyでHostingさせていて、段々とコツを掴んできました。
手順に従ってDNSレコードを設定しますがその際にポイントになることをまとめました。

- Amplifyから指示があるまでレコードを追加しないこと。「〇〇のレコードがない」というエラーが出て初めて該当レコードを追加すること
- 作業をやり直すことがありキャッシュされることを防ぐためにTTLは短め（可能であれば60秒以下）にすること
- 慣れてくると作業をどんどん進めがちですが、ゆっくり、落ち着いて作業を行うこと。思ったよりAmplifyはゆっくりしている
- うまく行かないなら全部消して、必ず消して、そこからやり直すこと。証明書の検証などはやり直しても同じ値が設定されるだろからとしてレコードを残しておくとエラーになる

## はじめに

AmplifyのHostingにカスタムドメインを追加する際、ドメインの検証（所有権の確認）が行われます。
Route53で取得したもの、もしくはネームサーバをRoute53に指定しているものであればDNSレコードを自動的に生成してAWSの内部で検証作業を完了させてくれるのですが、今回は外部のDNSサーバを使っていました。

そうするとカスタムドメインを設定した後、検証のために２つのレコードを設定する必要があります。   

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/19118798-baf6-7687-e7f1-67a596fefbc1.png)

一つは証明書（ACM）用のレコードで、 `acm-validations.aws.` で終わるドメイン向きのもの、もう一つは実際にHostingを行う上で必要な、ドメイン自身をAmplifyの内部の CloudFront に向けるものになります。

この検証なのですが、実際にどのようなレコードを設定するかについてはカスタムドメインを追加すし、しばらくすると分かります。
その内容にしたがってDNSレコードを設定するとAWSがレコードを確認し、正しい値が指定されていれば追加が完了…となるはずなのですが、出来ませんでした。

検証が完了しない場合、画面に「再検証」のボタンが現れます。普通に考えると指定された内容に従ってDNSを変更し、「再検証」を押せば検証されるかと思われますが、内部的にはカスタムドメインを再度指定し直したような挙動になっており、CloudFrontのアドレス（ホスト名）が変わります。

そのため、更に新しいものになっているため検証に失敗して…　というループになってしまいます。


1. カスタムドメインの追加
1. (AWS) DNSレコードの決定
1. (AWS) 検証中…
1. (自分) DNSレコードの設定
1. (AWS) 検証の失敗
1. (自分) 再検証（以下ループ）

そうするといくら設定してもいたちごっこのように変わってしまい、カスタムドメインの追加が完了しませんでした。

しばらく困っていたのですが、通信ログを見ると最初の検証中の間にも通信をしているようで、その間になんとか変更できないか、と考えました。

# 解決策
まずはドメインのTTLを最小値（60）に設定しました。こうすることで可能な限り早く反映されます。

その後、DNSの検証中が進んでいる間にできるだけ早く内容を変更しました。
そうすることで再検証が出る前に検証が完了し、うまく追加することができました。

# その他
この後、Amplifyでもう一度同じような現象に遭遇しました。

![Screenshot 2024-11-13 at 12.58.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47327/b18bad7e-d07f-d91f-0b08-88e06a3d0fb5.png)

カスタムドメインを追加しようとした際に下記のようなエラーメッセージになっています。

> One or more aliases specified for the distribution includes an incorrectly configured DNS record that points to another CloudFront distribution. You must update the DNS record to correct the problem. For more information, see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-restrictions (Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: ; Proxy: null)

https://repost.aws/questions/QUfHfircCWSgujiyvKaMGfbw

結論として原因は「DNSレコードを表示」から表示されるCNAMEを早く追加してしまっていたことが原因のようでした。
Amplifyが、ドメインが正しく接続されていることの検証は

- 該当ドメインがどこのCloudFrontにも接続されていない
- 該当ドメインが指定のCloudFrontに向けてCNAMEを正しく設定している

という二段階で行われるようで、早めに設定してしまうと最初の段階でエラーが出てしまうようです。たしかにエラーメッセージにそう書かれているのですが、正しく設定したつもりでいたためハマってしまいました。
解決方法は一度CNAMEのレコードエントリを削除し、しばらく待ってから追加し直すとうまくいきました。