我想在不同的服务中重用现有的地形安全组模块。
以下是文件夹结构:
├───qa
│ └───services
│ ├───service-1
│ │ main.tf
│ │ outputs.tf
│ │ terraform.tfvars
│ │ variables.tf
│ └───service-2
│ main.tf
│ outputs.tf
│ terraform.tfvars
│ variables.tf
└───modules
│───rds
│───redis
├───sg
└───vpc
模块/sg.tf(:
resource "aws_security_group" "rds" {
name_prefix = "rds_${service_1}_${var.env}"
vpc_id = var.vpc_id
}
resource "aws_security_group_rule" "rds_ingress_rules" {
count = length(var.rds_ingress_rules)
type = "ingress"
from_port = var.rds_ingress_rules[count.index].from_port
to_port = var.rds_ingress_rules[count.index].to_port
protocol = var.rds_ingress_rules[count.index].protocol
cidr_blocks = [var.rds_ingress_rules[count.index].cidr_block]
security_group_id = aws_security_group.rds.id
}
service1/main.tf
module "sg" {
source = "../modules/sg"
---
rds_ingress_rules = var.rds_ingress_rules
---
}
service2/main.tf
module "sg" {
source = "../modules/sg"
---
}
要求只为服务-1创建rds的安全组资源,而不为服务-2创建。
我有办法做到这一点吗?
如果你需要更多信息,请告诉我
您可以根据rds_ingress_rules
变量的长度来配置安全组资源:
resource "aws_security_group" "rds" {
count = length(var.rds_ingress_rules) > 0 ? 1 : 0
name_prefix = "rds_service_1_${var.env}"
vpc_id = var.vpc_id
}
此外,在模块中硬编码名称是一种糟糕的做法,因此对于名称前缀,您可以执行以下操作:
name_prefix = "rds_service_${count.index + 1}_${var.env}"
但这也不是";"最干净";方法