有条件地解析条件资源的属性失败

时间:2018-01-29 07:57:07

标签: terraform

我的AWS terraform配置出现问题,希望有人能帮助我。

我有一个用于创建RDS集群的生产变量:

resource "aws_rds_cluster" "cluster" {
  count = "${var.production ? 1 : 0}"
  ...
}

很明显,如果 production = true ,资源会被处理掉。在另一个资源中,我想引用此集群的端点属性,如果production设置为true。如果没有,我想使用另一个变量:

module "ecs" {
  aws_ecs_taskdefinition-environmentVariable-list = <<EOF
[
  { "name" : "SomeName", "value" : "${var.production ? aws_rds_cluster.cluster.endpoint : var.ENV_DATABASE_HOST}:3306" },
]
EOF
}

我遇到的问题是,当生产错误时,就好像terraform试图解析&#39; aws_rds_cluster.cluster.endpoint &#39;,甚至虽然这不是应该使用的价值。这显然是失败的,因为在生产中资源有0:

  

module.ecs.var.aws_ecs_taskdefinition-environmentVariable列表:   资源&#39; aws_rds_cluster.cluster&#39;找不到变量   &#39; aws_rds_cluster.cluster.endpoint&#39;

我在安全组和该RDS集群的securityGroupRule之间的关系中遇到了同样的问题。即使规则的计数设置为0,似乎terraform试图解析它引用的组的id,这显然不能解决,因为该组的计数也为0。

1 个答案:

答案 0 :(得分:0)

我遇到了使用splat语法的类似问题。但是,我必须分配一个变量(而不是列表)。我确定它在这里也能正常工作。

resource "aws_rds_cluster" "cluster" {
  count = "${var.production ? 1 : 0}"
  ...
}

module "ecs" {
xyz_endpoint = "${join("", aws_rds_cluster.cluster.endpoint)}"
.............
}

Statement #1:
xyz_endpoint = "${join("", aws_rds_cluster.cluster.endpoint)}"
Statement #2:
xyz_endpoint = ${var.production ? aws_rds_cluster.cluster.endpoint : ""}

以上两个语句都产生相同的结果,但是当未创建资源“ aws_rds_cluster.cluster”时,语句2会产生错误。

为什么会这样?

Slats cause attributes to be accessed lazily

(如果针对您的情况进行了更改),请告诉我这是否无效。

问候 苏达喀尔