首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform -没有找到匹配的Route53Zone

Terraform -没有找到匹配的Route53Zone
EN

Stack Overflow用户
提问于 2021-06-20 15:43:09
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
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档案:

代码语言:javascript
复制
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
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-21 08:55:41

这似乎是aws静态站点模块的一个问题。在模块的main.tf的第22行中,它执行以下操作:

代码语言:javascript
复制
zone_domain_names = {
      for d in local.all_domains: d => join(".", slice(split(".", d), length(split(".", d)) - 2, length(split(".", d))))
}

在你的例子中,它会产生这样的结果:

代码语言:javascript
复制
local.zone_domain_names = {
  "rozzle.co.uk" = "co.uk"
  "www.rozzle.co.uk" = "co.uk"
}

它尝试用于区域数据块。

代码语言:javascript
复制
data "aws_route53_zone" "zone" {
    for_each = toset(values(local.zone_domain_names))
    name     = "${each.value}."
}

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

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

此外,作为一个快速和肮脏的修补程序,您可以下载aws静态站点代码并从aws静态站点创建一个本地模块,并通过将main.tf第23行中的数字2更改为第3行来修改代码,使其仅用于第三级域:

代码语言:javascript
复制
zone_domain_names = {
      for d in local.all_domains: d => join(".", slice(split(".", d), length(split(".", d)) - 3, length(split(".", d))))
}

注意:这个本地模块将只适用于三级域,而不是二级域。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68057521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档