有没有办法在 terraform 中同时创建 route53_zone 并将其 zone_id 应用于记录?

is there a way to create route53_zone and apply its zone_id to records at the same time in terraform?

我对编码和 terraform 还很陌生。

我试图将我需要的所有资源写入 .tf 文件

在这样做的同时,我

Terraform plan

出现错误

│ Error: no matching Route53Zone found
│
│   with data.aws_route53_zone.<name>,
│   on <filename>.tf line 70, in data "aws_route53_zone" "<name>":
│   70: data "aws_route53_zone" "<name>" {

这就是我写的

resource "aws_route53_zone" "example" {
    name       = "example.com"
    comment    = "eg-example"

    tags= {
        Name = "example.com"
    }
}

resource "aws_acm_certificate" "eg-example-acm-domaincert" {
    domain_name               = "*.example.com"
    validation_method         = "DNS"
    tags = {
      name = "eg-example-acm-domaincert"
      }
}

resource "aws_route53_record" "cname-example" {
    zone_id = data.aws_route53_zone.example.zone_id
    name    = "cname.example.com"
    type    = "CNAME"
    records = ["cname-example-alb-ext-1111111111.region.elb.amazonaws.com"]
    ttl     = "300"

}

data "aws_route53_zone" "example" {
  name         = "example.com."
  private_zone = true
}

resource "aws_acm_certificate_validation" "eg-example-acm-domaincert" {
  certificate_arn         = "arn:aws:acm:**********************"
  validation_record_fqdns = ["*****************************.example.com"]
}

代码与此差别不大。

除了在AWS控制台上创建区域外,我真的没有任何想法。

还有其他方法吗?

希望我的解释对你有意义。

由于您是在 TF 脚本中创建 HZ,因此您也可以在不使用数据源的情况下引用它:

resource "aws_route53_record" "cname-example" {
    zone_id = aws_route53_zone.example.zone_id
    name    = "cname.example.com"
    type    = "CNAME"
    records = ["cname-example-alb-ext-1111111111.region.elb.amazonaws.com"]
    ttl     = "300"

}

摆脱对 data 的调用,只使用资源:

aws_route53_zone.example.zone_id

在检索之前创建的资源(例如,从另一个 Terraform 项目)时使用 data

    
resource "aws_route53_record" "cname-example" {
    zone_id = aws_route53_zone.example.zone_id // no need for data.
    name    = "cname.example.com"
    type    = "CNAME"
    records = ["cname-example-alb-ext-1111111111.region.elb.amazonaws.com"]
    ttl     = "300"

}</pre>

运行 terraform validateterraform plan.

祝你好运!