kumar
kumar

Reputation: 9387

in terraform how to set if condition for data resource

How do I set if statement for data aws_acm_certificate. I get the following error when I add count for data aws_acm_certificate. I do not get the same error for resource "aws_lb_listener".

Because data.aws_acm_certificate.acm_certificate has "count" set, its attributes must be accessed on specific instances.

data "aws_acm_certificate" "acm_certificate" {
  count = var.protocol!="TCP" ? 1 : 0
  domain   = var.certificate_domain_name
  most_recent = true
}

resource "aws_lb_listener" "listener_https" {
  count = var.protocol!="TCP" ? 1 : 0
  load_balancer_arn = var.load_balancer_arn
  port              = "443"
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = data.aws_acm_certificate.acm_certificate.arn

  default_action {
    type             = "forward"
    target_group_arn = var.target_group_arn
  }
}

Upvotes: 0

Views: 324

Answers (1)

ESG
ESG

Reputation: 9425

Because you have a count on your data, you need to access it as an array

certificate_arn   = data.aws_acm_certificate.acm_certificate[0].arn

Alternatively, you could use a for_each for your resource Something like

resource "aws_lb_listener" "listener_https" {
  for_each          = data.aws_acm_certificate.acm_certificate
  load_balancer_arn = var.load_balancer_arn
  port              = "443"
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = each.value.arn

  default_action {
    type             = "forward"
    target_group_arn = var.target_group_arn
  }
}

Upvotes: 1

Related Questions