Terraform で Route 53 レコードのルーティングポリシーを変更する
Terraform で Route 53 レコードのルーティングポリシーを変更するには、いくつかのステップを踏む必要があります。この記事は、ダウンタイムなしにルーティングポリシーを Simple から Weighted に変更する手順を検証したものです。
ルーティングポリシーを変更したい理由は、インフラ構成を刷新するにあたって新環境に徐々にリクエストを流したいからです。
ステップを踏みながら変更する
例として test.manabusakai.com
のレコードを Simple から Weighted ルーティングポリシーに変更します。実環境では IP アドレスではなく ALB などの Alias レコードになりますが、手順に違いはありません。
resource "aws_route53_record" "test" {
zone_id = "Z11GV4TXXXXXXX"
name = "test.manabusakai.com"
type = "A"
ttl = "10"
records = ["192.0.2.1"]
}
まずはリソース名を分かりやすくするために terraform state mv
します。ここでは test_blue
と test_green
というリソース名にします。
$ terraform state mv aws_route53_record.test aws_route53_record.test_blue
Move "aws_route53_record.test" to "aws_route53_record.test_blue"
Successfully moved 1 object(s).
tfstate が変更されたのでそれに合うようにリソース名 (test
→ test_blue
) を変更し、Weighted に必要な set_identifier
と weighted_routing_policy
を追加します。ここでいったん apply します。
resource "aws_route53_record" "test_blue" {
zone_id = "Z11GV4TXXXXXXX"
name = "test.manabusakai.com"
type = "A"
ttl = "10"
records = ["192.0.2.1"]
set_identifier = "blue"
weighted_routing_policy {
weight = 100
}
}
次に test_green
を定義します。 apply の順序によってはダウンタイムが発生する可能性があるので、weight
は 100 対 0 にしておき test_green
側にはリクエストを流さないようにします。ここでも忘れずに apply します。
resource "aws_route53_record" "test_blue" {
zone_id = "Z11GV4TXXXXXXX"
name = "test.manabusakai.com"
type = "A"
ttl = "10"
records = ["192.0.2.1"]
set_identifier = "blue"
weighted_routing_policy {
weight = 100
}
}
resource "aws_route53_record" "test_green" {
zone_id = "Z11GV4TXXXXXXX"
name = "test.manabusakai.com"
type = "A"
ttl = "10"
records = ["192.0.2.2"]
set_identifier = "green"
weighted_routing_policy {
weight = 0
}
}
最後に weight
を任意の割合に変更します。 weight
の変更は update in-place で行われます。それぞれ 50 % ずつリクエストを流したいならこんな感じ。
resource "aws_route53_record" "test_blue" {
zone_id = "Z11GV4TXXXXXXX"
name = "test.manabusakai.com"
type = "A"
ttl = "10"
records = ["192.0.2.1"]
set_identifier = "blue"
weighted_routing_policy {
weight = 50
}
}
resource "aws_route53_record" "test_green" {
zone_id = "Z11GV4TXXXXXXX"
name = "test.manabusakai.com"
type = "A"
ttl = "10"
records = ["192.0.2.2"]
set_identifier = "green"
weighted_routing_policy {
weight = 50
}
}
端折ってまとめて apply すると予期せぬエラーが発生するので、ステップごとに確認しながら進めるのがポイントです。
おわりに
Management Console から変更したことは何度もあるのですが、いざ Terraform でやろうとするとハマりどころが多くて学びがありました。