amazon-web-services - AWS 云形成 : Nested Stacks - Unresolved dependencies

标签 amazon-web-services parameters nested dependencies aws-cloudformation

好吧,我从主模板中调用嵌套堆栈。我以为我已经弄清楚如何在嵌套堆栈之间正确导出和导入值。我意识到我的很多命名约定的格式都达不到标准,我这周刚刚开始学习 CloudFormation 脚本。

每次我尝试创建此堆栈时,它们都会创建,直到我到达“公共(public)路线”,此时我得到:

Template format error: Unresolved resource dependencies [InternetGatewayStackname] in the Resources block of the template

据我所知,我对公共(public)路由的处理与 Vpc 堆栈完全相同,并且有效。由于某种原因,我无法使用公共(public)路线。

主堆栈:

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "Master template, creates three private subnets, one public, two routes, an internetgateway, nat gateway, and bastion host.",
    "Parameters" : {
        "AvailabilityZone" : {
            "Default" : "us-east-1d",
            "Description" : "Enter AvailabilityZone.",
            "Type" : "String"
        },
        "VpcCidrBlock" : {
            "Default" : "10.0.0.0/16",
            "Description" : "VPC CIDR Block.",
            "Type" : "String"
        },
        "PublicSubnetCidrBlock" : {
            "Default" : "10.0.0.0/24",
            "Description" : "Public subnet CIDR block.",
            "Type" : "String"
        },
        "PrivateSubnetCidrBlock1" : {
            "Default" : "10.0.1.0/24",
            "Description" : "Private subnet CIDR block.",
            "Type" : "String"
        },
        "PrivateSubnetCidrBlock2" : {
            "Default" : "10.0.2.0/24",
            "Description" : "Private subnet CIDR block.",
            "Type" : "String"
        },
        "PrivateSubnetCidrBlock3" : {
            "Default" : "10.0.3.0/24",
            "Description" : "Private subnet CIDR block.",
            "Type" : "String"
        }
    },
    "Resources" : {
        "VpcStack" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "VpcCidrBlock" : {
                        "Ref" : "VpcCidrBlock"
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/URLs/templates/vpcStack.json",
                "TimeoutInMinutes" : "5"
            }
        },
        "PrivateSubnetStack1" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "PrivateSubnetCidrBlock1" : {
                        "Ref" : "PrivateSubnetCidrBlock1"
                    },
                    "VpcStackName" : {
                        "Fn::GetAtt" : [
                            "VpcStack",
                            "Outputs.VpcStack"
                        ]
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/URLs/templates/privateSubnetStack1.json",
                "TimeoutInMinutes" : "5"
            }
        },
        "PrivateSubnetStack2" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "PrivateSubnetCidrBlock2" : {
                        "Ref" : "PrivateSubnetCidrBlock2"
                    },
                    "VpcStackName" : {
                        "Fn::GetAtt" : [
                            "VpcStack",
                            "Outputs.VpcStack"
                        ]
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/URLs/templates/privateSubnetStack2.json",
                "TimeoutInMinutes" : "5"
            }
        },
        "PrivateSubnetStack3" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "PrivateSubnetCidrBlock3" : {
                        "Ref" : "PrivateSubnetCidrBlock3"
                    },
                    "VpcStackName" : {
                        "Fn::GetAtt" : [
                            "VpcStack",
                            "Outputs.VpcStack"
                        ]
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/URLs/templates/privateSubnetStack3.json",
                "TimeoutInMinutes" : "5"
            }
        },
        "PublicSubnetStack" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "PublicSubnetCidrBlock" : {
                        "Ref" : "PublicSubnetCidrBlock"
                    },
                    "VpcStackName" : {
                        "Fn::GetAtt" : [
                            "VpcStack",
                            "Outputs.VpcStack"
                        ]
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/URLs/templates/publicSubnetStack.json",
                "TimeoutInMinutes" : "5"
            }
        },
        "InternetGatewayStack" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "VpcStackName" : {
                        "Fn::GetAtt" : [
                            "VpcStack",
                            "Outputs.VpcStack"
                        ]
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/URLs/templates/internetGatewayStack.json",
                "TimeoutInMinutes" : "5"
            }
        },
        "PublicRouteStack" : {
            "Type" : "AWS::CloudFormation::Stack",
            "Properties" : {
                "Parameters" : {
                    "VpcStackName" : {
                        "Fn::GetAtt" : [
                            "VpcStack",
                            "Outputs.VpcStack"
                        ]
                    },
                    "PublicSubnetStackName" : {
                        "Fn::GetAtt" : [
                            "PublicSubnetStack",
                            "Outputs.PublicSubnetStack"
                        ]
                    },
                    "InternetGatewayStackName" : {
                        "Fn::GetAtt" : [
                            "InternetGatewayStack",
                            "Outputs.InternetGatewayStack"
                        ]
                    }
                },
                "TemplateURL" : "https://s3.amazonaws.com/URLs/templates/publicRouteStack.json",
                "TimeoutInMinutes" : "5"
            }

        }
    }
}

