使用 terraform 在 route53 上获取托管域的 zone_id
Posted
技术标签:
【中文标题】使用 terraform 在 route53 上获取托管域的 zone_id【英文标题】:Fetch zone_id of hosted domain on route53 using terraform 【发布时间】:2020-12-03 18:15:30 【问题描述】:您好,我正在使用 terraform 创建 route53 记录,我已经有一个托管域(公共)让我们说 example.com
如何获取其 zone_id 并附加到记录。如何获取现有 route53 托管区域的 zone_id。我已经编写了一个文件,但它的作用是创建另一个托管区域example.com
,而不是获取现有的example.com
resource "aws_route53_zone" "main"
name = "example.com"
resource "aws_route53_record" "www"
zone_id = data.aws_route53_zone.selected.zone_id
name = "dev.$data.aws_route53_zone.selected.name"
type = "A"
alias
name = var.alb_dns
zone_id = var.zone_id
evaluate_target_health = false
【问题讨论】:
【参考方案1】:你也需要加private_zone = false
data "aws_route53_zone" "selected"
name = "test.com."
private_zone = false
resource "aws_route53_record" "www"
zone_id = data.aws_route53_zone.selected.zone_id
name = "dev.$data.aws_route53_zone.selected.name"
type = "A"
alias
name = var.alb_dns
zone_id = var.zone_id
evaluate_target_health = false
【讨论】:
``` data.aws_route53_zone.non-prod-zone: 刷新状态... ------------------------ ------------------------------------------------ 执行计划已生成,如下所示。资源操作用以下符号表示: Terraform 将执行以下操作: 计划:0 表示添加,0 表示更改,0 表示销毁。 ``` 表示它无法获取现有的托管区域 我在文档中不再看到 private_zone false 属性。这是没有记录的吗? registry.terraform.io/providers/hashicorp/aws/latest/docs/…我正在使用cdktf生成tf代码,所以我不能使用未指定的vars。【参考方案2】:在 terraform 中,数据源可用于在运行时检索信息。 AWS 提供商包括 route53 区域的数据源。以下是它的用法示例:
data "aws_route53_zone" "selected"
name = "test.com."
resource "aws_route53_record" "www"
zone_id = data.aws_route53_zone.selected.zone_id
name = "dev.$data.aws_route53_zone.selected.name"
type = "A"
alias
name = var.alb_dns
zone_id = var.zone_id
evaluate_target_health = false
【讨论】:
它给出了一个错误Error: multiple Route53Zone found please use vpc_id option to filter
@aws-noob 如果您有多个名为“test.com”的域,那么您将需要提供额外的过滤器以便只返回一个域。有关数据源接受的所有参数,请参阅文档:registry.terraform.io/providers/hashicorp/aws/latest/docs/…【参考方案3】:
重新要求:
我已经有托管区域(区域:AWS 全球) 我想 $(teraform output) Hosted Zone Id 以便在配置中进一步使用解决方案:
-
创建一个空资源:
resource "aws_route53_zone" "non-prod-zone"
-
进口追索
terraform import aws_route53_zone.non-prod-zone YOUR_HOSTED_ZONE_ID
-
用名称来论证你的资源
resource "aws_route53_zone" "non-prod-zone"
name = var.non_prod_hosted_zone
-
$(terraform refresh) 将输出你的变量??
Outputs:
hosted_zone_test_envs_id = YOUR_HOSTED_ZONE_ID
【讨论】:
以上是关于使用 terraform 在 route53 上获取托管域的 zone_id的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用 terraform 资源 aws_route53_record 创建的 Route53 记录无法公开解析?
Terraform - 找不到匹配的 Route53Zone
在 aws_route53_record terraform 资源中使用“计数”
terraform - 如何为 DNS 创建 Route53?