Почему частный 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 так, чтобы мог быть то, почему я не встречаюсь с проблемой.

3
задан 3 October 2017 в 21:17
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"
  }
}
4
ответ дан 3 December 2019 в 06:04

Теги

Похожие вопросы