CloudFormation 在启动 EC2 实例时抛出“Value () for parameter groupId is invalid. The value cannot be empty”

Posted

技术标签:

【中文标题】CloudFormation 在启动 EC2 实例时抛出“Value () for parameter groupId is invalid. The value cannot be empty”【英文标题】:CloudFormation throws "Value () for parameter groupId is invalid. The value cannot be empty" when launching EC2 instance 【发布时间】:2019-11-02 16:35:59 【问题描述】:

我想为公共子网中的单个 Linux EC2 实例编写完整的 CloudFormation 模板。我使用AWS CloudFormation template for creating an EC2 Instance with a Security Group 作为我的起点。此模板会在您的默认 VPC 中启动一个实例。

我的目标是拥有一个独立的模板,该模板可以在新堆栈中创建所需的所有内容,但不会在默认 VPC 中创建。我想要一个新的 VPC、安全组、路由表、互联网网关、子网并启动一个新的 Linux EC2 实例。

所以我使用上面的模板并添加了所需的资源并使用Ref s 链接它们。一切都创建得很好:VPC、子网、安全组、Internet GW、RouteTables 等。但是我的 EC2 会出错并且堆栈会回滚。

状态原因是:

Value () for parameter groupId is invalid. The value cannot be empty (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)

CloudFormation 模板中的 EC2 资源如下所示:

"EC2Instance" : 
        "Type" : "AWS::EC2::Instance",
        "Properties" : 
          "InstanceType" :  "Ref" : "InstanceType" ,
          "SecurityGroups" : [  "Ref" : "InstanceSecurityGroup"  ],
          "KeyName" :  "Ref" : "KeyName" ,
          "ImageId" :  "Fn::FindInMap" : [ "AWSRegionArch2AMI",  "Ref" : "AWS::Region" ,
                             "Fn::FindInMap" : [ "AWSInstanceType2Arch",  "Ref" : "InstanceType" , "Arch" ]  ] 
          
      

错误信息不清楚该怎么做。

【问题讨论】:

【参考方案1】:

在搜索错误消息后,我发现很多人抱怨错误消息含糊不清,但没有针对 CloudFormation 模板中的 EC2 资源进行具体修复。

有人提到,当您不将 EC2 启动到默认 VPC 中时,您需要指定安全组 id 而不是安全组名称。

查看reference for the EC2 CloudFormation Resource type,有这个:

安全组

[EC2-Classic,默认 VPC] 安全组的名称。对于非默认 VPC,您必须改用安全组 ID。

在页面顶部,为 EC2 指定了安全组 ID,如下所示:

"SecurityGroupIds" : [ String, ... ],

所以我将我的 EC2 资源更改为以下内容:

"EC2Instance" : 
        "Type" : "AWS::EC2::Instance",
        "Properties" : 
          "InstanceType" :  "Ref" : "InstanceType" ,
          "SecurityGroupIds" : [ 
               "Fn::GetAtt" : [ "InstanceSecurityGroup", "GroupId" ] 
            ],
          "SubnetId" : "Ref":"TestSubnet",
          "KeyName" :  "Ref" : "KeyName" ,
          "ImageId" :  "Fn::FindInMap" : [ "AWSRegionArch2AMI",  "Ref" : "AWS::Region" ,
                             "Fn::FindInMap" : [ "AWSInstanceType2Arch",  "Ref" : "InstanceType" , "Arch" ]  ] 
          
      ,

它成功了。

【讨论】:

【参考方案2】:

当我在 EC2 实例资源声明中使用属性 SecurityGroups 时,尝试在默认 VPC 中创建 EC2 实例时遇到此错误。切换到SecurityGroupIds 为我解决了这个问题。

【讨论】:

是的,我使用 java SDK 1.11.1000 从 SecurityGroups 更改为 SecurityGroupIds 为我工作

以上是关于CloudFormation 在启动 EC2 实例时抛出“Value () for parameter groupId is invalid. The value cannot be empty”的主要内容,如果未能解决你的问题,请参考以下文章