小编Jon*_*o D的帖子

将未知大小的安全组列表添加到EC2实例

我们有一个CloudFormation模板,用于创建EC2实例和安全组(以及许多其他资源),但我们需要能够向同一个EC2实例添加一些其他预先存在的安全组.

我们遇到的问题是,预先存在的安全组的数量并不总是相同,我们希望有一个模板来处理所有情况.

目前,我们有一个输入参数,如下所示:

"WebTierSgAdditional": {
  "Type": "String",
  "Default": "",
  "Description": ""
}
Run Code Online (Sandbox Code Playgroud)

我们将此参数传递给逗号分隔的预先存在的安全组字符串,例如'sg-abc123,sg-abc456'.

EC2实例的SecurityGroup标记如下所示:

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

使用此代码,在创建实例时,我们会在AWS控制台中收到此错误:

必须对所有安全组使用group-id或group-name,而不是同时使用

上面的'WebSg'参考是在模板中其他地方创建的安全组之一.如果我们通过输入参数传入组名列表而不是组ID列表,则会出现同样的错误.

当我们将输入参数的"类型"字段更改为"CommaDelimitedList"时,我们会收到错误消息:

属性值SecurityGroups的类型必须是List of String

它显然无法使用字符串连接列表以使其成为新列表.

当参数只包含一个sg id时,所有内容都会成功创建,但是,我们需要能够添加多个sg id.

我们Fn::Join在SecurityGroups标记中尝试了许多不同的使用组合,但似乎没有任何效果.我们真正需要的是某种"爆炸"功能,用于从参数字符串中提取单个id.

有谁知道一个很好的方法让这个工作?

amazon-ec2 amazon-web-services aws-cloudformation

14
推荐指数
2
解决办法
1万
查看次数