aws_alb_listener 的 Terraform 如何在 type="forward" 的默认操作中添加多个 target_group_arn
Posted
技术标签:
【中文标题】aws_alb_listener 的 Terraform 如何在 type="forward" 的默认操作中添加多个 target_group_arn【英文标题】:Terraform for aws_alb_listener how to add multiple target_group_arn in default action for type="forward" 【发布时间】:2021-01-03 04:40:19 【问题描述】:我的方法:我必须创建一个 "aws_lb_listener" 资源,在默认操作中我有 type = "forward" 但我没有一个 target_group_arn 。我有多个 target_group_arn 值。
sn-p 下面显示了前端侦听器,但 target_group_arn 应该包含多个 arn 值。
resource "aws_alb_listener" "frontend-listener"
load_balancer_arn = aws_alb.ss_alb.arn
port = "443" #"80"
protocol = "HTTPS"
depends_on = [aws_alb_target_group.aws_alb_target_group]
default_action
#target_group_arn = aws_alb_target_group.aws_alb_target_group.arn
type = "forward"
aws_alb_target_group 资源显示正在创建多个目标组。
resource "aws_alb_target_group" "aws_alb_target_group"
for_each = local.ebapp_name
name = "$each.value.name-tg"
port = 80
protocol = "HTTP"
vpc_id = var.vpc_id
我查看了 terraform 文档,但找不到解决方案。 (https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb_listener)
resource "aws_alb_listener_rule" "aws_alb_listener_rule"
for_each = local.ebapp_name
listener_arn = aws_alb_listener.frontend-listener.arn
action
type = "forward"
target_group_arn = aws_alb_target_group.aws_alb_target_group[each.value.name].arn
condition
path_pattern
values = ["/$each.value.name/*"]
我也提到了监听器规则。
使用 terraform apply 命令显示错误,如下所示:
对于“forward”类型的操作,您必须指定“forward”块或“target_group_arn”
为了解决这个错误需要做哪些改变?
【问题讨论】:
【参考方案1】:我认为您可以使用dynamic blocks 实现这一目标。例如:
resource "aws_alb_listener" "frontend-listener"
load_balancer_arn = aws_alb.ss_alb.arn
port = "443" #"80"
protocol = "HTTPS"
depends_on = [aws_alb_target_group.aws_alb_target_group]
default_action
type = "forward"
forward
dynamic "target_group"
for_each = aws_alb_target_group.aws_alb_target_group
content
arn = target_group.value["arn"]
以上仅为示例,可能仍需要进行一些调整才能使其按预期工作。
【讨论】:
我尝试使用 forward dynamic "target_group" for_each = local.ebapp_name content arn = aws_alb_target_group.aws_alb_target_group[each.value.name].arn 它似乎不起作用,你能提出任何可行的方法吗?卡在上面很久了。 错误:在模块\alb\main.tf 第 37 行,资源“aws_alb_listener”“frontend-listener”中,不能在此上下文中使用 each.value:37:arn = aws_alb_target_group.aws_alb_target_group[each .value.name].arn 对“each.value”的引用已在其不可用的上下文中使用,例如当配置不再包含其“for_each”表达式中的值时。删除配置中对 each.value 的此引用以解决此错误。 @aditmodi 在我的回答中我使用了each.value
。也错了?
@aditmodi 也许应该是target_group.value["arn"]
。我修改了答案。
你的答案不起作用,因为 for_each 应该有 local.ebapp_name 而不是 resource.aws_alb_target_group.aws_alb_target_group 。【参考方案2】:
这对我有用。它现在将所有三个目标组添加到侦听器的默认操作中。
locals
target_groups = ["1", "2", "3"]
resource "aws_lb_listener" "https_to_target_group"
count = length(local.target_groups)
certificate_arn = aws_acm_certificate.cd.arn
load_balancer_arn = aws_lb.cd.arn
port = var.alb.port
protocol = var.alb.protocol
ssl_policy = var.alb.ssl_policy
default_action
type = "forward"
forward
dynamic "target_group"
for_each = local.target_groups
content
arn = aws_lb_target_group.cd[target_group.key].arn
【讨论】:
以上是关于aws_alb_listener 的 Terraform 如何在 type="forward" 的默认操作中添加多个 target_group_arn的主要内容,如果未能解决你的问题,请参考以下文章
需要说明如何使用 Terraform 管理 Google Cloud 项目
将现有 GKE 集群添加到 terraform stat 文件