有没有办法在 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 validate
和 terraform plan
.
祝你好运!
我对编码和 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 validate
和terraform plan
.祝你好运!