Amazon web services terraform aws ec2实例ip地址分配

Amazon web services terraform aws ec2实例ip地址分配,amazon-web-services,amazon-ec2,terraform,terraform-provider-aws,Amazon Web Services,Amazon Ec2,Terraform,Terraform Provider Aws,我对terraform和aws有一个典型的问题。我必须通过terraform部署26个实例,但它们都应该以递增的顺序拥有ip地址 比如说 instance 1: 0.0.0.1 instance 2: 0.0.0.2 instance 3: 0.0.0.3 是否有可能以某种方式在地形中实现呢?下面,您可以找到一个示例说明如何实现。它只为ip范围从172.31.64.100到172.31.64.104的实例创建(不能使用前几个数字,因为它们是AWS保留的) 您必须调整子网id和初始IP范围,我在

我对terraform和aws有一个典型的问题。我必须通过terraform部署26个实例,但它们都应该以递增的顺序拥有ip地址

比如说

instance 1: 0.0.0.1
instance 2: 0.0.0.2
instance 3: 0.0.0.3

是否有可能以某种方式在地形中实现呢?

下面,您可以找到一个示例说明如何实现。它只为ip范围从
172.31.64.100
172.31.64.104
的实例创建(不能使用前几个数字,因为它们是AWS保留的)

您必须调整子网id和初始IP范围,我在示例中使用了该范围。您还必须确保不使用这些IP地址。AWS已经可以在您的VPC、现有实例或其他服务中使用它们进行负载平衡。如果此范围内的任何IP地址已被占用,它将失败

locals {
  ip_range = [for val in range(100, 104): "172.31.64.${val}"]
}

resource "aws_network_interface" "foo" {

  for_each    = toset(local.ip_range)

  subnet_id   = "subnet-b64b8988"
  
  private_ips = [each.key]

  tags = {
    Name = "primary_network_interface"
  }
}

resource "aws_instance" "web" {

  for_each      = toset(local.ip_range)

  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"
  
  network_interface {
    network_interface_id = aws_network_interface.foo[each.key].id
    device_index         = 0
  }  

  tags = {
    Name = "HelloWorld"
  }
}

@MarkB您完全可以选择实例或ENI的私有IP地址。但是您的评论的其他部分很有用,关于子网/可用性区域的观点在这里特别重要。