Terraform - 找不到匹配的 Route53Zone

Terraform - no matching Route53Zone found

我正在尝试通过 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
}

我不知道这是怎么回事。希望有人能帮忙!

这似乎是 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 创建一个本地模块,然后通过更改main.tf:

第 23 行的第 2 到第 3
zone_domain_names = {
      for d in local.all_domains: d => join(".", slice(split(".", d), length(split(".", d)) - 3, length(split(".", d))))
}

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