TerraformでAWS Load Balancerに2つの異なるTarget Groupを設定する
Terraformを使ってAWSサービスでElastic Load Balancerの背後に複数のターゲットグループを使用する方法を学ぶ。

先週、TerraformでInfrastructure as Codeを書いた。AWS Application Load Balancerのパブリックインターフェースから2つの異なるターゲットグループにトラフィックを転送する必要があった。HashiCorp言語(HCL)は難しくないが、ドキュメントには多くのトピックが欠けており、Terraformには文書化されていないポイントもある。
検索してみたが、「TerraformでAWSで複数のターゲットグループを使用する」というテーマについて多くの質問や課題があるのを確認した。提案された解決策を読んだが役に立たなかった。その後、リソースとして"aws_lb_listener"を使うことにした。最終的に自分のケースに対する解決策を見つけた。詳細は以下の通り。
resource "aws_lb" "awsalb" {
name = "my-aws-loadbalancer"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.lb.id]
subnets = data.aws_subnet_ids.subnets.ids
enable_deletion_protection = false
tags = { Name = "My AWS ALB Load Balancer" }
}
resource “aws_lb_target_group” “origin” {
name = “Origin-Group”
port = 5080
protocol = “HTTP”
vpc_id = data.aws_vpc.default.id
stickiness { type = “lb_cookie” }
}
resource “aws_lb_target_group” “edge” {
name = “Edge-Group”
port = 5080
protocol = “HTTP”
vpc_id = data.aws_vpc.default.id
stickiness { type = “lb_cookie” }
}
resource “aws_lb_listener” “http” {
load_balancer_arn = aws_lb.awsalb.arn
port = “80”
protocol = “HTTP”
default_action {
type = “forward”
forward {
target_group { arn = aws_lb_target_group.origin.arn }
target_group { arn = aws_lb_target_group.edge.arn }
stickiness { enabled = true; duration = 28800 }
}
}
}
このトリックが役立つことを願っている。
2022年6月28日編集: このコードブロックをhttps://github.com/flightlesstux/antmedia/tree/master/aws-clusterで使用した。どのように動作するかチェックして理解できる。
Ercan の他のサイト
同じ著者、別の領域のサイトが2つ。