Terraform-在AWS安全组中动态创建资源



我想在不同的服务中重用现有的地形安全组模块。

以下是文件夹结构:

├───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}"

但这也不是";"最干净";方法

相关内容

  • 没有找到相关文章

最新更新