Почему частный IP-адрес моего экземпляра AWS находится вне диапазона подсети?
Я пытаюсь запустить экземпляр с частным IP-адресом 172.31.32.101, используя Terraform в моем VPC по умолчанию (CIDR 172.31.0.0/16), в подсети eu-west-1a с CIDR 172.31.32.0/20. Обычно я могу сделать это без проблем, но все больше и больше я нахожу, что 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: []
Я подозреваю, что, поскольку это работает, по крайней мере, иногда, это проблема с AWS или Terraform, но я признаю, что мои знания о блоках CIDR (особенно /x в конце) немного не хватает. Однако я проверил калькулятор подсети и увидел, что IP-адрес, который я передаю экземпляру, должен быть действительным.
Не работает ли 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: Я выполнил следующую команду, чтобы вызвать экземпляр с CLI AWS, который был бы успешным, если бы не флаг пробного запуска, поэтому я считаю, что это может быть проблемой с 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, поэтому, возможно, поэтому я не сталкиваюсь с проблемой.
1 ответ
aws_instance
Ресурс в примере не имеет subnet_id
атрибут, поэтому экземпляр будет запускаться в подсети по умолчанию вашей учетной записи для целевого региона. Вероятно, подсеть по умолчанию не та, которую вы пытались использовать, и поэтому у нее другой диапазон IP-адресов.
Чтобы это исправить, определите соответствующий идентификатор подсети и добавьте 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"
}
}