繁体   English   中英

Terraform:从AWS su.net获取下一个IP地址

[英]Terraform: get next IP address from AWS subnet

这似乎是一个显而易见的问题,但我没有找到答案。
使用 Terraform (v1.3.5) 并给定私有AWS su.net(由aws_su.net定义),如何在 su.net 中获取下一个可用的 IP 地址?

我确定我只是看错了问题。 我期望一种资源类型会采用 su.net-id 并返回 IP 地址,但找不到匹配的地址。 我也在寻找关于这个问题的教程。 许多教程都谈到分配 EIP,但那是针对公共 su.net 的。 我需要在私有 su.net 中分配多个实例,并且需要为每个实例分配地址。

当然,我的下一个问题是:如何在一组 su.net 之间请求 IP,并在 su.net 之间均匀分配。 但这可能需要另一个帖子。

编辑#1:回应@Marcin 和@MattBlaha 的问题。 我需要 IP 地址来满足创建实例所需的 ENI 的要求(请参阅此处的文档)。 我已经从文档中复制了示例代码。 请注意,创建 ENI 需要“private_ips”地址。 创建实例需要 ENI:

resource "aws_subnet" "my_subnet" {
  vpc_id            = aws_vpc.my_vpc.id
  cidr_block        = "172.16.10.0/24"
  availability_zone = "us-west-2a"

  tags = {
    Name = "tf-example"
  }
}

resource "aws_network_interface" "foo" {
  subnet_id   = aws_subnet.my_subnet.id
  private_ips = ["172.16.10.100"]

  tags = {
    Name = "primary_network_interface"
  }
}

resource "aws_instance" "foo" {
  ami           = "ami-005e54dee72cc1d00" # us-west-2
  instance_type = "t2.micro"

  network_interface {
    network_interface_id = aws_network_interface.foo.id
    device_index         = 0
  }
}

有没有办法在不指定 IP 的情况下创建 ENI?

TF 甚至 AWS API 都没有这样的功能。您必须实施自己的自定义解决方案才能从给定的 su.net 获得“下一个免费的 IP 地址”。 这将是一个变化,因为你可以在 su.net 中拥有一个预先存在的资源,所以你必须先获得它们的 IP 地址,然后才能找到“下一个”或“空闲”的资源。

自定义解决方案可以作为外部数据源以您选择的编程语言实现,例如 bash 脚本、python。

非常感谢@Manchin 的澄清。

我现在相信我看错了问题,而且我也相信文档在这个问题上不够清楚。 文档提供了一个示例,其中使用用于创建实例的 static IP 地址(上面显示的示例)创建专用 ENI 资源。 但是,实际上不需要专用的 ENI 资源块。 aws_instance资源的属性列表允许直接 su.net 分配。 我认为这将是一个主要用例,并且应该在文档中有一个示例,但无论如何我都错过了它。

相反,可以直接在aws_instance资源块中指定 su.net。 这使编码人员不必直接分配 IP 地址,并允许从可用的 su.net 池中选择一个。 我确定某处创建了 ENI,但我不再需要参与其中。

这是解决原始查询的示例代码:

resource "aws_subnet" "my_subnet" {
  vpc_id            = aws_vpc.my_vpc.id
  cidr_block        = "172.16.10.0/24"
  availability_zone = "us-west-2a"
}

resource "aws_instance" "foo" {
  ami           = "ami-005e54dee72cc1d00" # us-west-2
  instance_type = "t2.micro"
  subnet_id   = aws_subnet.my_subnet.id
  <snip>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM