terraform replace()-“ str”参数的值无效:需要字符串

时间:2019-12-07 02:06:11

标签: terraform terraform0.12+

当尝试升级到Terraform 0.12时,出现以下错误:

Error: Invalid function argument

  on ../../../../../modules/aws/mybox/main.tf line 85, in resource "aws_route53_record" "this":
  85:   name = "ip-${replace(module.this_mybox.private_ip[0], ".", "-")}"
    |----------------
    | module.this_mybox.private_ip[0] is tuple with 1 element

Invalid value for "str" parameter: string required.

看着下面的自定义模块,我似乎无法在字符串中使用replace()函数...

resource "aws_route53_record" "this" {
  name = "ip-${replace(module.this_mybox.private_ip[0], ".", "-")}"
  type = "A"
  zone_id = "${var.dns_zone_id}"
  records = "${module.this_mybox.private_ip[0]}"
  ttl = "600"
}

该模块的目标是根据自定义参数启动EC2。除此之外,还有一些动人的部分,包括添加私人dns记录。我已经基于this_mybox.private_ip [0]对其进行了命名。在Terraform 0.11.14中,它运行良好;但由于这个原因,我在升级上遇到了障碍。

在aws_route53_record名称中是否还有另一种使用replace()的方法?

1 个答案:

答案 0 :(得分:1)

错误消息指出module.this_mybox.private_ip[0]是一个元组,这就是replace失败的原因。此值也在records = "${module.this_mybox.private_ip[0]}"中使用,它需要一个列表。我们无法在您的问题中看到module.this_mybox.private_ip[0]的值,但是基于错误消息,我建议使用module.this_mybox.private_ip[0][0]访问元组中的IP地址。