Terraform v0.13有条件资源,带有;计数“;
基于评估并用于影响资源计数的变量创建条件资源时出现问题。问题是,有条件地创建的资源随后会在代码中的其他位置引用。例如,此安全组:Terraform v0.13有条件资源,带有;计数“;,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,基于评估并用于影响资源计数的变量创建条件资源时出现问题。问题是,有条件地创建的资源随后会在代码中的其他位置引用。例如,此安全组: resource "aws_security_group" "mygroup" { count = var.deploy_mgroup ? 1 : 0 name = "mygroup-sg" vpc_id = aws_vpc.main.id ingress
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"]
}
}
因此,在本例中,我认识到资源使用计数必须被引用为一个列表,如果变量deploy\u mgroup
设置为true
,则该列表工作正常。如果设置为false,则显然不会创建具有计数的资源,因此第二个组引用的列表aws\u security\u group.mygroup[0].id
为空,这会引发错误
我不确定我需要在这里做什么,也许这只是一个糟糕的方法,我应该使用更好的方法?我已经有一段时间没有使用Terraform了,我错过了一些版本
任何提示都将不胜感激
谢谢我已经读了你的帖子,没有时间尝试我要建议的解决方案。出于这个原因:对不起!:) 我建议你改变:
security_groups = [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id]
security_groups = [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id]
到
勘误表更正: 我建议你改变:
security_groups = [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id]
security_groups = [aws_security_group.mygroup[0].id,aws_security_group.anothergroup.id]
到
这也将消除aws\u security\u group.anothergroup.id。不确定这是否是OP想要的。你是对的@Marcin,我很快就会编辑我的帖子。太好了,谢谢。这确实完成了我想要的,从你的第一个回答开始,我实际上实现了你已经做的编辑(感谢你最初的答案!),因为这让我走上了正确的道路。在地形中,这通常被认为是“正常”的做法吗?在我看来,一个好的做法是一个优雅的解决方案,正如预期的那样有效