ここでは、既存の terraform スクリプトに terraform モジュールを実装しています。security_group_rules の引数を操作しているときに問題に直面しています。
問題は、aws_security_group_ruleに、互いに互換性のないsource_security_group_idとcidr_blockという 2 つの引数があることです。つまり、そのうちの 1 つを使用すると、別のものが使用できなくなります。
これは私のモジュールです。
main.tf
resource "aws_security_group_rule" "arvn" {
count = length(var.security_group_rules)
type = var.security_group_rules[count.index].type
from_port = var.security_group_rules[count.index].from_port
to_port = var.security_group_rules[count.index].to_port
protocol = var.security_group_rules[count.index].protocol
cidr_blocks = var.security_group_rules[count.index].cidr_block
description = var.security_group_rules[count.index].description
security_group_id = var.security_group_id
}
変数.tf
variable "security_group_id" {
type = string
}
variable "security_group_rules" {
type = list(object({
type = string
from_port = number
to_port = number
protocol = string
cidr_block = list(string)
description = string
}))
}
利用方法
sg.tf
module "security_group_ecsInstance" {
source = "./modules/security_group"
vpc_id = aws_vpc.arvn.id
name = "${local.name}-ecsInstance"
}
module "sg_rules_instance" {
source = "./modules/security_group_rules"
security_group_id = module.security_group_instance.id
security_group_rules = [
{ type = "ingress", from_port = 22, to_port = 22, protocol = "tcp", cidr_block = [var.vpc_cidr], description = "ssh" },
{ type = "egress", from_port = 0, to_port = 65535, protocol = "-1", cidr_block = ["0.0.0.0/0"], description = "" },
{ type = "ingress", from_port = 0, to_port = 65535, protocol = "tcp", cidr_block = [module.security_group_alb.id], description = "alb" }
]
}
この例では、最初の 2 つのルールが作成され、最後のルールは無効な cidr ブロックが原因で失敗しています。
私はここで問題を認識していますが、source_security_group_idとcidr_blockの両方で機能するより柔軟なモジュールを作成するのを手伝ってくれる人がいれば、それは素晴らしいことです。