繁体   English   中英

如何在 Terraform 中使用 Azure 可用区的元素

[英]How to use Element for Azure Availability Zones in Terraform

我正在尝试使用 Terraform 元素 Function 设置 Azure 可用区(AAZ),但我两次收到以下错误。 由于有 3 个 AAZ,我想为此使用 Element,因为它会很好地工作,如果我能弄清楚语法或我哪里出错了。 元素将继续循环通过我想要的相同号码集,因为我的模块可能会请求 3 个服务器或 300 个服务器。代码下方是来自 main.tf 的错误:我收到两次错误。

    zones = "${var.avzones}" ? "${element(["1", "2", "3"], "${count.index + 1}")}" : ""
Error: Incorrect attribute value type

  on ..\main.tf line 283, in resource "azurerm_virtual_machine" "vm":
  283:   zones                         = "${var.avzones}" ? "${element(["1", "2", "3"], "${count.index + 1}")}" : ""

Inappropriate value for attribute "zones": list of string required.

任何想法将不胜感激——如果我找到答案,我会回来发布——

干杯,-Sam Kachar

错误消息告诉我们zones参数需要一个字符串列表,但这里给出的表达式似乎返回一个字符串。

看起来您的目标是 select 只是列表中的一个区域,在这种情况下,条件表达式的两个“臂”应该分别返回一个单元素列表和一个空列表:

    zones = var.avzones ? [element(["1", "2", "3"], count.index + 1)] : []

以上假设指定零区域是有效的。 如果没有,您可能需要使用null而不是[]来保留未指定zones参数并接受远程系统选择的默认值,或者您可能需要自己为 select 设置一个合适的默认值。

我找到了答案。

马丁你是对的,这就是错误消息所说的内容,并且将字符串列表获取到 zone 属性结果是一个真正的 PITA。 我尝试了每一种语法变化。 我尝试列出 function。 没有什么。 最终起作用的是Split function。 这是我的代码现在的样子:

zones = "${var.avzones}" ? split("","${element(["1","2","3"], "${count.index}")}") : null

马丁您对我发送 null 而不是“”的另一条评论更有意义,这就是我选择做的。 我还没有测试过。 到目前为止,我只验证了这些区域。 我不敢相信 split 工作时,它可能有点骇人听闻,但它完成了工作。 我确认它确实按照我的意愿构建了所有区域。 每次1到3。 如果 null 不起作用,我会更新我的答案......但现在; 任何与 Azure 可用区并让 Terraform 识别值 1 到 3 的人都使用我在上面发布的代码。 有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM