Terraform 为什么不是';我的AWS ACM证书是否正在验证?

Terraform 为什么不是';我的AWS ACM证书是否正在验证?,terraform,amazon-route53,aws-certificate-manager,Terraform,Amazon Route53,Aws Certificate Manager,我在AWS Route53中注册了一个域名,并获得了ACM证书。我现在正在尝试将该域名和证书移动到一个新帐户,并使用Terraform管理资源。我使用AWS CLI将域名移动到新帐户,它似乎工作正常。然后我试着运行这个Terraform代码为域创建一个新的证书和托管区域 resource "aws_acm_certificate" "default" { domain_name = "mydomain.io" val

我在AWS Route53中注册了一个域名,并获得了ACM证书。我现在正在尝试将该域名和证书移动到一个新帐户,并使用Terraform管理资源。我使用AWS CLI将域名移动到新帐户,它似乎工作正常。然后我试着运行这个Terraform代码为域创建一个新的证书和托管区域

resource "aws_acm_certificate" "default" {
  domain_name       = "mydomain.io"
  validation_method = "DNS"
}

resource "aws_route53_zone" "external" {
  name = "mydomain.io"
}

resource "aws_route53_record" "validation" {
  name    = aws_acm_certificate.default.domain_validation_options.0.resource_record_name
  type    = aws_acm_certificate.default.domain_validation_options.0.resource_record_type
  zone_id = aws_route53_zone.external.zone_id
  records = [aws_acm_certificate.default.domain_validation_options.0.resource_record_value]
  ttl     = "60"
}

resource "aws_acm_certificate_validation" "default" {
  certificate_arn = aws_acm_certificate.default.arn
  validation_record_fqdns = [
    aws_route53_record.validation.fqdn,
  ]
}
这有两件事很奇怪。主要是创建证书,但验证从未完成。它仍处于待定验证状态。我在失败后的某个地方读到,您无法自动验证,需要手动创建CNAME记录。因此,我进入控制台并单击“将cname添加到路由53”按钮。这将CNAME记录适当地添加到Terraform创建的新Route53记录中。但它已经等待了几个小时。我已经多次点击同一个按钮,只创建了一个CNAME,后续的点击没有效果

另一个奇怪的现象,也许是一个线索,就是我的网站仍然在运行。我认为这应该已经破坏了网站,因为域名现在由一个新帐户拥有,路由到新帐户上的另一个托管区域,并且有一个证书现在仍在等待中。然而,一切仍然正常。所以我认为可能是旧的证书和托管区域影响了这一点。他们需要释放域吗?我需要删除该证书吗?删除旧帐户上的证书听起来没有必要。我不应该再被解雇了


我还没有将证书与Cloudfront或ALB关联,我打算这样做。但由于未经验证,我用于创建Cloudfront实例的Terrform代码将失效。

事实证明,我传输的域是与一组名称服务器一起传输的,然而,Route53托管区域中的名称服务器都是不同的。当这些通过控制台一起创建时,它会做正确的事情。我不确定如何在Terraform上做正确的事情,我现在将发布另一个问题。但目前,解决方案是更改托管区域或注册域上的名称服务器,使其相互匹配。

这对我来说很有效

data "aws_route53_zone" "main" {
  name         = var.domain
  private_zone = false
}

locals {
  final_domain = var.wildcard_enable == true ? *.var.domain : var.domain
  # final_domain = "${var.wildcard_enable == true ? "*.${var.domain}" : var.domain}"
}

resource "aws_acm_certificate" "cert" {
  domain_name       = local.final_domain
  validation_method = "DNS"

  tags = {
    "Name" = var.domain
  }

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_route53_record" "cert_validation" {
  depends_on      = [aws_acm_certificate.cert]
  zone_id         = data.aws_route53_zone.main.id
  name            = sort(aws_acm_certificate.cert.domain_validation_options[*].resource_record_name)[0]
  type            = "CNAME"
  ttl             = "300"
  records         = [sort(aws_acm_certificate.cert.domain_validation_options[*].resource_record_value)[0]]
  allow_overwrite = true
}

resource "aws_acm_certificate_validation" "cert" {
  certificate_arn = aws_acm_certificate.cert.arn
  validation_record_fqdns = [
    aws_route53_record.cert_validation.fqdn
  ]
  timeouts {
    create = "60m"
  }
}
######################


DNS有一件事让我着迷了好几次:完全传播更改可能需要24小时。也许值得花一整天的时间来验证这些更改是否正确通过。遗憾的是,事实并非如此。已经好几天了。我还删除了旧帐户上的托管区域,但仍然无法验证。这个问题已经得到了回答,这是一个奇怪的问题,因为我从不同的帐户移植了名称服务器,所以我在找到答案后将其记录下来。如前所述,代码应该按照您发现的那样工作。但真正的问题是注册到域中的底层名称服务器。当你说“它为我工作”时,你能给出一些上下文吗?它在几秒钟内验证了吗?分钟?小时?试着去理解这里会发生什么。