Terraform 循环和来自其他循环的数据源

问题描述 投票:0回答:1

我在 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
  }))
}

不幸的是,我正在努力解决一个事实,即我无法对一种资源使用两个周期。你能想出解决这个问题的方法吗?

结果是我想我将能够为侦听器分配目标组和证书。

amazon-web-services terraform terraform-provider-aws
1个回答
0
投票

您可以使用当地人的所有信息创建更完整的地图。之后,在循环中引用本地。

© www.soinside.com 2019 - 2024. All rights reserved.