跨子网可用的Terrain查找IP地址

问题描述

我们一次性配置了相当多的服务器(每个部署环境每个环境有57个)。我们每个子网获得的IP地址是32个,每个AWS账户共有96个IP,我想有效地利用它。

  1. 我们正在使用此元素(split(“,”,local.ec2_subnet),count.index)在子网之间使用IP旋转
  2. 说是因为实例还是随机终止。在96个IP中,我们剩下了57个IP,但这些IP分布不均匀。 子网1a:7 子网1b:25 子网1c:25
  3. 现在,当我尝试设置下一组时。 terraform失败,并显示子网中IP地址不可用的错误。它是轮流分配的。 (没有来自AWS的反馈)
  4. 是否有更好的方法来知道具有可用IP地址的子网并进行相应分配?

@ydaetskcoR添加用于重新生成的代码: 三种类型的服务器:只需创建以下提到的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(",2)
    . . .
 }
resource "aws_instance" "compute_instance" {
    count    =  48
    subnet_id   = element(split(",2)
    . . .
 }
 

说分布如下表。并根据它们所在的子网终止其中的少数几个。这样您就可以获得可用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之后,子网1a将会失败(由于IP地址不可用,所以12个将失败,但是实际上在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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...