Terraform throws" groupName不能与参数子网"一起使用。或者" VPC安全组不得用于非VPC发布"

时间:2015-07-22 17:20:37

标签: amazon-web-services amazon-vpc vpc terraform

在尝试了解如何使用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: []

4 个答案:

答案 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)

TL;博士

  

当您为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
}