前提
- AWS RDSとRoute53を例にしています。
- 何かしらのドメインを取得している前提です。
本題
アプリケーション側でデータベースのホストを直接参照している場合、以下のような状況で困ったことは無いでしょうか。
- 接続しているデータベースをスタンバイ中の別データベースに切り替える場合
- スナップショットから新しいデータベースを復元して使用する場合
データベースが変わるとホスト名も変わるため、アプリケーションやSQLクライアントツール等の接続情報を全て書き換える必要があります。
以下の通りCNAMEレコードを使用することで、データーベースが変わった場合はCNAMEレコードの参照先の修正だけで済みます。
CNAMEレコードとは
ドメイン名やホスト名に対する別名(エイリアス)を定義したDNSレコード。
例えばveryverylong.hogedomain.com
の別名としてshort.hogedomain.com
CNAMEレコードを定義すると、以後short.hogedomain.com
で接続できるようになる。
CNAMEの設定方法
AWSコンソールであれば、以下のように設定できます。
CNAMEの参照先を修正する場合は、データベースのホストを新しいデータベースのものに修正するだけです。
terraformであれば、aws_route53_record
リソースのrecords
をdb_aからdb_bに変更するだけなので非常に楽ですね。
// hosted zone
data "aws_route53_zone" "main" {
zone_id = "ゾーン名"
}
// CNAMEレコード
resource "aws_route53_record" "db-host-alias" {
zone_id = data.aws_route53_zone.main.id
name = "レコード名"
type = "CNAME"
ttl = 60
// db_bに接続を変更する時はここをdb_bに置き換え
records = [aws_rds_cluster_instance.db_a.endpoint]
}