Terraform抛出"groupName不能与参数子网一起使用"或"VPC安全组不能用于非VPC启动"

Den*_*oer 14 vpc amazon-web-services amazon-vpc terraform

在尝试了解如何aws_instance使用AWS VPC 配置时,会发生以下错误:

* Error launching source instance: InvalidParameterCombination: The parameter groupName cannot be used with the parameter subnet
    status code: 400, request id: []
Run Code Online (Sandbox Code Playgroud)

要么

* Error launching source instance: InvalidParameterCombination: VPC security groups may not be used for a non-VPC launch
    status code: 400, request id: []
Run Code Online (Sandbox Code Playgroud)

agb*_*ike 13

这是由于安全组与实例关联的方式.

没有子网,可以使用安全组的名称关联它:

resource "aws_instance" "server" {
  ...
  security_groups = [ "${aws_security_group.my_security_group.name}" ]
}
Run Code Online (Sandbox Code Playgroud)

在子网也关联的情况下,您不能使用该名称,而应使用安全组的ID:

security_groups = [ "${aws_security_group.my_security_group.id}" ]
subnet_id = "${aws_subnet.my_subnet.id}"
Run Code Online (Sandbox Code Playgroud)

以上假设您已创建名为的安全组my_security_group和名为的子网my_subnet


ken*_*orb 6

TL;博士

为CLI或API操作指定非默认VPC 的安全组时,必须使用安全组ID不是安全组名称来标识安全组.

请参阅:EC2-VPC的安全组


换句话说,如果您尝试配置VPC启动,但错误抱怨非VPC启动,请检查以下内容.

  • 如果您已指定subnet_id,则不能security_groups同时使用它.对于非默认VPC,您必须使用安全组ID.

  • 请指定subnet_id表示要将实例引导到的子网的权限(仅适用于VPC).如果未在请求中指定子网,则将从您的默认VPC为您分配默认子网(仅限EC2-VPC帐户).

  • 确保您选择了正确的实例类型(例如c4,m4,t2),请参阅:仅在VPC中可用的实例类型.

另请参阅:run-instances docs页面:

  • 某些实例类型只能启动到VPC中.如果您没有默认VPC,或者未在请求中指定子网ID,则run-instances将失败.

  • --security-groups - [EC2-Classic,默认VPC]一个或多个安全组名称.对于非默认VPC,您必须使用安全组ID.

AWS文档中的相关页面: