Terraform 一个具有两个子网的 EC2 实例
Posted
技术标签:
【中文标题】Terraform 一个具有两个子网的 EC2 实例【英文标题】:Terraform one EC2 instance with two subnets 【发布时间】:2021-05-27 09:50:52 【问题描述】:我需要创建一个 EC2 并将 2 个子网关联到它。
variables.tf
variable "aws_subnet_id_this"
description = "Subnet ID"
default = ["subnet-09df122a4faee8882", "subnet-2fcc756f02ddb4b62"]
main.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”的值不合适:需要字符串。
所以我尝试了这个:
main.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,正确。 我修改了答案。 【参考方案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,而不是实例本身。以上是关于Terraform 一个具有两个子网的 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章
如何在带有 Terraform 的 AWS VPC 中的两个子网之间进行路由?
Terraform AWS subnet_id 列表被视为 ec2 实例的单值字符串