使用 Cloud Forms 配置具有特定子网的安全组

使用 Cloud Forms 配置具有特定子网的安全组

概括

我正在尝试创建一个 AWS CloudFormation 模板,其中包含一个我想为其选择特定子网的实例。如果我指定子网 ID,则会出现以下错误The parameter groupName cannot be used with the parameter subnet。从阅读此主题看来我需要提供安全组 ID,而不是名称。如何在 CloudFormation 中创建安全组,然后在事后获取其 ID?

细节

实例配置的相关部分如下

"WebServerHost": {
  "Type" : "AWS::EC2::Instance",
 <..skipping metadata...>
 "Properties": {
    "ImageId" : { "ami-1234" },
    "InstanceType" : { "Ref" : "WebServerInstanceType" },
    "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ],
    "SubnetId"       : "subnet-abcdef123",

安全组如下所示

"WebServerSecurityGroup" : {
  "Type" : "AWS::EC2::SecurityGroup",
  "Properties" : {
    "GroupDescription" : "Enable HTTP and SSH",
    "SecurityGroupIngress" : [
      {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"},
      {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0"}
    ]
  }
},

我如何创建并获取该安全组的 ID?

答案1

您只需更改此行:

"SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ],

更改为:

"SecurityGroupIds" : [ {"Ref" : "WebServerSecurityGroup"} ],

根据Cloudformation 文档关于主题,该SecurityGroups属性仅对 EC2 安全组有效。您正在使用 VPC,因此您需要使用SecurityGroupIds

相关内容