公共(public)子网:

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "Public Subnet Stack",
    "Parameters" : {
        "PublicSubnetCidrBlock" : {
            "Description" : "Public subnet CIDR block.",
            "Type" : "String"
        },
        "VpcStackName" : {
            "Description" : "VPC Stack Name.",
            "Type" : "String"
        }
    },
    "Resources" : {
        "PublicSubnet" : {
            "Type" : "AWS::EC2::Subnet",
            "Properties" : {
                "VpcId" : {
                    "Fn::Sub" : "${VpcStackName}"
                },
                "CidrBlock" : {
                    "Ref" : "PublicSubnetCidrBlock"
                },
                "Tags" : [
                    {
                        "Key" : "Application",
                        "Value" : {
                            "Ref" : "AWS::StackName"
                        }
                    },
                    {
                        "Key" : "Network",
                        "Value" : "Public"
                    }
                ]
            }
        }
    },
    "Outputs" : {
        "PublicSubnetStack" : {
            "Description" : "Public Subnet ID.",
            "Value" : {
                "Ref" : "PublicSubnet"
            },
            "Export" : {
                "Name" : {
                    "Fn::Sub" : "${AWS::StackName}-PublicSubnet"
                }
            }
        }
    }
}

互联网网关:

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "Internet Gateway",
    "Parameters" : {
        "VpcStackName" : {
            "Description" : "VPC Stack Name.",
            "Type" : "String"
        }
    },
    "Resources" : {
        "InternetGateway" : {
            "Type" : "AWS::EC2::InternetGateway",
            "Properties" : {
                "Tags" : [
                    {
                        "Key" : "Application",
                        "Value" : {
                            "Ref" : "AWS::StackId"
                        }
                    },
                    {
                        "Key" : "Network",
                        "Value" : "Public"
                    }
                ]
            }
        },
        "GatewayToInternet" : {
            "Type" : "AWS::EC2::VPCGatewayAttachment",
            "Properties" : {
                "VpcId" : {
                    "Fn::Sub" : "${VpcStackName}"
                },
                "InternetGatewayId" : {
                    "Ref" : "InternetGateway"
                }
            }
        }
    },
    "Outputs" : {
        "InternetGatewayStack" : {
            "Description" : "Internet Gateway ID.",
            "Value" : {
                "Ref" : "InternetGateway"
            },
            "Export" : {
                "Name" : {
                    "Fn::Sub" : "${AWS::StackName}-InternetGateway"
                }
            }
        }
    }
}

公共(public)路线:

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Description" : "Public Route Table",
    "Parameters" : {
        "VpcStackName" : {
            "Description" : "VPC Stack Name.",
            "Type" : "String"
        },
        "PublicSubnetStackName" : {
            "Description" : "Public Subnet Stack Name.",
            "Type" : "String"
        },
        "InternetGatewayStackName" : {
            "Description" : "Internet Gateway Stack Name.",
            "Type" : "String"
        }
    },
    "Resources" : {
        "PublicRouteTable" : {
            "Type" : "AWS::EC2::RouteTable",
            "Properties" : {
                "VpcId" : {
                    "Fn::Sub" : "${VpcStackName}"
                },
                "Tags" : [
                    {
                        "Key" : "Application",
                        "Value" : {
                            "Ref" : "AWS::StackId"
                        }
                    },
                    {
                        "Key" : "Network",
                        "Value" : "Public"
                    }
                ]
            }
        },
        "PublicRoute" : {
            "Type" : "AWS::EC2::Route",
            "Properties" : {
                "RouteTableId" : {
                    "Ref" : "PublicRouteTable"
                },
                "DestinationCidrBlock" : "0.0.0.0/0",
                "GatewayId" : {
                    "Fn::Sub" : "${InternetGatewayStackname}"
                }
            }
        },
        "PublicSubnetRouteTableAssociation" : {
            "Type" : "AWS::EC2::SubnetRouteTableAssociation",
            "Properties" : {
                "SubnetId" : {
                    "Fn::Sub" : "${PublicSubnetStackName}"
                },
                "RouteTableId" : {
                    "Ref" : "PublicRouteTable"
                }
            }
        }
    },
    "Outputs" : {
        "PublicRoute" : {
            "Description" : "Public Route.",
            "Value" : {
                "Ref" : "PublicRoute"
            },
            "Export" : {
                "Name" : {
                    "Fn::Sub" : "${AWS::StackName}-PublicRoute"

                }
            }
        }
    }
}

谢谢!

最佳答案

您的资源名为 InternetGatewayStackName

但是在您的 PublicRoute 资源中,您正在使用以下内容:

"Fn::Sub" : "${InternetGatewayStackname}"

请注意,子项中的大小写与资源名称中的大小写不匹配。

关于amazon-web-services - AWS 云形成 : Nested Stacks - Unresolved dependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43403931/

相关文章:

java - 子类中具有不同值的静态参数

php - 如何防止嵌套函数调用?

javascript - JS - 递归 - 遍历对象图返回找到的对象并保存路径

c - 带指针的嵌套结构

amazon-web-services - AWS SNS : Case of multiple subscribers

amazon-web-services - 如何 Dynamodb 向 SQS 发送消息

xslt - "context"关于调用模板参数的含义

mysql - 为什么我在我的 AWS Aurora RDS 日志中看到 "server_audit: logging was flushed."?

amazon-web-services - Amazon SQS DLQ:是否将早于14天的sqs消息移至DLQ

java - JNI 函数导致 Android 应用程序崩溃