Terraform 和 AWS 多个加权目标组 ALB 侦听器

Terraform and AWS multiple weighted target groups ALB listeners

我是 Terraform 的新手,我很难更改现有配置以匹配我们的 AWS 配置。这有点让我头疼。原始配置是由离开公司的人创建的,我正在尝试用最新的更改更新它。我更新了不同的东西,到了我卡住的地步。似乎我也无法很好地处理 Terraform 文档 /sad_face

我正在使用

terraform --version
Terraform v0.14.8
+ provider registry.terraform.io/hashicorp/aws v3.33.0

目标:在端口 443 上创建一个带有侦听器的 ALB,需要将流量重定向到多个加权目标组,2 或 3 个目标组,后面有网络服务器。在下面的示例中,它将有 2 个目标组,每个 TG 的权重为 1(50% 的流量流向第一个 TG,50% 流向第二个 TG)。 ALB 在端口 80 上还有一个侦听器,可将所有流量重定向到 443,但 terraform 配置工作正常。只有443监听器让我头疼。

我会 post 我的一些配置在这里(不是全部,不要用大块文本发送垃圾邮件),如果您需要更多,请告诉我。我尝试改变了很多东西,下面的配置是最后一次尝试。 这是 ALB TF 文件

    # Manage company-alb-int-publish-NEW

## Load balancer and FQDN
module "publish-alb" {
  source                           = "../../../../modules/load_balancer"
  # ALB
  alb_name                         = "${var.project_code}-alb-${var.environment}-publish-NEW"
  alb_internal                     = false
  lb_type                          = "application"
  idle_timeout                     = 600

  # Route 53
  .......


## Target group 1
module "publish-target-group" {
  source                           = "../../../../modules/target_group"

  target_group_name                = "company-${var.environment}-Publ1-Apache"
  target_group_port                = 443
  target_group_protocol            = "HTTPS"
  ............
}

# ## Target group 2
module "publish-target-group_2" {
  source                           = "../../../../modules/target_group"

  target_group_name                = "company-${var.environment}-Publ2-Apache"
  target_group_port                = 443
  ..........
}

## Listeners
module "listener-http-https" {
  source                           = "../../../../modules/listener_multiple_weighted_target_groups"

  alb_arn                          = module.publish-alb.alb_arn
  target_group_arn_1               = module.publish-target-group.target_group_arn_1
  target_group_arn_2               = module.publish-target-group.target_group_arn_2
  security_policy                  = var.security_policy
  ssl_certificate                  = var.ssl_certificate
  #listener_action                  = "forward"
  stickiness_duration              = 7200
  stickiness_enabled               = true
}

这是我尝试创建的具有多个加权目标组的 ALB 侦听器模块。

# Traffic over HTTP listener
resource "aws_alb_listener" "http" {
  load_balancer_arn = var.alb_arn
  port              = 80
  protocol          = "HTTP"

  default_action {
    type = "redirect"

    redirect {
      port        = "443"
      protocol    = "HTTPS"
      status_code = "HTTP_301"
    }
  }
}

# Traffic over HTTPS listener
resource "aws_alb_listener" "https" {
  load_balancer_arn = var.alb_arn
  port              = 443
  protocol          = "HTTPS"
  ssl_policy        = var.security_policy
  certificate_arn   = var.ssl_certificate

  default_action {
    forward {

            target_group_arn {
                target_group_arn    = var.target_group_arn_1
                weight = 1
            }
            target_group_arn {
                target_group_arn    = var.target_group_arn_2
                weight = 1
            }
        }
  }
}

这是我在运行“terraform plan”

时得到的输出
terraform plan

Error: Unsupported attribute

  on company-alb-int-publish-NEW.tf line 107, in module "listener-http-https-publish":
 107:   target_group_arn_1               = module.publish-target-group.target_group_arn_1

This object does not have an attribute named "target_group_arn_1".


Error: Unsupported attribute

  on company-alb-int-publish-NEW.tf line 108, in module "listener-http-https-publish":
 108:   target_group_arn_2               = module.publish-target-group.target_group_arn_2

This object does not have an attribute named "target_group_arn_2".


Error: Missing required argument

  on ../../../../modules/listener_multiple_weighted_target_groups/main.tf line 28, in resource "aws_alb_listener" "https":
  28:   default_action {

The argument "type" is required, but no definition was found.


Error: Unsupported block type

  on ../../../../modules/listener_multiple_weighted_target_groups/main.tf line 31, in resource "aws_alb_listener" "https":
  31:             target_group_arn {

Blocks of type "target_group_arn" are not expected here.


Error: Unsupported block type

  on ../../../../modules/listener_multiple_weighted_target_groups/main.tf line 35, in resource "aws_alb_listener" "https":
  35:             target_group_arn {

Blocks of type "target_group_arn" are not expected here.

有人知道我做错了什么吗?

谢谢!

您应该使用 default_action.target_group 而不是 default_action.target_group_arndefault_action.target_group 块然后将 arnweight 作为参数:

resource "aws_alb_listener" "https" {
  load_balancer_arn = var.alb_arn
  port              = 443
  protocol          = "HTTPS"
  ssl_policy        = var.security_policy
  certificate_arn   = var.ssl_certificate

  default_action {
    type = "forward"

    forward {
      target_group {
        arn    = var.target_group_arn_1
        weight = 1
      }

      target_group {
        arn    = var.target_group_arn_2
        weight = 1
      }
    }
  }
}