问题描述
我在 ap-southeast-1 中使用 terraform 设置了我的 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 apply 时,它会引发错误。
是否可以使用 terraform 将 ACM 证书附加到来自不同区域的 alb?
我的用例是此证书也将在 AWS CloudFront 中用作 CDN。
解决方法
是否可以使用 terraform 将 ACM 证书附加到来自不同区域的 alb?
遗憾的是这是不可能的。 ACM 证书只能在其创建的区域使用,不包括 CloudFront 等全球资源。
对于您的 ALB,您必须在 ALB 的区域中创建新的 ACM 并将其注册到同一个域。来自AWS blog:
ACM 证书必须请求或导入到与您的负载均衡器相同的 AWS 区域。 Amazon CloudFront 分配必须在美国东部(弗吉尼亚北部)区域请求证书。
,您可以使用相同的域名在另一个地区创建另一个证书。
例如,假设您有一个名为 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"
}
}