我试图在CUDR 172.31.32.0/20的eu-west-1a子网中使用默认VPC(CIDR 172.31.0.0/16)中的Terraform使用私有IP地址172.31.32.101启动一个实例。 我通常可以做到这一点没有问题,但越来越多,我发现terraform apply失败,出现以下错误:
* Error launching source instance: InvalidParameterValue: Address 172.31.32.101 does not fall within the subnet's address range status code: 400, request id: []
我怀疑,至less在某些时候,这是AWS或Terraform的问题,但我承认,我对CIDR块的了解(尤其是/ x最后)有点欠缺。 但是,我检查了这个子网计算器 ,看到我传递给该实例的IP至less应该是有效的。
AWS是否因为其他原因失败,例如我试图在太短的时间内提升太多的实例,Terraform给我错误的错误? 或者我通过的IP实际上是无效的?
编辑 – 代码如下:
instances.tf:
resource "aws_instance" "mgmt-jump" { ami = "${lookup(var.amis, var.region)}" instance_type = "t2.micro" key_name = "${var.key_pair}" security_groups = ["${aws_security_group.mgmt-jump-sg.name}"] count = "${var.mgmt_jump_count}" private_ip = "${lookup(var.mgmt_jump_private_ips,count.index)}" tags { Name = "mgmt-jump-${count.index+1}" category = "dec" environment = "management" role = "jump" } }
variables.tf:
variable "region" { default = "eu-west-1" } variable "amis" { default = { # AMIs for Ubuntu 14.04 eu-west-1 = "ami-47a23a30" eu-west-2 = "ami-accff2b1" } } variable "mgmt_jump_count" { default = "1" } variable "mgmt_jump_private_ips" { default = { "0" = "172.31.32.101" "1" = "172.31.32.102" } }
编辑2:我运行了下面的命令,用AWS CLI调出实例,如果不是干运行标志,它会成功,所以我相信这可能是Terraform的一个问题。
➜ ~ aws ec2 run-instances --image-id ami-47a23a30 --private-ip-address 172.31.32.101 --instance-type t2.micro --dry-run A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.
无论哪种方式,我现在不使用默认的VPC,即使我使用上面描述的相同的CIDR块,我发现我不再遇到这个问题。 话虽如此,我现在提高IP地址172.31.0.6而不是172.31.32.101我的跳转主机,这可能是为什么我没有遇到问题。
示例中的aws_instance资源没有提供subnet_id属性,因此该实例将启动到您帐户的目标区域的默认子网中。 默认子网可能不是您正在尝试使用的子网,因此它具有不同的IP地址范围。
要解决这个问题,请确定适当的子网ID并为您的声明添加一个subnet_id属性,然后从security_groups属性切换到vpc_security_group_ids属性:
resource "aws_instance" "mgmt-jump" { count = "${var.mgmt_jump_count}" ami = "${lookup(var.amis, var.region)}" instance_type = "t2.micro" key_name = "${var.key_pair}" subnet_id = "subnet-xxxxxxx" vpc_security_group_ids = ["${aws_security_group.mgmt-jump-sg.id}"] private_ip = "${lookup(var.mgmt_jump_private_ips,count.index)}" tags { Name = "mgmt-jump-${count.index+1}" category = "dec" environment = "management" role = "jump" } }