我的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。
答案 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
(如果针对您的情况进行了更改),请告诉我这是否无效。
问候 苏达喀尔