はじめに
AWSの内部通信をしているときに、いくら内部通信とは言えデフォルトELB払い出しドメイン名を使うのは分かりにくいよね、ということでやり方を探してみたところ、内部通信であればRoute53のエイリアスレコードというものを使えば実現できるらしい。
料金を確認すると、ELBへのエイリアスへのクエリはなんと無料らしい。さすがにホストゾーンは料金がかかるようだが、それでもホストゾーン単位に$0.50/月程度。利便性を考えればおつりがくる金額だ。
さっそくやってみよう。
いきなりIaC
なにげに、めちゃくちゃ設定簡単だった。
ALBまでリソースが作られているのであれば、以下で出来上がりだ。
今回のサンプルでは、VPCとNLBをinternal_hostzone_testというデータソース名で引っ張ってきている。
特に中身で難しいところはない。type = "A"
がエイリアスレコードを意味する。
resource "aws_route53_zone" "internal_hostzone_test" {
name = "neruneruo.com"
vpc {
vpc_id = "${data.aws_vpc.internal_hostzone_test.id}"
}
}
resource "aws_route53_record" "internal_hostzone_test" {
zone_id = "${aws_route53_zone.internal_hostzone_test.zone_id}"
name = "www.neruneruo.com"
type = "A"
alias {
name = "${data.aws_alb.internal_hostzone_test.dns_name}"
zone_id = "${data.aws_alb.internal_hostzone_test.zone_id}"
evaluate_target_health = true
}
}
ちょっとだけ罠
ホストゾーンの詳細を確認してみると、以下のような注意書きがされる。
プライベートホストゾーンを使用するには、次の Amazon VPC 設定を true に設定する必要があります。
enableDnsHostnames
enableDnsSupport
この項目はデフォルトではONではないので注意が必要だ。
おそらく、VPCの設定画面ではenableDnsSupport
が「DNS 解決」、enableDnsHostnames
がDNS ホスト名
と書かれている設定だと思う。思う、と書いたのは、正しく項目を確認するのであれば以下のCLIを実行すれば値を得られるのだが、「DNS 解決」を無効にした時点でCLIすら通らなくなってしまうので、本当に正しいかが分からないのである……。
$ aws ec2 describe-vpc-attribute --vpc-id vpc-xxxxxxxxxxxxxxxx --attribute enableDnsSupport
aws ec2 describe-vpc-attribute --vpc-id vpc-xxxxxxxxxxxxxxxx --attribute enableDnsHostnames
curlで確認
さて、ちゃんと確認してみよう。
$ curl -D - -s -o /dev/null http://www.neruneruo.com/
HTTP/1.1 403 Forbidden
Date: Sun, 19 Jul 2020 13:11:57 GMT
Server: Apache/2.4.43 ()
Upgrade: h2,h2c
Connection: Upgrade
Last-Modified: Fri, 08 May 2020 17:01:39 GMT
Accept-Ranges: bytes
Content-Length: 3630
Content-Type: text/html; charset=UTF-8
うむ!なんかForbiddenにはなってしまったが、確かにApacheが応答してくれたから良しとしておこう!