Amazon web services aws云形成嵌套堆栈导出/导入值

Amazon web services aws云形成嵌套堆栈导出/导入值,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,我正在为自动化aws基础设施创建云形成嵌套模板。基本上我有如下的父配置 "Resources": { "VPCStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { "ClassB": { "Ref": "C

我正在为自动化aws基础设施创建云形成嵌套模板。基本上我有如下的父配置

"Resources": {
    "VPCStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
                    "ClassB": {                      

                           "Ref": "ClassB"                     

                    }                
                },
          "TemplateURL": "https://s3.us-east-2.amazonaws.com/xxx/vpc.json",
          "TimeoutInMinutes": "5"
      }
    },
    "NatStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
                    "ParentVPCStack": { "Ref": "AWS::StackName" },
                    "SubnetZone": {"Ref": "SubnetZone"}           
                },
          "TemplateURL": "https://s3.us-east-2.amazonaws.com/xxx/nat-gateway.json",
          "TimeoutInMinutes": "5"
      },
      "DependsOn": "VPCStack"
    }
  }
以上将触发嵌套CF,我在VPC中有如下导出输出

"Outputs": {
                "StackName": {
            "Description": "Stack name.",
            "Value": {
                "Fn::Sub": "${AWS::StackName}"
            }
        },
        "AZs": {
            "Description": "AZs",
            "Value": 2,
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-AZs"
                }
            }
        },
        "AZA": {
            "Description": "AZ of A",
            "Value": {
                "Fn::Select": [
                    0,
                    {
                        "Fn::GetAZs": ""
                    }
                ]
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-AZA"
                }
            }
        },
        "AZB": {
            "Description": "AZ of B",
            "Value": {
                "Fn::Select": [
                    1,
                    {
                        "Fn::GetAZs": ""
                    }
                ]
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-AZB"
                }
            }
        },
        "ClassB": {
            "Description": "Class B.",
            "Value": {
                "Ref": "ClassB"
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-ClassB"
                }
            }
        },
        "VPC": {
            "Description": "VPC.",
            "Value": {
                "Ref": "VPC"
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-VPC"
                }
            }
        },
        "SubnetsPublic": {
            "Description": "Subnets public.",
            "Value": {
                "Fn::Join": [
                    ",",
                    [
                        {
                            "Ref": "SubnetAPublic"
                        },
                        {
                            "Ref": "SubnetBPublic"
                        }
                    ]
                ]
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-SubnetsPublic"
                }
            }
        },
        "SubnetsPrivate": {
            "Description": "Subnets private.",
            "Value": {
                "Fn::Join": [
                    ",",
                    [
                        {
                            "Ref": "SubnetAPrivate"
                        },
                        {
                            "Ref": "SubnetBPrivate"
                        }
                    ]
                ]
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-SubnetsPrivate"
                }
            }
        },
        "RouteTablePrivate": {
            "Description": "Route table private (deprecated in v4, will be removed in v5).",
            "Value": {
                "Ref": "RouteTablePrivate"
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-RouteTablePrivate"
                }
            }
        }
然后,我有nat网关也VPC创建没有问题,但当创建nat网关,我得到这个错误 找不到名为${stack name}-RouteTablePrivate的导出

我的主要CF中有这些输出

"Outputs": {

   "StackRef": {"Value": { "Ref" : "VPCStack"}},

     "Output1FromNestedmyVPCStack" : {

          "Value": { "Fn::GetAtt": [ "VPCStack", "Outputs.RouteTableAPrivate" ] }

      }

   }
}

我如何解决这个问题呢?

您导出的值在RouteTable和Private之间没有A,而您引用的值(RouteTablePrivate)

我怀疑这是因为嵌套堆栈中有“${AWS::StackName}-RouteTablePrivate”

嵌套堆栈会生成您事先不知道的名称


因此,只需将其命名为您的资源“RouteTablePrivate”。这些都应该基于我的假设。

这里。“RouteTablePrivate”:{“Description”:“Route table A private.”,“Value”:{“Ref”:“RouteTablePrivate”},“Export”:{“Name”:{“Fn::Sub”:“${AWS::StackName}-RouteTablePrivate”}我从这里导出,从nat网关cf“Route”:{“Type”:“AWS::EC2::Route”,“Properties”:{“RouteTableId”:{“Fn::ImportValue”:{“Fn::Sub”:“${ParentVPCStack}-RouteTable${SubnetZone}Private”}json模板很难阅读,所以不要在此处粘贴更多json,而是编辑您的问题