Tat*_*ead 9 aws-cloudformation amazon-vpc aws-security-group
我想为公共子网中的单个 Linux EC2 实例编写一个完整的 CloudFormation 模板。我使用AWS CloudFormation 模板创建了一个以安全组为起点的 EC2 实例。此模板在您的默认 VPC 中启动一个实例。
我的目标是拥有一个自包含模板,可以在新堆栈中创建所需的所有内容,但不会创建到默认 VPC 中。我想要一个新的 VPC、安全组、路由表、互联网网关、子网并启动一个新的 Linux EC2 实例。
所以我使用了上面的模板并添加了所需的资源并使用Refs链接它们。一切都很好: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" ] } ] }
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息不清楚该怎么做。
Tat*_*ead 15
在搜索错误消息后,我遇到很多人抱怨错误消息含糊不清,但没有针对 CloudFormation 模板中的 EC2 资源进行特定修复。
有人提到,当您不将 EC2 启动到默认 VPC 时,您需要指定安全组 id 而不是安全组名称。
检查EC2 CloudFormation Resource type的参考,有:
安全组
[EC2-Classic,默认 VPC] 安全组的名称。对于非默认 VPC,您必须改用安全组 ID。
在页面顶部,为 EC2 指定了安全组 ID,如下所示:
"SecurityGroupIds" : [ String, ... ],
Run Code Online (Sandbox Code Playgroud)
所以我将我的 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" ] } ] }
}
},
Run Code Online (Sandbox Code Playgroud)
它奏效了。
| 归档时间: |
|
| 查看次数: |
7181 次 |
| 最近记录: |