
Terraform で aws_lb_listener を使って ALB (Application Load Balancer) のリスナーをデプロイするときに default_action ブロックに複数のターゲットグループへの加重ルーティングを設定できる👌
ドキュメントを抜粋すると以下のように書いてある.default_action ブロックで target_group_arn ではなく forward を使う必要があって,通常(一つのターゲットグループにルーティングする場合)とは少し異なる実装になる.
To route to one or more target groups, use a forward block instead.
一つ以上のターゲットグループにルーティングするために代わりに forward ブロックを使用します。
👾 alb.tf
参考実装を載せておく❗️
resource "aws_lb" "main" { name = "sandbox" internal = false load_balancer_type = "application" security_groups = ["sg-xxxxxxxx"] subnets = ["subnet-xxxxxxxx", "subnet-xxxxxxxx"] } resource "aws_lb_target_group" "blue" { name = "sandbox-blue" port = 80 protocol = "HTTP" vpc_id = "vpc-xxxxxxxx" target_type = "ip" } resource "aws_lb_target_group" "green" { name = "sandbox-green" port = 80 protocol = "HTTP" vpc_id = "vpc-xxxxxxxx" target_type = "ip" } resource "aws_lb_target_group" "yellow" { name = "sandbox-yellow" port = 80 protocol = "HTTP" vpc_id = "vpc-xxxxxxxx" target_type = "ip" } resource "aws_lb_listener" "main" { load_balancer_arn = aws_lb.main.arn port = "80" protocol = "HTTP" default_action { type = "forward" forward { target_group { arn = aws_lb_target_group.blue.arn weight = 50 } target_group { arn = aws_lb_target_group.green.arn weight = 30 } target_group { arn = aws_lb_target_group.yellow.arn weight = 20 } } } }
デプロイ確認
参考実装をデプロイするとこうなる.デフォルトアクションで blue / green / yellow への加重ルーティングを設定できている👌

Terraform AWS Provider ドキュメント
もともと default_action ブロックで target_group_arn ではなく forward を使った実装をする人の参考になれば良いな〜と思ってブログにまとめていたけど,もしかしたら Terraform AWS Provider のドキュメントにサンプルコードが載っていれば良いんじゃないか💡と思ってプルリクエストを送ったら merge してもらえた.
Terraform AWS Provider v6.5.0 から aws_lb_listener のドキュメントに With weighted target groups として載っているので参考になれば \( 'ω')/