我正在嘗試從Terraform的物件地圖中創建安全組規則,但有時Terraform會洗掉這些角色,而且是隨機發生。我們使用s3作為后臺,使用dynamodb鎖。
這是我的安全組資源
resource "aws_security_group"/span> "ec2_jumper_sg"/span> {
name = "${var.app_name}-private-sg"
description = "Private EC2 instance的安全組" var.vpc_id
egress {
from_port = 443.
to_port = 443"tcp"/span>
cidr_blocks = [var.vpc_cidr] 。
}
}
這些是用for_each附加到上述安全組創建的規則:
resource "aws_security_group_rule"/span> "ec2_jumper_sg_databases_egress"/span> {
for_each = var.databases.
security_group_id = aws_security_group.ec2_jumper_sg.id
from_port = each.value.port
to_port = each.value.port
source_security_group_id = each.value.securityGroupId
protocol = "tcp"
type = "egress"/span>
}
這是我的變數地圖:
變數 "databases" {
type = map(object({)
id: string
securityGroupId: string
埠: 數字
}))
默認 = {
"db-1"/span>: {
id : "db-1"。
securityGroupId : "sg-000000000"。
埠。5432.
},
"db-2": {
id : "db2",
securityGroupId : "sg-000000000"。
埠。3306.
}
}
}
當規則不存在時,它將創建它們,但是當它們存在時,它將洗掉它們:
- {
- cidr_blocks = []
- description = ""/span>
- from_port = 3306[/span]。
- ipv6_cidr_blocks = [] 。
- prefix_list_ids = []
- 協議 = "tcp"/span>
- security_groups = [.
- "sg-0000000"。
]
- self = false
- to_port = 3306 ""/span>
- from_port = 5432
- ipv6_cidr_blocks = [] 。
- prefix_list_ids = []
- 協議 = "tcp"/span>
- security_groups = [.
- "sg-00000000"。
]
- self = false
- to_port = 5432
為什么會發生這種情況?
uj5u.com熱心網友回復:
你不能混合egress定義在aws_security_group和aws_security_group_rule資源。來自docs:
Terraform目前既提供獨立的安全組規則資源(單一的入口或出口規則),又提供帶有在線定義的入口和出口規則的安全組資源。目前,您不能將帶有在線規則的安全組與任何安全組規則資源一起使用。這樣做將導致規則設定的沖突,并將覆寫規則。
你只能使用其中之一,不能同時使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332532.html
標籤:
上一篇:只有Git名稱和模式
