【问题标题】:Terraform one EC2 instance with two subnetsTerraform 一个具有两个子网的 EC2 实例
【发布时间】:2021-05-27 09:50:52
【问题描述】:

我需要创建一个 EC2 并将 2 个子网关联到它。

variables.tf

variable "aws_subnet_id_this" {
  description = "Subnet ID"
  default = ["subnet-09df122a4faee8882", "subnet-2fcc756f02ddb4b62"]
}

ma​​in.tf

resource "aws_instance" "test" {
  ami                         = var.ami_id
  instance_type               = var.ec2_instance_type
  subnet_id                   = var.aws_subnet_id_this
  key_name                    = var.pki_name
  vpc_security_group_ids      = [aws_security_group.Allow_SSH_in.id]
}

错误:

错误:属性值类型不正确

在 main_count_data.tf 第 57 行,在资源“aws_instance”“test”中: 57:subnet_id = var.aws_subnet_id_this |---------------- | var.aws_subnet_id_eks 是具有 2 个元素的元组

属性“subnet_id”的值不合适:需要字符串。

所以我尝试了这个:

ma​​in.tf

resource "aws_instance" "prueba" {
  ami                         = var.ami_id
  instance_type               = var.ec2_instance_type
  #subnet_id                   = var.aws_subnet_id_this
  count = 2
  subnet_id = "${element(var.aws_subnet_id_this, count.index)}"
  key_name                    = var.pki_name
  vpc_security_group_ids      = [aws_security_group.Allow_SSH_in.id]
  }
}

但是这最后一部分代码尝试使用第二个子网创建一个新的 EC2 实例,这并不是我期望的困难。

总结一下:我需要 1 个 EC2,其中包含 variables.tf 文件中定义的 2 个子网。

我该怎么做?

【问题讨论】:

  • 所以您希望 1 个实例具有两个 NIC?其中一个 nic 应该与实例位于不同的子网中?
  • @Marcin,正确。
  • 我修改了答案。

标签: amazon-web-services amazon-ec2 terraform


【解决方案1】:

下面是一个示例,说明如何在不同的子网中创建一个具有两个 NIC 的实例。 NIC 必须在同一个 AZ 中。所以实例可以在不同的子网中有两个网卡,只要它们在同一个 AZ:

variable "aws_subnet_id_this" {
  description = "Subnet ID"
  default = ["subnet-09df122a4faee8882", "subnet-2fcc756f02ddb4b62"]
}

resource "aws_network_interface" "nic1" {
  subnet_id       = var.aws_subnet_id_this[0]
}

resource "aws_network_interface" "nic2" {
  subnet_id       = var.aws_subnet_id_this[1]
}


resource "aws_instance" "prueba" {
  ami                         = var.ami_id
  instance_type               = var.ec2_instance_type
  key_name                    = var.pki_name

  network_interface {
      device_index = 0
      network_interface_id = aws_network_interface.nic1.id
  }
        
  network_interface {
      device_index = 1
      network_interface_id = aws_network_interface.nic2.id
  }  
  
}

【讨论】:

  • 好吧,你可以有一个有 2 个网卡的服务器,每个网卡都在自己的子网上。常见案例示例?充当 2 个子网之间的路由器的服务器。您启用 ip_forwarding 并完成。 (我不想要一个强硬的路由器,我只需要我的实例能够在不同的子网上交谈。
  • @pedro 是的。 Nic 可以在不同的子网中。但是实例仍然只有一个。请更新您的问题,以明确您要求的是 nics,而不是实例。或者有两个 nics 的实例。
  • 谢谢您,先生,您的代码就像一个魅力!我必须处理的唯一一件事——但它成功了——就是增加了一个 SG。因此必须将:“security_groups = [aws_security_group.Allow_SSH_in.id]”添加到“aws_network_interface”资源中,然后稍后在“network_interface”参数子块中引用它。
  • @pedro 没问题。在这种情况下,SG 用于 NIC,而不是实例本身。
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 2020-05-03
  • 2020-11-30
  • 2020-06-13
  • 2019-06-16
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多