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,我很快就会编辑我的帖子。太好了,谢谢。这确实完成了我想要的,从你的第一个回答开始,我实际上实现了你已经做的编辑(感谢你最初的答案!),因为这让我走上了正确的道路。在地形中,这通常被认为是“正常”的做法吗?在我看来,一个好的做法是一个优雅的解决方案,正如预期的那样有效