Terraform v0.13 带有“计数”的条件资源

时间:2021-05-18 09:20:13

标签: 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 {
    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,我错过了几个版本。

任何指针将不胜感激!

谢谢

1 个答案:

答案 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]