0

我使用 terraform 在 ap-southeast-1 中设置了 AWS 基础设施,但是,我想使用 aws_alb_listener 资源将我在 us-east1 中创建的 ACM 证书链接到我的负载均衡器。


resource "aws_alb_listener" "https" {
  load_balancer_arn = aws_lb.main.id
  port              = 443
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = var.acm_certificate_arn
  depends_on        = [aws_alb_target_group.main]

  default_action {
    target_group_arn = aws_alb_target_group.main.arn
    type             = "forward"
  }
}

当我应用 terraform 时,它会引发错误。

是否可以使用 terraform 将 ACM 证书附加到来自不同地区的 alb?

我的用例是这个证书也将在 AWS CloudFront 中用作 CDN。

4

2 回答 2

2

是否可以使用 terraform 将 ACM 证书附加到来自不同地区的 alb?

可悲的是这是不可能的。ACM 证书只能在其创建的区域中使用,不包括 CloudFront 等全球资源。

对于您的 ALB,您必须在 ALB 的区域中创建新的 ACM 并将其注册到同一域。来自AWS 博客

必须在与负载均衡器相同的 AWS 区域中请求或导入ACM 证书。Amazon CloudFront 分配必须在美国东部(弗吉尼亚北部)区域申请证书。

于 2021-02-15T10:08:58.687 回答
0

您可以在另一个区域创建具有相同域名的另一个证书。

例如,假设您有一个名为 default 的 aws_acm_certificate

# Your default certificate in ap-southeast-1
resource "aws_acm_certificate" "default" {
  domain_name       = aws_route53_record.default.fqdn
  validation_method = "DNS"

  lifecycle {
    create_before_destroy = true
  }

  tags = {
    Environment = var.environment
  }
}

“默认”证书正在使用默认提供程序,因此让我们创建另一个具有别名的 aws 提供程序

provider "aws" {
  alias  = "us_east"
  region = "us-east-1"
}

现在我们可以使用这个证明在另一个区域创建“相同”的证书

resource "aws_acm_certificate" "us" {
  domain_name       = aws_route53_record.default.fqdn
  validation_method = "DNS"

  lifecycle {
    create_before_destroy = true
  }

  provider = aws.us_east

  tags = {
    Environment = var.environment
  }
}

您的听众现在可以在 us-east-1 中使用这个新证书

resource "aws_alb_listener" "https" {
  load_balancer_arn = aws_lb.main.id
  port              = 443
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = aws_acm_certificate.us.arn
  depends_on        = [aws_alb_target_group.main]

  default_action {
    target_group_arn = aws_alb_target_group.main.arn
    type             = "forward"
  }
}
于 2021-05-11T13:02:25.693 回答