【问题标题】:AWS Cloudformation Cross stack ref for Security group - error安全组的 AWS Cloudformation 跨堆栈参考 - 错误
【发布时间】:2018-12-13 06:54:46
【问题描述】:

我有以下 2 个堆栈 1) 堆栈 1 - 这是网络堆栈,定义 vpc、子网和安全组 2) 堆栈 2 - 此堆栈定义 ec2 实例

以下网络堆栈导出

   WebServerSG:
     Description : "Web Server Security Group"
     Value: !GetAtt InstanceSecurityGroup.GroupId
     Export:
       Name: !Sub ${AWS::StackName}-WebServerSG

ec2实例栈接受一个参数“NetworkStack”,使用网络栈引用安全组如下

  "Resources" : {
    "WebServerInstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
                          { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] },
        "InstanceType"   : { "Ref" : "InstanceType" },
        "SubnetId" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStack}-SubnetADMZ"}},
        "SecurityGroupIds" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStack}-WebServerSG"}},
        "KeyName"  : { "Ref" : "KeyName" }
        }
    }
  },

ec2 实例堆栈失败并出现错误,“属性 SecurityGroupIds 的值必须是字符串列表类型”

我尝试改用 SecurityGroups,但收到类似错误

【问题讨论】:

  • 有关专业服务器或网络相关基础设施管理的问题对于 Stack Overflow 来说是无关紧要的,除非它们直接涉及编程或编程工具。您可以通过Server Fault 获得帮助。
  • @tambre 我认为像 CloudFormation 这样的“基础架构即代码 (IaC)”工具是个例外。它明显模糊了传统 IT(Serverfault)和编程(StackOverflow)之间的界限。有一件事是肯定的,“amazon-cloudformation”标签在这里的活动(2239 个问题)比在 Serverfault 上的活动(180 个问题)要多。
  • @LaurentJalbertSimard JSON 和 YAML 不是编程语言吗?对我来说,CloudFormation 模板/堆栈文件似乎只是非常强大的配置文件格式。
  • @tambre 我认为 DevOps 的兴起让这条线更加模糊。拥有单独的 Stack Exchange 站点背后的想法是,更容易将一个主题集中在您的工作范围内。 StackOverflow -> 开发者,Serverfault -> 系统操作员/管理员。但是使用 DevOps,您可以处理开发和操作。这些不再是单独的主题,尤其是当问题与 IaC 相关时。我并不是说你错了,但我相信问题比你想象的要复杂。

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

即使您只想指定 1 个安全组,CloudFormation 也需要一个列表。这里的解决方案是列出一个元素,该元素是导入的安全组。在你的情况下,它看起来像这样(注意括号):

...
"SecurityGroupIds" : [{"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStack}-WebServerSG"}}],
...

【讨论】:

  • 我遇到了同样的问题,并尝试在 yaml 中实现上述解决方案,但不起作用。我的假设是 yaml 中的字符“[”和“]”需要使用 Fn::Join 与安全组一起附加。 . SecurityGroupIds: Fn::Join: - '' - - '[' - Fn::ImportValue: !Sub ${SGStack}-WebSg - ']'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2018-08-06
  • 2021-03-31
  • 2017-02-21
  • 2017-05-05
相关资源
最近更新 更多