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 别名”——但区域是正确的的主要内容,如果未能解决你的问题,请参考以下文章