vpc_zone_identifier应该是一个列表

时间:2017-08-29 14:39:20

标签: terraform

我没有理解这个问题。在做一个terraform计划时,它抱怨值应该是一个列表。很公平。让我们逐步分解。

错误

1 error(s) occurred:

* module.instance-layer.aws_autoscaling_group.mariadb-asg: vpc_zone_identifier: should be a list

设置

在另一个模块中使用terraform创建VPC和子网。 该模块的输出提供以下内容:

"subnets_private": {
                    "sensitive": false,
                    "type": "string",
                    "value": "subnet-1234aec7,subnet-1234c8a7"
                },

在我的main.tf中,我使用所述模块的输出将其输入到我的模块的变量中,该模块负责自动缩放组:

  subnets_private                         = "${module.static-layer.subnets_private}"

这在模块中用于要求变量:

variable "subnets_private" {}

这是我配置vpc_zone_identifier的部分:

尝试:拆分

resource "aws_autoscaling_group" "mariadb-asg" {
  vpc_zone_identifier  = "${split(",",var.subnets_private)}"

尝试:列出

resource "aws_autoscaling_group" "mariadb-asg" {
  vpc_zone_identifier  = "${list(split(",",var.subnets_private))}"

问题

以上尝试使用列表(拆分(理论上应该工作。由于terraform抱怨但不打印实际值,因此很难调试。任何建议都表示赞赏。

手动填写值。

2 个答案:

答案 0 :(得分:3)

在仔细阅读文档时,看来拆分不会随后清理干净的元素,然后可以将其放入列表中。 他们建议在字符串周围包括括号([“xxxxxxx”]),以便terraform将其作为列表选中。

如果我的逻辑是正确的意思 subnet-1234aec7,subnet-1234c8a7输出为subnet-1234aec7","subnet-1234c8a7(注意引号),假设split命令的分隔符周围的引号与此无关。

这是工作解决方案

vpc_zone_identifier  = ["${split(",",var.subnets_private)}"]

答案 1 :(得分:0)

对于以下帮助:

vpc_zone_identifier  = ["${data.aws_subnet_ids.all.ids}"]