【问题标题】:terraform replace() - Invalid value for "str" parameter: string requiredterraform replace() - “str”参数的值无效:需要字符串
【发布时间】:2020-03-31 23:50:17
【问题描述】:

尝试升级到 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() 吗?

【问题讨论】:

    标签: terraform terraform0.12+


    【解决方案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 地址。

    【讨论】:

    • 引用 hashcorp terraform-aws-modules/terraform-aws-ec2-instance 代码存储库,我看到 variable.tf private_ip 没有定义字符串。自 0.12 更新以来,他们在 private_ip 下添加了 line type = string。现在我需要弄清楚如何修复我的远程状态文件以反映这种变化。将其视为元组?知道怎么做吗?
    • 您正在引用模块的输出,其中private_ip 是一个列表,您可以看到here。那么module.this_mybox.private_ip[0][0] 应该或者你已经尝试过吗?
    • 您好!我一开始一定犯了一个错误。 module.this_mybox.private_ip[0][0] 最终工作了!谢谢 Nicoring!
    • 乐于助人:)
    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2021-11-02
    • 2021-06-23
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多