在尝试了解如何使用AWS VPC配置aws_instance
时,会出现以下错误:
* 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: []
答案 0 :(得分:12)
这是由于安全组与实例的关联方式。
如果没有子网,可以使用安全组的名称关联它:
resource "aws_instance" "server" {
...
security_groups = [ "${aws_security_group.my_security_group.name}" ]
}
如果子网也关联,则无法使用该名称,而应使用安全组的ID:
security_groups = [ "${aws_security_group.my_security_group.id}" ]
subnet_id = "${aws_subnet.my_subnet.id}"
以上假设您已创建名为my_security_group
的安全组,以及名为my_subnet
的子网
答案 1 :(得分:6)
当您为CLI或API操作指定非默认VPC的安全组时,必须使用安全组ID 并不安全组名称才能识别安全小组。
请参阅:Security Groups for EC2-VPC
换句话说,如果您尝试配置VPC启动,但错误抱怨非VPC启动,请检查以下内容。
如果您已指定subnet_id
,则无法使用security_groups
。对于非默认VPC,您必须使用安全组ID 。
请指定正确的 subnet_id
,表示要将实例引导到的子网(仅限VPC)。如果您未在请求中指定子网,则将为您指定默认子网(仅限EC2-VPC帐户)。
确保您选择了正确的实例类型(例如c4,m4,t2),请参阅:Instance Types Available Only in a VPC。
另请参阅:run-instances docs页面:
某些实例类型只能启动到VPC中。如果您没有默认VPC,或者未在请求中指定子网ID,则运行实例将失败。
--security-groups
- [EC2-Classic,默认VPC]一个或多个安全组名称。对于非默认VPC,您必须改为使用安全组ID。
AWS文档中的相关页面:
答案 2 :(得分:3)
我遇到了类似的问题。
安全组和子网之间存在关系,即与VPC的链接。因此,如果您命令在" subnet1"中创建实例(例如EC2实例),您的实例将在" vpc1"中生成。 subnet1所在的位置。当您没有定义安全组时,它将使用"默认" VPC中的安全组。
在定义子网时,为什么它不允许安全组,这是有道理的,因为如果您尝试分配不在与子网相同的vpc中的安全组,则可能会很复杂。
但是,AWS允许至少在与子网相同的VPC中定义安全组会更好。
答案 3 :(得分:1)
配置AWS VPC时,请确保仅使用子网ID和组ID。
示例:
resource "aws_instance" "forms_selenium_hub_dev" {
...
subnet_id = "subnet-1a2b3c4d5e" # Subnet - Subnet ID
vpc_security_group_ids = ["sg-a1b2c3d4e5"] # Security Groups - Group ID
}