在 aws_route53_record terraform 资源中使用“计数”

Posted

技术标签:

【中文标题】在 aws_route53_record terraform 资源中使用“计数”【英文标题】:Using "count" in aws_route53_record terrafrom resource 【发布时间】:2020-06-25 13:55:42 【问题描述】:

我开始使用(和学习)terraform,现在,我需要创建多个 DO 液滴并将它们附加到 aws route53 区域,我正在尝试做的事情:

我的 DO terraform 文件:

# Configure the DigitalOcean Provider
provider "digitalocean" 
  token = var.do_token


# Create a new tag
resource "digitalocean_tag" "victor" 
  name = "victor-fee1good22"


resource "digitalocean_droplet" "web" 
  count = 2

  image    = var.do_config["image"]
  name     = "web-$count.index"
  region   = var.do_config["region"]
  size     = var.do_config["size"]
  ssh_keys = [var.public_ssh_key, var.pv_ssh_key]
  tags     = [digitalocean_tag.victor.name]

我的 route53 文件:

provider "aws" 
  version    = "~> 2.0"
  region     = "us-east-1"
  access_key = var.aws_a_key
  secret_key = var.aws_s_key


data "aws_route53_zone" "selected" 
  name = "devops.rebrain.srwx.net"


resource "aws_route53_record" "www" 
  сount = length(digitalocean_droplet.web)

  zone_id = data.aws_route53_zone.selected.zone_id
  name    = "web_$count.index"
  type    = "A"
  ttl     = "300"
  records = [digitalocean_droplet.web[count.index].ipv4_address]

但我总是收到The "count" object can be used only in "resource" and "data" blocks, and only when the "count" argument is set. 错误,我做错了什么?

谢谢!

更新:

【问题讨论】:

这是一个完整的minimal reproducible example 吗?一目了然,这不应该导致该问题,因此看起来您可能遗漏了一些东西。 是的,看起来它是完整的最小的、可重现的示例,我只是隐藏了包含敏感数据的 variables.tf 文件 :) 不应该看起来像count = length(digitalocean_droplet.web.*.id)吗?不管。这是一条奇怪的错误消息。 @ptierno 谢谢,但也尝试了这个,结果相同。顺便说一句,我已经添加了我的任期截图和详细信息 digitalocean_droplet.*.web 仍然不是有效的语法。 【参考方案1】:

我已经解决了这个问题 - 添加 сount = 2 而不是 сount = length(digitalocean_droplet.web)

它可以工作,但最好使用动态变量而不是常量count。 :)

【讨论】:

【参考方案2】:

您想获取尚未创建的服务数量。 Terraform 无法做到这一点。

我认为最简单的方法是使用带有液滴数量的 common var。

resource "digitalocean_droplet" "test" 
  count = var.number_of_vps
  image  = "ubuntu-18-04-x64"
  name   = "test-1"
  region = data.digitalocean_regions.available.regions[0].slug
  size   = "s-1vcpu-1gb"


resource "aws_route53_record" "test" 
  count = var.number_of_vps
  zone_id = data.aws_route53_zone.primary.zone_id
  name    = "$local.login-$count.index.$data.aws_route53_zone.primary.name"
  type    = "A"
  ttl     = "300"
  records = [digitalocean_droplet.test[count.index].ipv4_address]

【讨论】:

以上是关于在 aws_route53_record terraform 资源中使用“计数”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我使用 terraform 资源 aws_route53_record 创建的 Route53 记录无法公开解析?

尝试创建 aws_route53_record 以指向负载均衡器,但使用 terraform 不断出现错误

Terraform 设置 Route53 NS 记录永远不会完成

如何创建到 ALB 的 Route 53 记录? (AWS)

Cuda learn record one

Terraform 与 A​​PI-Gateway、Route53 和 SSL 认证相互依赖问题