Route53の複数値回答ルーティングポリシーをterraformで書いてみる

2 min read読了の目安(約2400字

DNSラウンドロビンで分散させてたサービスがあるのですが、どれか落ちた時に面倒かなというわけで、複数値回答ルーティングポリシーを使ってみることにしました(試してみたいだけともいう)。とはいえ、まだ terraform で設定してみただけで細かいところは未検証なので、そのうちそっちはやりたいと思います。今回は terraform でこう書くよってところだけ。

複数値回答ルーティングポリシーは、簡単に言うとヘルスチェックして生きてる分だけレコードを返してくれます。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/multivalue-versus-simple-policies/

コンソールだとこんな感じで設定進めていきます。

で、terraformのドキュメント読んで

multivalue_answer_routing_policy = true

すればいいのはすぐにわかったんですが、はて、レコードIDとやらは?

わかんないんでテキトーに書いて plan & apply してみたところ

Error: provider.aws: aws_route53_record: test-cdn-v2.example.jp.: "set_identifier": required field is not set when "multivalue_answer_routing_policy" is set

なるほど?つまり、こういうことか。

でも、これドキュメントに記載ないんですよ…。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record
(2021年3月15日閲覧)
ultivalue_answer_routing_policy でも必須ですね。

というわけで、こんな感じに書いて完了。

resource "aws_route53_zone" "example-jp" {
  name = "example.jp"
}
resource "aws_route53_health_check" "hc-test-cdn-v2-01" {
  fqdn              = "test-cdn01.example.jp"
  port              = 443
  type              = "HTTPS"
  resource_path     = "/healthcheck"
  failure_threshold = "5"
  request_interval  = "30"
}
resource "aws_route53_health_check" "hc-test-cdn-v2-02" {
  fqdn              = "test-cdn02.example.jp"
  port              = 443
  type              = "HTTPS"
  resource_path     = "/healthcheck"
  failure_threshold = "5"
  request_interval  = "30"
}

resource "aws_route53_record" "test-cdn-v2-01" {
  zone_id = aws_route53_zone.example-jp.zone_id
  name    = "test-cdn-v2.example.jp."
  type    = "A"
  ttl     = "300"
  multivalue_answer_routing_policy = true
  health_check_id = aws_route53_health_check.hc-test-cdn-v2-01.id
  set_identifier = "01"
  records = ["XXX.XXX.XXX.XXX"]
}
resource "aws_route53_record" "test-cdn-v2-02" {
  zone_id = aws_route53_zone.example-jp.zone_id
  name    = "test-cdn-v2.example.jp."
  type    = "A"
  ttl     = "300"
  multivalue_answer_routing_policy = true
  health_check_id = aws_route53_health_check.hc-test-cdn-v2-02.id
  set_identifier = "02"
  records = ["XX.XX.XX.XX"]
}

ヘルスチェック失敗した時にCloudWatchアラーム発砲出来るので、それはまた別途書いてみたいと思います。