我在 Terraform for AWS 中创建目标组并向其分配 ALB 侦听器和证书时遇到问题。创建多个目标组对我来说不起作用。问题是,我使用基本的 for_each 构造。但是,对于 ALB 侦听器模块,我需要定义为 tg 创建的目标组和证书。我想用数据源的另一个计数加载证书(证书是从另一个模块创建的)。
# Certificate Data
data "aws_acm_certificate" "generic_certificate" {
count = length(var.domain_name)
domain = var.domain_name[count.index]
}
resource "aws_lb_listener" "alb_generic_https_listener" {
for_each = { for target in var.target_groups : target.name => target }
load_balancer_arn = aws_lb.generic_alb.arn
port = var.https_listener_port
protocol = var.https_listener_protocol
ssl_policy = var.https_policy
certificate_arn = data.aws_acm_certificate.generic_certificate[count.index].arn
default_action {
type = var.https_default_action_type
target_group_arn = aws_lb_target_group.generic_alb_tg[each.key].arn
}
}
#ALB Target Group
resource "aws_lb_target_group" "generic_alb_tg" {
for_each = { for target in var.target_groups : target.name => target }
name = "${each.value.name}-${var.environment}"
port = each.value.port
protocol = each.value.protocol
target_type = each.value.target_type
vpc_id = data.aws_vpc.vpc.id
tags = {
Environment = var.environment
Region = var.region
Type = each.value.resource_type
}
}
variable "domain_name" {
type = list(string)
description = "Domain name for SSL Certificate"
}
variable "target_groups" {
type = list(object({
name = string
port = string
protocol = string
target_type = string
resource_type = string
}))
}
不幸的是,我正在努力解决一个事实,即我无法对一种资源使用两个周期。你能想出解决这个问题的方法吗?
结果是我想我将能够为侦听器分配目标组和证书。
您可以使用当地人的所有信息创建更完整的地图。之后,在循环中引用本地。