Terraform throws "groupName не может использоваться с подсети параметров" или "группы безопасности VPC не могут использоваться для запуска без VPC"
При попытке выяснить, как настроить aws_instance
с AWC VPC, возникают следующие ошибки:
* Error launching source instance: InvalidParameterCombination: The parameter groupName cannot be used with the parameter subnet
status code: 400, request id: []
или
* Error launching source instance: InvalidParameterCombination: VPC security groups may not be used for a non-VPC launch
status code: 400, request id: []
Ответы
Ответ 1
Это связано с тем, как группа безопасности связана с экземпляром.
Без подсети это нормально, чтобы связать его с помощью имени группы безопасности:
resource "aws_instance" "server" {
...
security_groups = [ "${aws_security_group.my_security_group.name}" ]
}
В случае, когда подсеть также связана, вы не можете использовать имя, но вместо этого должны использовать идентификатор группы безопасности:
security_groups = [ "${aws_security_group.my_security_group.id}" ]
subnet_id = "${aws_subnet.my_subnet.id}"
Вышеупомянутое предполагает, что вы создали группу безопасности с именем my_security_group
, а подсеть с именем my_subnet
Ответ 2
TL;DR
Когда вы указываете группу безопасности для VPC с неконтролируемой проверкой на CLI или действия API, вы должны использовать идентификатор группы безопасности и не имя группы безопасности для идентификации группа безопасности.
Смотрите: Группы безопасности для EC2-VPC
Другими словами, если вы пытаетесь настроить запуск VPC, но ошибка возникает из-за запуска не VPC, пожалуйста, проверьте ниже.
-
Если вы указали subnet_id
, вы не можете использовать security_groups
вместе с ним. Для VPC не по умолчанию вы должны использовать идентификаторы групп безопасности.
-
Укажите правильную subnet_id
, которая указывает подсеть для загрузки экземпляра в (только для VPC). Если вы не укажете подсеть в запросе, вам будет назначена подсеть по умолчанию из вашего VPC по умолчанию (только учетные записи EC2-VPC).
-
Убедитесь, что вы выбрали правильный тип экземпляра (например, c4, m4, t2), см. Типы экземпляров доступны только в VPC.
Смотрите также: run-instances docs:
-
Некоторые типы экземпляров могут быть запущены только в VPC. Если у вас нет VPC по умолчанию или если вы не укажете идентификатор подсети в запросе, выполняются экземпляры экземпляра.
-
--security-groups
- [EC2-Classic, по умолчанию VPC] Одно или несколько имен групп безопасности. Для неконтролируемого VPC вместо этого необходимо использовать идентификаторы группы безопасности.
Связанные страницы в документации AWS:
Ответ 3
Я столкнулся с подобной проблемой.
Существует связь между Группой безопасности и Подсетями, которая является как ссылками на VPC. Поэтому, если вы командуете создать экземпляр (например, экземпляр EC2) в "подсети1", ваш экземпляр будет создан в "vpc1", где находится подсеть 1. Когда вы не определяете группу безопасности, она будет использовать "по умолчанию", группа безопасности в VPC.
Имеет смысл, почему он не разрешает группы безопасности при определении подсети, потому что это может быть сложно, если вы пытаетесь назначить группы безопасности не в том же vpc, что и подсеть.
Но было бы лучше, что AWS позволяет определить группу безопасности по крайней мере в том же VPC, что и подсеть.
Ответ 4
При настройке AWS VPC обязательно используйте только идентификатор подсети и идентификаторы групп.
Пример:
resource "aws_instance" "forms_selenium_hub_dev" {
...
subnet_id = "subnet-1a2b3c4d5e" # Subnet - Subnet ID
vpc_security_group_ids = ["sg-a1b2c3d4e5"] # Security Groups - Group ID
}