安全组的AWS Cloudformation跨堆栈参考-错误

时间:2018-07-04 20:18:06

标签: amazon-web-services amazon-cloudformation

我的筹码量低于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,但收到类似的错误

1 个答案:

答案 0 :(得分:0)

即使您只想指定1个安全组,CloudFormation也需要一个列表。此处的解决方案是列出一个元素的列表,该元素是导入的安全组。在您的情况下,它将如下所示(请注意括号):

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