Terraform - 找不到匹配的 Route53Zone

Posted

技术标签:

【中文标题】Terraform - 找不到匹配的 Route53Zone【英文标题】:Terraform - no matching Route53Zone found 【发布时间】:2021-09-04 12:16:05 【问题描述】:

我正在尝试通过 Terraform 部署 NextJS 应用程序,但我似乎无法让 Route53 区域工作。我已经通过 Route53 注册了域,并使用该域设置了一个托管区域。当使用 CLI 命令aws route53 list-hosted-zones 时,我可以成功地看到那里的托管区域。但是,每当尝试运行 terraform plan 时,我都会遇到这个问题:

Error: no matching Route53Zone found

  on .terraform/modules/aws_static_site/main.tf line 1, in data "aws_route53_zone" "zone":
   1: data "aws_route53_zone" "zone" 

这是我的 tf 文件:

provider "aws" 
  region  = "eu-west-1"
  profile = "rozzle-static-site"


module "aws_static_site" 
  source  = "dvargas92495/static-site/aws"
  version = "1.2.0"

  domain = "rozzle.co.uk"
  secret = "REMOVED"
  tags = 
    Application = "rozzle-static-site"
  


provider "github" 
  owner = "dvargas92495"


resource "github_actions_secret" "deploy_aws_access_key" 
  repository      = "static-site-demo"
  secret_name     = "DEPLOY_AWS_ACCESS_KEY_ID"
  plaintext_value = module.aws_static_site.deploy-id


resource "github_actions_secret" "deploy_aws_access_secret" 
  repository      = "static-site-demo"
  secret_name     = "DEPLOY_AWS_SECRET_ACCESS_KEY"
  plaintext_value = module.aws_static_site.deploy-secret


我无法弄清楚这是如何工作的。希望有人能帮忙!

【问题讨论】:

你的数据块是什么样子的? 什么数据块?模块中的数据块? 正确,错误是引用一个数据块,该数据块是什么样的以及它正在使用的任何相关输入。 data "aws_route53_zone" "zone" name = "$local.zone_domain_name." private_zone = false zone_domain_name 本地:zone_domain_name = join(".", slice(local.domain_parts, local.domain_length - 2, local.domain_length)) 【参考方案1】:

这似乎是 aws-static-site 模块的问题。在模块的 main.tf 的第 22 行,它是这样做的:

zone_domain_names = 
      for d in local.all_domains: d => join(".", slice(split(".", d), length(split(".", d)) - 2, length(split(".", d))))

在你的情况下,它会产生这个:

local.zone_domain_names = 
  "rozzle.co.uk" = "co.uk"
  "www.rozzle.co.uk" = "co.uk"

它试图用于区域数据块。

data "aws_route53_zone" "zone" 
    for_each = toset(values(local.zone_domain_names))
    name     = "$each.value."

这自然会失败,因为您不控制“co.uk”域。

这个模块似乎只处理二级域,而不是三级域。我建议为此模块打开一个错误报告。


另外,作为一个快速而肮脏的修复,您可以下载 aws-static-site 代码并从 aws-static-site 创建一个本地模块,然后通过更改数字 2 修改代码以仅适用于第三级域到 main.tf 第 23 行的第 3 号:

zone_domain_names = 
      for d in local.all_domains: d => join(".", slice(split(".", d), length(split(".", d)) - 3, length(split(".", d))))

注意。然后,此本地模块将仅适用于三级域,而不适用于二级域。

【讨论】:

谢谢!所以这确实是一个问题。我遇到的另一个问题是我的托管区域名称服务器与 Route53 域中的不同。更新它也有助于解决一些问题。

以上是关于Terraform - 找不到匹配的 Route53Zone的主要内容,如果未能解决你的问题,请参考以下文章

如果找不到要从中恢复的快照,如何在 terraform 中创建 ebs 卷

Terraform,AWS RDS aurora mysql serverless 异常“找不到源集群”

Terraform init │ 错误:配置 S3 后端时出错:找不到 S3 后端的有效凭证源

exec:“powershell”:在 Terraform 中运行 local-exec 时在 $PATH 中找不到可执行文件

创建 azurerm_data_protection_backup_vault 时,Terraform 返回错误“在命名空间中找不到资源类型”

使用 Terraform 启动 CloudFormationTemplate