繁体   English   中英

安全组的 AWS Cloudformation 跨堆栈引用 - 错误

[英]AWS Cloudformation Cross stack ref for Security group - error

我有以下 2 个堆栈 1) 堆栈 1 - 这是.network 堆栈,定义 vpc、su.nets 和安全组 2) 堆栈 2 - 此堆栈定义 ec2 实例

网络堆栈导出如下

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

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

  "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,但收到类似的错误

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

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

Laurent Jalbert Simard 的回答是正确的。 Fn:ImportValue 应包含在 [] 中以提供导入值作为列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM