Terraform“为区域匹配失败的 VPC 接口端点创建 R53 别名”——但区域是正确的
Posted
技术标签:
【中文标题】Terraform“为区域匹配失败的 VPC 接口端点创建 R53 别名”——但区域是正确的【英文标题】:Terraform "Create R53 Alias for VPC Interface Endpoint Failing on Zone Match" -- But Zone is correct 【发布时间】:2022-01-19 00:44:25 【问题描述】:我正在尝试使用 Terraform v0.13.6
在私有托管区域中创建 Route53 别名记录并指向 VPC 端点 (vpce),但遇到了自然故障:
Error building changeset: InvalidChangeBatch: [Tried to create an alias that targets ssm.us-west-2.amazonaws.com., type A in zone [XXXX], but the alias target name does not lie within the target zone] status code: 400
我正在寻址的区域 [XXXX] 确实是 VPCe 的区域,而不是 DNS 的区域,所以我希望避免这种常见错误。
当我通过控制台或命令行查看 VPCe 时,我在结果中看到 正确 区域(与 [XXXX] 匹配),因此 Terraform 返回字面上告诉我 VPCe 是不在控制台和 CLI 所说的区域中。
当我使用控制台创建别名记录时,它工作正常!
VPCe 位于两个子网中,因此 VPCe 控制台记录中列出了三 (3) 个 DNS 名称(显然是通用记录,每个指定子网都有一个)但 DNS 区域都相同,因此应该不成问题。在代码中,我追踪第 0 条记录,并使用通用端点的名称,因为我希望在失败的情况下跨两个子网进行解析。
相关代码如下。有人对可能发生的事情有任何见解吗?
resource "aws_route53_record" "endpoint_record"
for_each = var.vpce
provider = aws.someprovider
zone_id = aws_route53_zone.private[each.key].zone_id
name = ""
type = "A"
alias
name = each.value.url
zone_id = aws_vpc_endpoint.ssm_endpoint[each.key].dns_entry[0].hosted_zone_id
evaluate_target_health = true
depends_on = [
aws_route53_zone.private,
]
别名调用中的 url 是 ssm.us-west-2.amazonaws.com
类型,如您在错误消息中所见。
有什么想法吗?
【问题讨论】:
【参考方案1】:对于alias
中的name
,我想你会想要使用aws_vpc_endpoint
提供的那个,所以:
alias
name = aws_vpc_endpoint.ssm_endpoint[each.key].dns_entry[0].dns_name
zone_id = aws_vpc_endpoint.ssm_endpoint[each.key].dns_entry[0].hosted_zone_id
evaluate_target_health = true
我不知道each.value.url
的值是多少,但我认为它不正确。
【讨论】:
谢谢,欧文……你说得对。我专注于区域 ID,但问题实际上出在端点的名称上,正如您所指出的,它必须是它的 dns_name。 FWIW each.value.url 是变量映射中的一个条目,因为我认为 name 属性是端点服务的 DNS 名称,但正如您指出的那样,它不是,它是端点本身的 DNS 名称!以上是关于Terraform“为区域匹配失败的 VPC 接口端点创建 R53 别名”——但区域是正确的的主要内容,如果未能解决你的问题,请参考以下文章
在其他 terraform 文件中使用输出 terraform 文件
Terraform 学习总结——Terraform 命令详解
Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结
Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结