16

当试图弄清楚如何aws_instance使用 AWS 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: []
4

4 回答 4

15

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

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

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

于 2016-01-04T08:03:12.450 回答
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 中可用的实例类型

另请参阅:运行实例文档页面:

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

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

AWS 文档中的相关页面:

于 2016-06-12T12:18:46.790 回答
3

我遇到了类似的问题。

安全组和子网之间存在关系,即都链接到 VPC。因此,如果您命令在“subnet1”中创建实例(例如 EC2 实例),您的实例将在 subnet1 所在的“vpc1”中创建。当您未定义安全组时,它将使用“默认” VPC 中的安全组。

当您定义子网时为什么它不允许安全组是有道理的,因为如果您尝试分配与子网不在同一个 vpc 中的安全组,它可能会很复杂。

但如果 AWS 允许至少在与子网相同的 VPC 中定义一个安全组,那就更好了。

于 2016-04-06T01:33:48.727 回答
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
}
于 2015-07-22T17:20:36.933 回答