启动EC2实例时,CloudFormation引发“参数groupId的Value()无效。该值不能为空”

时间:2019-06-19 21:28:39

标签: amazon-cloudformation amazon-vpc aws-security-group

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

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

因此,我使用了上面的模板,并添加了所需的资源,并使用Ref链接了它们。一切正常: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" ] } ] }
          }
      }

该错误消息不清楚该怎么办。

2 个答案:

答案 0 :(得分:0)

搜索错误消息后,我遇到许多人抱怨这个模糊的错误消息,但是在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" ] } ] }
          }
      },

它奏效了。

答案 1 :(得分:0)

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