【问题标题】:Terraform throws "groupName cannot be used with the parameter subnet" or "VPC security groups may not be used for a non-VPC launch"Terraform 抛出“groupName 不能与参数子网一起使用”或“VPC 安全组不能用于非 VPC 启动”
【发布时间】:2015-10-12 17:29:09
【问题描述】:

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

【问题讨论】:

  • 当 VPC 中不存在安全组时也会发生这种情况。

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


【解决方案1】:

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

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

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 的子网

【讨论】:

    【解决方案2】:

    tl;博士

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

    见:Security Groups for EC2-VPC


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

    • 如果你指定了subnet_id,那么你不能同时使用security_groups。对于非默认 VPC,您必须改用安全组 ID

    • 请指定正确的subnet_id,它表示要将实例引导到的子网(仅适用于VPC)。如果您未在请求中指定子网,则会从您的默认 VPC 为您分配一个默认子网(仅限 EC2-VPC 账户)。

    • 确保您选择了正确的实例类型(例如 c4、m4、t2),请参阅:Instance Types Available Only in a VPC

    另请参阅:run-instances 文档页面:

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

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

    AWS 文档中的相关页面:

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题。

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

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

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

      【讨论】:

        【解决方案4】:

        在配置 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
        }
        

        【讨论】:

          猜你喜欢
          • 2014-04-17
          • 2016-11-23
          • 2017-03-09
          • 2020-02-07
          • 2020-12-20
          • 1970-01-01
          • 2020-10-28
          • 2019-06-29
          • 2019-02-05
          相关资源
          最近更新 更多