AmplifyのHostingでカスタムドメインを設定しようとしたらハマりました。
AmplifyのHostingにカスタムドメインを追加する際、ドメインの検証(所有権の確認)が行われます。
Route53で取得したもの、もしくはネームサーバをRoute53に指定しているものであればDNSレコードを自動的に生成してAWSの内部で検証作業を完了させてくれるのですが、今回は外部のDNSサーバを使っていました。
そうするとカスタムドメインを設定した後、検証のために2つのレコードを設定する必要があります。
一つは証明書(ACM)用のレコードで、 acm-validations.aws.
で終わるドメイン向きのもの、もう一つは実際にHostingを行う上で必要な、ドメイン自身をAmplifyの内部の CloudFront に向けるものになります。
この検証なのですが、実際にどのようなレコードを設定するかについてはカスタムドメインを追加すし、しばらくすると分かります。
その内容にしたがってDNSレコードを設定するとAWSがレコードを確認し、正しい値が指定されていれば追加が完了…となるはずなのですが、出来ませんでした。
検証が完了しない場合、画面に「再検証」のボタンが現れます。普通に考えると指定された内容に従ってDNSを変更し、「再検証」を押せば検証されるかと思われますが、内部的にはカスタムドメインを再度指定し直したような挙動になっており、CloudFrontのアドレス(ホスト名)が変わります。
そのため、更に新しいものになっているため検証に失敗して… というループになってしまいます。
- カスタムドメインの追加
- (AWS) DNSレコードの決定
- (AWS) 検証中…
- (自分) DNSレコードの設定
- (AWS) 検証の失敗
- (自分) 再検証(以下ループ)
そうするといくら設定してもいたちごっこのように変わってしまい、カスタムドメインの追加が完了しませんでした。
しばらく困っていたのですが、通信ログを見ると最初の検証中の間にも通信をしているようで、その間になんとか変更できないか、と考えました。
解決策
まずはドメインのTTLを最小値(60)に設定しました。こうすることで可能な限り早く反映されます。
その後、DNSの検証中が進んでいる間にできるだけ早く内容を変更しました。
そうすることで再検証が出る前に検証が完了し、うまく追加することができました。