先週、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で使用した。どのように動作するかチェックして理解できる。