【发布时间】:2022-02-11 12:31:05
【问题描述】:
我正在尝试创建多个可访问多个子网的 ec2 实例。
我发现了单独做这些事情的问题和答案,但没有合并。
首先,我创建一个私有子网和一个公共子网,然后设置一个本地来存储创建后的 ID:
locals {
subnets = [ aws_subnet.public_subnet.id, aws_subnet.private_subnet.id ]
}
接下来,我可以使用for_each 和以下内容在private_subnet 中创建可变数量的服务器:
servers = [ "s1", "s2" ]
resource "aws_instance" "system" {
for_each = var.servers
ami = var.aws_ami
instance_type = var.instance_type
#subnet_id = aws_subnet.private_subnet.id
count = 2
subnet_id = element(local.subs, count.index)
}
我想要的是,服务器可以访问两个子网(据我所知,它不存在,但相当于subnet_ids = [aws_subnet.public_subnet.id, aws_subnet.private_subnet.id])。
我通过创建两个 NIC (Terraform one EC2 instance with two subnets) 找到了一个适用于特定实例的不错答案,但是我需要这样做 var.servers 次,因此很难用我当前的 aws_instance 硬编码 var.servers * 2 NIC设置(我在组合 for_each 和 count 时绊倒了)。
有人可以指点我正确的方向吗?
【问题讨论】:
-
你的问题不清楚。单个子网中的服务器可以访问同一 VPC 中的所有子网。那么你到底想做什么呢?
-
在一个子网中,我有两个实例。我希望一个实例可以从 Internet 入站访问(使用 Internet 网关),而另一个实例只能具有出站 Internet 访问权限(使用 nat 网关)。我认为最好的方法是拥有一个公共和私有子网 - 有没有更好的方法?
-
没错,所以将 s1 放在公有子网中,将 s2 放在私有子网中。所以你的问题是关于那个?
-
感谢 Marcin,我理解理论并且可以在控制台 (docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html) 中“手动”完成,但尝试使用 Terraform 自动化该过程。我想创建可变数量的 ec2 实例,它们在公共子网和私有子网中都有 NIC。
-
为什么每个实例需要两个 NIC?您的描述并未表明需要两个 NIC。两个实例,每个实例一个 NIC,应该足够了。
标签: amazon-ec2 terraform subnet