Terraform 查找跨子网可用的 IP 地址
Terraform Finding IP address available across subnets
我们一次性配置了相当大的一组服务器(每个环境每个部署 57 个)。我们每个子网获得的 IP 地址是 32 个,所以每个 AWS 账户总共有 96 个 IP,我想有效地利用它。
- 我们正在使用此元素跨子网使用 IP 轮换(split(",",local.ec2_subnet),count.index)
- 说是因为还是随机终止实例。在 96 个 IP 中,我们留下了 57 个 IP,但并未均匀分布在子网中。
子网 1a :7
子网 1b:25
子网 1c :25
- 现在,当我尝试提供下一组时。 Terraform 因子网中 IP 地址不可用的错误而失败。它是轮流分配的。 (没有来自 AWS 的反馈)
- 有没有更好的方法来了解具有可用 IP 地址的子网并相应地分配它?
@ydaetskcoR 添加重新制作代码:
3 种类型的服务器:只需创建下面提到的 1+8+48=57 个 EC2。
resource "aws_instance" "gs_instance" {
count = 1
subnet_id = element(split(",",local.ec2_subnet),2)
. . .
}
resource "aws_instance" "Head_instance" {
count = 8
subnet_id = element(split(",",local.ec2_subnet),2)
. . .
}
resource "aws_instance" "compute_instance" {
count = 48
subnet_id = element(split(",",local.ec2_subnet),2)
. . .
}
假设分布如下所述table。并根据它们所在的子网仅终止其中的几个。这样您就可以获得可用 IP 地址的数量
Subnet-1a(32) Subnet-1b(32) Subnet-1c(32)
provision 32-19(used)=13 32-19(used)=13 32-19(used)=13
Termination 6=(available 7) 12=(available 25) 12=(available 25)
现在,如果我提供下一个 57 个节点,上面的 IP 地址可用性,它会在 7 个 EC2 之后为 subnet-1a 失败(12 将因为 IP 地址不可用而失败,但实际上在 3 个子网中有 57 个 Ip地址可用。希望这些信息足以复制。
也许首先尝试使用 'available-ip-address-count' 过滤器通过数据源 (aws_subnet_ids) 动态获取适当的子网,然后将该子网的 ID 传递到供应模块。
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnet_ids
https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html
我们一次性配置了相当大的一组服务器(每个环境每个部署 57 个)。我们每个子网获得的 IP 地址是 32 个,所以每个 AWS 账户总共有 96 个 IP,我想有效地利用它。
- 我们正在使用此元素跨子网使用 IP 轮换(split(",",local.ec2_subnet),count.index)
- 说是因为还是随机终止实例。在 96 个 IP 中,我们留下了 57 个 IP,但并未均匀分布在子网中。 子网 1a :7 子网 1b:25 子网 1c :25
- 现在,当我尝试提供下一组时。 Terraform 因子网中 IP 地址不可用的错误而失败。它是轮流分配的。 (没有来自 AWS 的反馈)
- 有没有更好的方法来了解具有可用 IP 地址的子网并相应地分配它?
@ydaetskcoR 添加重新制作代码: 3 种类型的服务器:只需创建下面提到的 1+8+48=57 个 EC2。
resource "aws_instance" "gs_instance" {
count = 1
subnet_id = element(split(",",local.ec2_subnet),2)
. . .
}
resource "aws_instance" "Head_instance" {
count = 8
subnet_id = element(split(",",local.ec2_subnet),2)
. . .
}
resource "aws_instance" "compute_instance" {
count = 48
subnet_id = element(split(",",local.ec2_subnet),2)
. . .
}
假设分布如下所述table。并根据它们所在的子网仅终止其中的几个。这样您就可以获得可用 IP 地址的数量
Subnet-1a(32) Subnet-1b(32) Subnet-1c(32)
provision 32-19(used)=13 32-19(used)=13 32-19(used)=13
Termination 6=(available 7) 12=(available 25) 12=(available 25)
现在,如果我提供下一个 57 个节点,上面的 IP 地址可用性,它会在 7 个 EC2 之后为 subnet-1a 失败(12 将因为 IP 地址不可用而失败,但实际上在 3 个子网中有 57 个 Ip地址可用。希望这些信息足以复制。
也许首先尝试使用 'available-ip-address-count' 过滤器通过数据源 (aws_subnet_ids) 动态获取适当的子网,然后将该子网的 ID 传递到供应模块。
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnet_ids https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html