AWS Route53で設定していたDNSが不安定になる現象が発生しました。本記事では、その概要、発生した現象、原因、解決方法を詳しく解説します。
概要
AWS Route53を利用して、ステージング環境と本番環境のDNS設定を行っていました。しかし、ステージング環境の特定のサブドメインに対するDNSクエリが不安定になり、期待通りの結果が返ってこない問題が発生しました。この問題を解決するために行った設定変更とその技術的背景についてご紹介します。
現象
以下のようなDNS設定を行っていました。
ステージング環境の設定
stg.app.example.com
のホストゾーン
本番環境の設定
example.com
のホストゾーンapp.example.com
のホストゾーン
以下のレコードが設定されていました。
example.com
のホストゾーンにapp.example.com
のNSレコードexample.com
のホストゾーンにstg.app.example.com
のNSレコード
この設定により、stg.app.example.com
のDNSサーバーからレコードの返却が不安定になる現象が発生しました。具体的には、dig +short stg.app.example.com a
コマンドでクエリを行うと、結果が返却されたりされなかったりしました。
原因
現象の原因を分析したところ、以下の要因が考えられました。
1. DNSキャッシュの影響
DNSクライアントや中間のリゾルバーがNSレコードやAレコードをキャッシュすることがあります。キャッシュされた情報が古くなっていたり、不完全だったりすると、時折正しい結果が返されないことがあります。
2. 複数のネームサーバー間の同期の問題
example.com
ゾーンに存在する stg.app.example.com
のNSレコードが、app.example.com
ゾーンにある stg.app.example.com
のNSレコードと不整合を起こしている可能性があります。この不整合により、DNSクエリが異なるネームサーバーに問い合わせを行い、異なる結果を返すことがあります。
3. DNSデリゲーションの問題
example.com
のホストゾーンに stg.app.example.com
のNSレコードを追加したことが問題でした。これは、 stg.app.example.com
のゾーンデリゲーションを不適切に行っているためです。親ゾーン( example.com
)のNSレコードが、適切な子ゾーン( stg.app.example.com
)のネームサーバーに指示を出す必要がありますが、 example.com
のホストゾーンに設定した stg.app.example.com
のNSレコードは、 app.example.com
のホストゾーンのNSレコードと競合し、不整合が生じました。
解決方法
以下の設定変更を行うことで、DNSの不安定な挙動を改善しました。
1. example.com
のホストゾーンに設定された stg.app.example.com
のNSレコードを削除
example.com
のホストゾーンから stg.app.example.com
のNSレコードを削除しました。これにより、ネームサーバーのデリゲーションの不整合が解消されました。
2. app.example.com
のホストゾーンに stg.app.example.com
のNSレコードを追加
stg.app.example.com
のネームサーバーを app.example.com
のホストゾーンに追加しました。これにより、 stg.app.example.com
のネームサーバーは適切に app.example.com
のサブドメインとしてデリゲーションされ、DNSクエリが正しいネームサーバーに到達し、安定した結果が得られるようになりました。
まとめ
本記事では、AWS Route53で発生したDNSの不安定な挙動について、その原因と解決方法を解説しました。適切なDNSデリゲーション設定を行うことの重要性を再確認できる事例でした。DNS設定においては、ゾーン間のデリゲーションやレコードの整合性を十分に確認することが重要です。今後の設定変更においても、今回の経験を活かして、安定したDNS運用を目指していきましょう。