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”的主要内容,如果未能解决你的问题,请参考以下文章