0

ここでは、既存の terraform スクリプトに terraform モジュールを実装しています。security_group_rules の引数を操作しているときに問題に直面しています。

問題は、aws_security_group_ruleに、互いに互換性のないsource_security_group_idcidr_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_idcidr_blockの両方で機能するより柔軟なモジュールを作成するのを手伝ってくれる人がいれば、それは素晴らしいことです。

4

1 に答える 1