【问题标题】:Terraform: Creating multiple instances with Terraform with for_each and mapping security_group_ruleTerraform:使用带有 for_each 和映射 security_group_rule 的 Terraform 创建多个实例
【发布时间】:2020-12-16 22:23:31
【问题描述】:

我有一个场景,我需要创建多个 EC2 实例,它们是集群的一部分。这些主机必须可以在特定端口上相互访问,并且需要附加两个大小为 16GB 和 700GB 的 ebs_volumes。 我的 variable.tf 的片段如下所示:-

variable "instances" {
  default = {
            instance_name = "a"
            tcp_ports = ["53","22","2022","80","443"]
            udp_ports = ["53","67","68","123","161","162","500"]
            "xvdf" = "16"
            "xvdg" = "700"
            }
}

我正在努力让这个映射与我的 TF 脚本一起工作:-

resource "aws_security_group_rule" "tcp_ingress" {
  for_each = {
    for inst in local.instances : inst.tcp_ports => {
      for i in inst: i.tcp_ports => i
  }
  }
  type = "ingress"
  from_port = each.value.tcp_ports
  to_port   = each.value.tcp_ports
  protocol = "tcp"
  cidr_blocks = [ for i in aws_instance.instance: format("%s/32", i.private_ip ) ]
  security_group_id = aws_security_group.ha-sg.id
}

有没有办法可以遍历端口并形成安全组规则。

【问题讨论】:

  • 你能澄清一下你实际使用的是什么吗?在您的 for_each 中,您有 local.instances 这将是一个列表,但您提供的 variable "instances" 不是列表,而是地图。
  • 应该是这样的。 for_each = { for inst in var.instances : inst.tcp_ports => { for i in inst: i.tcp_ports => i } }

标签: terraform terraform-provider-aws terraform0.12+


【解决方案1】:

有没有办法可以遍历端口并形成安全组规则。

由于您的variable "instances"一张地图,要访问tcp_ports,您只需执行以下操作:

var.instances.tcp_ports

然后在for_each中使用它:

resource "aws_security_group_rule" "tcp_ingress" {

  for_each    = toset(var.instances.tcp_ports)

  type        = "ingress"
  from_port   = each.value
  to_port     = each.value
  protocol    = "tcp"
  cidr_blocks = [ for i in aws_instance.instance: format("%s/32", i.private_ip ) ]
  security_group_id = aws_security_group.ha-sg.id
}

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2019-12-16
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多