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

Fri*_*sen 2 amazon-ec2 amazon-cloudformation

概括

我正在尝试创建一个 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",
Run Code Online (Sandbox Code Playgroud)

安全组如下所示

"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"}
    ]
  }
},
Run Code Online (Sandbox Code Playgroud)

如何创建然后获取该安全组的 ID?

EEA*_*EAA 6

你只需要改变这一行:

"SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ],
Run Code Online (Sandbox Code Playgroud)

对此:

"SecurityGroupIds" : [ {"Ref" : "WebServerSecurityGroup"} ],
Run Code Online (Sandbox Code Playgroud)

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

  • 我有[要点](https://gist.github.com/ftclausen/292aef2ff55477711d89#file-gistfile1-json-L143-L144)以获得完整的清单。我正在使用 CF 教程模板,但它已被修改为使用子网,并且我尝试在那里应用安全组。 (2认同)