Terraform v0.13 条件资源 "count"

Terraform v0.13 conditional resources with "count"

根据评估并用于影响资源计数的变量创建条件资源时出现问题。问题是有条件创建的资源随后在代码的其他地方被引用。例如,这个安全组:

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_mgroup 设置为 true,则该列表可以正常工作。如果它被设置为false,有计数的资源显然永远不会被创建,所以第二组引用的列表aws_security_group.mygroup[0].id是空的,这会抛出一个错误。

我不确定我需要在这里做什么,也许这只是一个糟糕的方法,我应该使用更好的方法?我已经有一段时间没有使用 Terraform 了,我错过了几个版本。

如有指点,将不胜感激!

谢谢

我匆匆阅读了您的 post,但没有时间尝试我将建议的解决方案。出于这个原因:对不起! :)

我建议你改:

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]