根据已评估并用于影响资源计数的变量创建条件资源时遇到问题。问题是有条件创建的资源随后会在代码的其他地方被引用。例如,这个安全组:
resource "aws_security_group" "mygroup" {
count = var.deploy_mgroup ? 1 : 0
name = "mygroup-sg"
vpc_id = aws_vpc.main.id
ingress {
description = "Allow something."
from_port = 8111
to_port = 8111
protocol = "tcp"
security_groups = [aws_security_group.anothergroup.id]
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
然后在另一个组中引用:
resource "aws_security_group" "rds" {
name = "rds-sg"
vpc_id = aws_vpc.main.id
ingress {
description = "Allow PGSQL"
from_port = 5432
to_port = 5432
protocol = "tcp"
cidr_blocks = [var.ingress_src_ip]
security_groups = [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
所以在这种情况下,我认识到使用 count 的资源必须作为列表引用,如果变量 deploy_mgroup
设置为 true
,它可以正常工作。如果设置为false,那么有count的资源显然永远不会被创建,所以第二组引用的列表aws_security_group.mygroup[0].id
是空的,这会抛出一个错误。
我不确定我需要在这里做什么,也许这只是一种糟糕的方法,我应该使用更好的方法吗?我有一段时间没有使用 Terraform,我错过了几个版本。
任何指针将不胜感激!
谢谢
答案 0 :(得分:2)
我匆忙阅读了您的帖子,我没有时间尝试我要建议的解决方案。为此:对不起! :)
我建议你改变:
security_groups = [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id]
到
security_groups = var.deploy_mgroup ? [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id] : null
我建议你改变:
security_groups = [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id]
到
security_groups =
var.deploy_mgroup
? [aws_security_group.mygroup[0].id, aws_security_group.anothergroup.id]
: [aws_security_group.anothergroup.id]