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